旧 kube-apiserver の非セキュアなバインド設定の確認

旧 API サーバーの非セキュアな HTTP リスナーを無効にし、保護された管理経路へ移行してください。

説明

過去の kube-apiserver の非セキュアな HTTP リスナーは、TLS、認証、認可の保護なしで API リクエストを処理しました。--insecure-bind-address はその待ち受けアドレスを指定し、実際の露出は非セキュアポートの有効化と待ち受け先によって異なります。ループバックであっても、そのローカル経路に到達できる主体からのアクセスは残ります。

このフラグは Kubernetes 1.20 で効力を失い、1.24 で削除されました。サポートされるバージョンで保護された API エンドポイントを使用してください。

想定される影響

  • 非セキュアなリスナーに到達できる主体が、権限検査なしに管理 API を悪用する可能性があります。
  • 古い HTTP 経路に依存するクライアントは、保護された接続への移行時に停止する場合があります。

対処方法

  • TLS、認証、認可で保護された API 経路を準備し、既存クライアントを移行してください。
  • 非セキュアなリスナーをサポートする過去のバージョンでは、--insecure-port=0 で無効にしてください。バインド先のフラグを削除するだけではポートは閉じません。
  • サポートされるバージョンへ移行し、実際の待ち受けポートとネットワークアクセスを調べて、非セキュアな経路が残っていないことを確認してください。

例

Kubernetes 1.6 の過去のオプションを比較する抜粋であり、現在推奨されるデプロイ構成ではありません。TLS 証明書と残りの制御プレーン設定は別途必要です。

変更前

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-bind-address=127.0.0.1"

有効な非セキュアリスナーを 127.0.0.1 にバインドします。このアドレスだけでインターネット公開を意味するわけではありませんが、ローカル HTTP アクセスには認証・認可の保護がありません。

変更後

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"

その過去のバージョンで非セキュアポートを明示的に無効にします。必要なクライアントが保護された API 経路で接続できることを確認してください。

参考資料