説明
過去の 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 経路で接続できることを確認してください。