設定檔適用性:等級 1 - 主節點
在建立連線之前驗證 kubelet 的憑證。
apiserver 到 kubelet 的連線用於獲取 pod 的日誌、附加(通過 kubectl)到正在運行的 pod,以及使用 kubelet 的端口轉發功能。這些連線終止於
kubelet 的 HTTPS 端點。預設情況下,apiserver 不會驗證 kubelet 的服務憑證,這使得連線容易受到中間人攻擊,並且在不受信任和/或公共網路上運行是不安全的。
注意預設情況下,
--kubelet-certificate-authority 參數未設置。 |
影響
您需要在 apiserver 和 kubelets 上配置 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 和 kubelets 之間的 TLS 連接。然後,在控制平面節點上編輯 API 伺服器 pod 規範文件
/etc/kubernetes/manifests/kube-apiserver.yaml
,並將 --kubelet-certificate-authority
參數設置為憑證授權機構的憑證文件路徑。--kubelet-certificate-authority=<ca-string>