Kubelet の認証局が未設定

API サーバーが kubelet の HTTPS サーバー証明書を検証できるよう、信頼する CA を指定してください。

説明

--kubelet-certificate-authority は、kube-apiserver が kubelet サーバー証明書の検証に使う CA ファイルを指定します。API サーバーは既定でこの証明書を検証しないため、信頼できないネットワークでは中間者攻撃を受けるおそれがあります。

想定される影響

  • kubelet を装う接続先にログや管理要求が渡る可能性があります。
  • CA やサーバー名が誤っていると検証に失敗し、ノード管理が中断する可能性があります。

対処方法

  • --kubelet-certificate-authority に、kubelet サーバー証明書を発行した信頼済み CA バンドルを指定してください。
  • 接続先のアドレスが証明書の DNS 名または IP アドレスと一致し、API サーバーがファイルを読めることを確認してください。
  • kubelet の認証・認可も構成し、正常な接続の成功と信頼しない証明書の拒否を試験してください。

例

Kubernetes 1.6.0 を使う過去の引数例です。サポート対象の環境で使う実際の CA ファイルとマウント先に置き換えてください。

変更前

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

kubelet サーバー証明書を検証する CA が指定されていません。HTTPS の暗号化だけではサーバーの身元を検証できません。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args: ["--kubelet-certificate-authority=/path/to/any/cert/file.pem"]

検証用 CA ファイルを指定しています。その内容が実際の kubelet サーバー証明書に対応する必要があります。

参考資料