プロファイル適用性: レベル1
kubeletサーバ証明書のローテーションを有効にします。
RotateKubeletServerCertificate
は、クライアント認証情報のブートストラップ後にkubeletがサーバー証明書を要求し、既存の認証情報が期限切れになると証明書を更新するようにします。この自動定期的な更新により、証明書の期限切れによるダウンタイムが発生せず、CIA
(機密性、完全性、可用性) セキュリティの三要素における可用性に対処します。![]() |
注意この推奨事項は、kubeletがAPIサーバから証明書を取得する場合にのみ適用されます。kubeletの証明書が外部の認証機関やツール (例: Vault) から取得される場合は、証明書のローテーションを自分で実施する必要があります。
|
![]() |
注意GKEのドキュメントでデフォルト値を確認してください。
|
監査
監査方法1:
- 各ノードにSSHで接続し、次のコマンドを実行してKubeletプロセスを見つけてください。
ps -ef | grep kubelet
- 上記のコマンドの出力に
--rotate-kubelet-server-certificate
実行可能な引数が含まれている場合、それがtrueに設定されていることを確認してください。 - プロセスに
--rotate-kubelet-server-certificate
実行可能な引数がない場合は、Kubeletの設定ファイルを確認してください。上記のコマンドの出力は、--config /etc/kubernetes/kubelet-config.yaml
のようなものを返すはずです。これは、Kubelet設定ファイルの場所です。 -
Kubeletの設定ファイルを開く:
cat /etc/kubernetes/kubelet-config.yaml
featureGates
セクションにRotateKubeletServerCertificate
引数が存在し、true
に設定されていることを確認してください。
監査方法2:
api configzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して、
"RotateKubeletServerCertificate":true
のステータスを検索することを検討してください。ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください:
HOSTNAME_PORT="localhost-and-port-number" NODE_NAME="The-Name-Of-Node-To-Extract-Configuration"
from the output of "kubectl get nodes"
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
修復
修復方法1:
Kubelet設定ファイルを変更する場合は、kubelet-config.jsonファイル
/etc/kubernetes/kubelet-config.yaml
を編集し、以下のパラメータをtrueに設定してください。"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":
のステータスを検索することを検討してください。**ライブクラスターでノードのKubeletを再構成するの詳細な手順を参照し、その後、監査プロセスからcurlステートメントを再実行して、kubeletの構成変更を確認してください。
kubectl proxy --port=8001 & export HOSTNAME_PORT=localhost:8001 (example host and port number) export NODE_NAME=gke-cluster-1-pool1-5e572947-r2hg (example node name from "kubectl get nodes") 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