プロファイル適用性: レベル 1 - マスターノード
接続を確立する前にkubeletの証明書を検証します。
apiserver から kubelet への接続は、ポッドのログを取得したり、実行中のポッドに (kubectl を通じて) アタッチしたり、kubelet のポートフォワーディング機能を使用するために使用されます。これらの接続は
kubelet の HTTPS エンドポイントで終了します。デフォルトでは、apiserver は kubelet のサービング証明書を検証しないため、接続が中間者攻撃の対象となり、不信頼または公開ネットワーク上での実行が安全ではありません。
注意デフォルトでは、
--kubelet-certificate-authority 引数は設定されていません。 |
影響
apiserverおよびkubeletにTLSを設定する必要があります。
監査
コントロールプレーンノードで次のコマンドを実行します:
ps -ef | grep kube-apiserver
--kubelet-certificate-authority
引数が存在し、適切に設定されていることを確認してください。代替監査方法
kubectl get pod -nkube-system -lcomponent=kube-apiserver -o=jsonpath='{range .items[]}{.spec.containers[].command} {"\n"}{end}' | grep '--kubelet-certificate-Authority' | grep -i false
終了コードが1の場合、コントロールが存在しないか失敗しています。
修復
Kubernetesのドキュメントに従い、apiserverとkubelet間のTLS接続を設定します。その後、コントロールプレーンノード上のAPIサーバーポッド仕様ファイル
/etc/kubernetes/manifests/kube-apiserver.yaml
を編集し、--kubelet-certificate-authority
パラメータを証明書機関の証明書ファイルのパスに設定します。--kubelet-certificate-authority=<ca-string>