Kubelet HTTPS が無効

API サーバーと kubelet の管理通信を HTTPS で保護してください。

説明

過去の kube-apiserver の --kubelet-https=false は、kubelet への接続に HTTPS ではなく HTTP を使用する設定です。保護されていない経路では、要求や応答が盗聴・改ざんされるおそれがあります。

HTTPS の使用と kubelet サーバー証明書の検証は別の制御です。暗号化、サーバーの身元の検証、アクセス制御を合わせて構成してください。

想定される影響

  • ログやノード管理の通信がネットワーク上で漏えいする可能性があります。
  • 要求・応答の改ざんにより、運用操作の完全性が損なわれるおそれがあります。

対処方法

  • この引数に対応する過去の設定から --kubelet-https=false を削除し、使用バージョンが対応する HTTPS 接続を構成してください。
  • kubelet の CA 検証と、必要なクライアント認証・認可を設定してください。
  • 正常なノード管理が成功し、証明書検証の失敗を回避しないことを確認してください。

例

Kubernetes 1.6.0 を使う過去の例です。現在の環境には、使用バージョンが対応する設定を適用してください。

変更前

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-https=false"]

kubelet の HTTPS を明示的に無効にしています。HTTP 接続が使われると、その通信は TLS で保護されません。

変更後

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"]

HTTPS を無効にする引数を削除しています。実際の接続が HTTPS を使い、サーバー証明書を検証することも確認してください。

参考資料