説明
旧 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 証明書、認証・認可、クライアント接続は別途準備してください。