ビュー:
プロファイル適用性: レベル1 - ワーカーノード
kubeletサーバ証明書のローテーションを有効にして、証明書の有効期限切れによるダウンタイムを回避し、システムの継続的な可用性を確保します。RotateKubeletServerCertificate機能は更新プロセスを自動化し、kubeletが既存の認証情報の有効期限が切れるときにサービング証明書を要求してローテーションすることで、CIA (機密性、完全性、可用性) セキュリティの三位一体をサポートします。この機能は、kubeletがAPIサーバから証明書を受け取る場合にのみ関連します。証明書がVaultのような外部の権限やツールによって発行される場合は、ローテーションプロセスを独自に管理する必要があります。
注意
注意
この推奨事項は、kubeletがAPIサーバから証明書を取得する場合にのみ適用されます。kubeletの証明書が外部の認証機関/ツール (例: Vault) によって発行されている場合は、手動でローテーションを実施する必要があります。

影響

証明書のローテーションを有効にすることで、期限切れの証明書によるダウンタイムを回避し、kubeletサービスの継続的な可用性と信頼性を確保します。

監査

監査方法1:
  1. 各ノードにSSHで接続し、次のコマンドを実行してKubeletプロセスを見つけます。
    ps -ef | grep kubelet
  2. コマンド出力に--rotate-kubelet-server-certificate引数が含まれている場合、それがtrueに設定されていることを確認してください。引数が存在しない場合は、--config引数で指定されたKubelet構成ファイルを確認してください。
    cat /etc/kubernetes/kubelet/kubelet-config.json
  3. Kubelet設定ファイルを開く:
    sudo less /path/to/kubelet-config.json
  4. featureGatesセクションにRotateKubeletServerCertificate引数が存在し、trueに設定されていることを確認してください。
監査方法2:
  1. APIのconfigzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出してRotateKubeletServerCertificate:trueのステータスを検索することを検討してください。ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を指定します。
    kubectl proxy --port=8001 &
          export HOSTNAME_PORT=localhost:8001
          export NODE_NAME=The-Name-Of-Node-To-Extract-Configuration
          kubectl get nodes
  2. 次のコマンドを実行します。
    curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

修復

修復方法1:
  1. Kubelet設定ファイルを変更する場合は、/etc/kubernetes/kubelet/kubelet-config.jsonファイルを編集してください。
          {
          "featureGates": {
          "RotateKubeletServerCertificate": true
          }
          }
         
  2. kubeletサービスファイル/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf--rotate-kubelet-server-certificate引数をfalseに設定しないようにしてください。これはKubelet設定ファイルを上書きするためです。
修復方法2:
  1. 実行可能な引数を使用する場合、各ワーカーノードのkubeletサービスファイル/etc/systemd/system/kubelet.service.d/10-kubelet-args.confを編集し、KUBELET_ARGS変数文字列の末尾に以下のパラメータを追加してください。
    --rotate-kubelet-server-certificate=true
修復方法3:
  1. APIのconfigzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出してRotateKubeletServerCertificateのステータスを検索することを検討してください。
    kubectl proxy --port=8001 &
          export HOSTNAME_PORT=localhost:8001
          export NODE_NAME=ip-192.168.31.226.ec2.internal
          curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
すべての3つの修復方法について:
kubeletサービスを再起動し、ステータスを確認します。以下の例は、systemctlを使用してサービスを管理する場合のものです。
systemctl daemon-reload
    systemctl restart kubelet.service
    systemctl status kubelet -l