コントローラーの API サーバー CA 信頼設定の確認

ワークロードに配布する CA バンドルが実際の API サーバー証明書を検証できることを確認してください。

説明

kube-controller-manager の --root-ca-file は、サービスアカウントのトークン Secret などに含める PEM 形式の CA バンドルを指定します。ワークロードはこの信頼情報を使って API サーバーの TLS 証明書を検証できます。トークンの署名に使う秘密鍵とは異なる設定です。

最近のバージョンでは、このパスを省略すると CA 配布コントローラーが自身のクライアント設定にある CA データを使う場合があります。パスの有無だけでなく、実際に配布される CA が API サーバー証明書に対応しているか確認する必要があります。

想定される影響

  • 誤った CA や古い CA により、ワークロードから API サーバーへの TLS 接続が失敗する場合があります。
  • 障害回避のために証明書検証を無効にすると、サーバーのなりすましや中間者攻撃のリスクが生じます。

対処方法

  • API サーバー証明書を検証できる信頼済み CA バンドルを確認し、必要に応じて --root-ca-file を指定してください。
  • 実際の PEM CA ファイルをコントローラーが読めるように提供し、配布された CA と証明書更新手順を確認してください。
  • ワークロードから TLS 検証をテストし、証明書検証を無効にしないでください。

例

従来の v1.6.0 イメージを残した、コマンド引数比較用の抜粋です。このバージョンのデプロイを推奨するものではありません。対応するバージョンと実際の制御プレーン設定に適用し、必要な証明書や接続設定を別途用意してください。 仮のパスは実際に提供した CA 証明書ファイルに置き換えてください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: []

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-controller-manager-amd64:v1.6.0
      command: ["kube-controller-manager"]
      args: ["--root-ca-file=/path/to/ca/file.pem"]

補足:

  • 変更前: CA ファイルのパスを指定していません。実際のバージョンとクライアント設定も確認する必要があります。
  • 変更後: CA ファイルのパスを指定します。ファイルが存在し、API サーバー証明書を検証する正しい PEM CA バンドルである必要があります。

参考資料