secure-port が 0 の kube-apiserver

kube-apiserver の HTTPS 待ち受けポートと、実際の TLS・認証・認可設定を確認してください。

説明

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 を指定しています。証明書、アクセス制御、実際のクライアント接続も確認してください。

参考資料