説明
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 バンドルである必要があります。