旧 kube-apiserver の非セキュアポート設定の確認

旧 kube-apiserver の非セキュア HTTP ポートを閉じ、保護された API 接続へ移行してください。

説明

旧 kube-apiserver の非セキュア HTTP ポートは、TLS、認証、認可なしで API 要求を処理していました。このポートが開いており、クライアントが到達できると、コントロールプレーンへの不正アクセス経路になるおそれがあります。実際の到達範囲はバインド先アドレスとネットワーク経路にも依存します。

--insecure-port は Kubernetes 1.20 で効力がなくなり、1.24 で削除されました。現在のバージョンにこのフラグを追加せず、残っている旧環境の実際の待ち受けポートとアップグレード計画を確認してください。

想定される影響

非セキュアポートに到達したクライアントが、通常の API 保護なしでクラスターデータを取得したり、ワークロードを変更したりするおそれがあります。平文通信では、転送内容の機密性と完全性も保護できません。

対処方法

  • このオプションに対応する旧バージョンでは、--insecure-port=0 で非セキュアポートを無効にしてください。
  • 依存するクライアントを、TLS と適切な認証・認可で保護された API 接続へ先に移行してください。
  • 非セキュアポートが閉じ、必要な管理操作が成功し、未承認の要求が拒否されることを確認して、サポートされるバージョンへアップグレードしてください。

例

Kubernetes 1.6 の過去の起動オプションを比較する抜粋です。現在の環境でこのイメージや削除済みフラグを使うことを勧めるものではありません。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
        - "--insecure-port=1143"

旧 API サーバーで非セキュア HTTP ポート 1143 を使用する設定です。バインド先アドレスを変更するだけでは、このポートを無効にできません。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: api-server
spec:
  containers:
    - name: kube-apiserver
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command:
        - "kube-apiserver"
        - "--insecure-port=0"

対応していたバージョンでは非セキュアポートが無効になります。TLS 証明書、認証・認可、クライアント接続は別途準備してください。

参考資料