プロファイルの適用範囲:レベル1 - ワーカーノード
kubeletサーバー証明書のローテーションを有効にして、証明書の有効期限切れによるダウンタイムを回避し、システムの継続的な可用性を確保します。
RotateKubeletServerCertificate
機能は更新プロセスを自動化し、kubeletが既存の認証情報が期限切れになるときにサービング証明書を要求してローテーションすることで、CIA(機密性、完全性、可用性)セキュリティの三位一体をサポートします。この機能は、kubeletがAPIサーバーから証明書を受け取る場合にのみ関連します。証明書がVaultのような外部の権限やツールによって発行される場合、ローテーションプロセスを独自に管理する必要があります。
注意この推奨事項は、kubelet が API サーバーから証明書を取得する場合にのみ適用されます。kubelet 証明書が外部の認証機関/ツール(例:Vault)によって発行される場合、手動でローテーションを実装する必要があります。
|
影響
証明書のローテーションを有効にすることで、期限切れの証明書によるダウンタイムを回避し、kubeletサービスの継続的な可用性と信頼性を確保します。
監査
監査方法 1:
-
各ノードにSSHで接続し、次のコマンドを実行してKubeletプロセスを見つけます:
ps -ef | grep kubelet
-
コマンド出力に
--rotate-kubelet-server-certificate
引数が含まれている場合、それが true に設定されていることを確認してください。引数が存在しない場合は、--config
引数で指定された Kubelet 設定ファイルを確認してくださいcat /etc/kubernetes/kubelet/kubelet-config.json
-
Kubelet構成ファイルを開け:
sudo less /path/to/kubelet-config.json
-
featureGates
セクションにRotateKubeletServerCertificate
引数が存在し、true に設定されていることを確認してください。
監査方法2:
-
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
-
次のコマンドを実行します。
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
修復
修復方法 1:
-
Kubelet configファイルを変更する場合、
/etc/kubernetes/kubelet/kubelet-config.json
ファイルを編集してください{ "featureGates": { "RotateKubeletServerCertificate": true } }
-
kubelet サービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
が--rotate-kubelet-server-certificate
引数を false に設定しないようにしてください。これは Kubelet 設定ファイルを上書きするためです。
修復方法 2:
-
実行可能な引数を使用する場合は、各ワーカーノードの kubelet サービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.conf
を編集し、KUBELET_ARGS 変数文字列の末尾に以下のパラメータを追加します:--rotate-kubelet-server-certificate=true
修正方法 3:
-
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