説明
kube-apiserver の --secure-port は HTTPS API の待ち受けポートを指定します。旧バージョンでは 0 で無効にできましたが、現在の API サーバーでは、この値による無効化は認められていません。
保護された API 接続が使えないと、コントロールプレーンの通信が停止する可能性があります。ポート番号を指定するだけで、適切な証明書やアクセス権限が整うわけではありません。
想定される影響
API サーバーが起動しない、または HTTPS 接続を利用できない場合、クラスター管理やワークロードの運用に支障が生じる可能性があります。代わりに旧非セキュア接続が残っていると、API アクセスが保護されないリスクもあります。
対処方法
- サポートされる Kubernetes バージョンで、
--secure-portを 6443 など環境に適した有効なポートに設定してください。 - API アドレスに合う TLS 証明書、クライアントの信頼設定、適切な認証・認可を構成し、不要なネットワークアクセスを制限してください。
- ポート変更前にクライアントとロードバランサーを準備し、正常な接続、認証失敗、未承認の操作の拒否を検証してください。
例
Kubernetes 1.6 の過去の起動オプションの抜粋です。当時の 0 設定と HTTPS ポート指定を比較しており、現在の環境で古いイメージを使用することを勧めるものではありません。
変更前
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"
args:
- "--secure-port=0"
例示した旧バージョンでは HTTPS 待ち受けが無効になります。現在のバージョンでは無効な設定です。
変更後
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"
- "--secure-port=6443"
HTTPS ポート 6443 を指定しています。証明書、アクセス制御、実際のクライアント接続も確認してください。