ビュー:
プロファイルの適用範囲:レベル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 configファイルを変更する場合、/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