プロファイル適用性: レベル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設定ファイルを変更する場合は、
/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
