Azure Kubernetes Service (AKS) 中的憑證輪替
Azure Kubernetes Service (AKS) 使用憑證來驗證其許多元件。 在 2022 年 3 月之後建立的 Azure 角色型存取控制 (Azure RBAC) 叢集會啟用憑證自動輪替。 基於安全性或原則因素,您可能會需要定期輪替這些憑證。 例如,您可能具有每 90 天輪替所有憑證的原則。
注意
根據預設,僅會針對已啟用 RBAC 的 AKS 叢集啟用憑證自動輪替。
本文說明憑證輪替如何在 AKS 叢集中運作。
開始之前
此文章需要 Azure CLI 2.0.77 版或更新版本。 執行 az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
AKS 憑證、憑證授權單位及服務帳戶
AKS 會產生並使用下列憑證、憑證授權單位 (CA) 及服務帳戶 (SA):
- AKS API 伺服器會建立稱為叢集 CA 的憑證授權單位 (CA)。
- API 伺服器具有叢集 CA,可簽署憑證以進行從 API 伺服器到 kubelet 的單向通訊。
- 每個 kubelet 會建立叢集 CA 所簽署的憑證簽署要求 (CSR),以便進行從 kubelet 到 API 伺服器的通訊。
- API 彙總工具會使用叢集 CA 發行其他 API 的通訊憑證。 API 匯總工具亦可使用自己的 CA 發行這些憑證,但目前使用叢集 CA。
- 每個節點都會使用叢集 CA 所簽署的 SA 權杖。
kubectl
用戶端具有憑證可與 AKS 叢集通訊。
Microsoft 會維護本節中提及的所有憑證,但叢集憑證除外。
注意
- 在 2019 年 5 月之前建立的 AKS 叢集所使用的憑證會在兩年後到期。
- 在 2019 年 5 月之後建立的 AKS 叢集所使用的叢集 CA 憑證會在 30 年後到期。
您可以使用 kubectl get nodes
命令來確認叢集何時建立,其中會顯示節點集區的存在時間。
檢查憑證到期日
檢查叢集憑證到期日
使用
kubectl config view
命令檢查叢集憑證的到期日。kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
檢查 API 伺服器憑證到期日
使用下列
curl
命令檢查 API 伺服器憑證的到期日。curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
檢查 VMAS 代理程式節點憑證的到期日
使用
az vm run-command invoke
命令檢查 VMAS 代理程式節點憑證的到期日。az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
檢查虛擬機器擴展集代理程式節點的憑證到期日
使用
az vmss run-command invoke
命令檢查虛擬機器擴展集代理程式節點憑證的到期日。az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
憑證自動輪替
若要讓 AKS 自動輪替非 CA 憑證,該叢集必須具有所有 Azure 區域已預設啟用的 TLS 啟動程序。
注意
- 若有現有叢集,則必須升級該叢集,以便啟用憑證自動輪替。
- 請勿停用啟動程序,讓自動輪替保持啟用。
- 如果叢集在自動憑證輪替期間處於停止狀態,則系統只會輪替控制平面憑證。 在此情況下,您應在憑證輪替之後重新建立節點集區,以起始節點集區的憑證輪替。
若 AKS 叢集在 2022 年 3 月後建立或升級,Azure Kubernetes Service 會在用戶端憑證有效時間 80% 內自動輪替非 CA 憑證,以確保叢集未到期且未停機。
如何檢查目前代理程式節點集區是否已啟用 TLS 啟動程序?
瀏覽至下列路徑,確認您的叢集已啟用 TLS 啟動程序:
- 在 Linux 節點上:/var/lib/kubelet/bootstrap-kubeconfig 或 /host/var/lib/kubelet/bootstrap-kubeconfig
- 在 Windows 節點上: C:\k\bootstrap-config
如需詳細資訊,請參閱連線到 Azure Kubernetes Service 叢集節點以進行維護或疑難排解。
注意
檔案路徑可能會隨著 Kubernetes 版本演進而變更。
設定區域後,建立新叢集或升級現有叢集,以設定該叢集憑證自動輪替。 您必須升級控制平面和節點集區才能啟用這項功能。
手動輪替叢集憑證
警告
使用 az aks rotate-certs
輪替憑證會重新建立所有節點、虛擬機器擴展集和磁碟,且可能導致 AKS 叢集最多停機 30 分鐘。
使用
az aks get-credentials
命令連線至您的叢集。az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
使用
az aks rotate-certs
命令,輪替叢集上的所有憑證、CA 和 SA。az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
重要
az aks rotate-certs
可能需要 30 分鐘才能完成。 如果命令在完成之前失敗,請使用az aks show
確認叢集的狀態為憑證輪替中。 如果叢集處於失敗狀態,請重新執行az aks rotate-certs
以再次輪替憑證。使用任何
kubectl
命令,例如kubectl get nodes
,確認舊憑證不再有效。kubectl get nodes
如果尚未更新
kubectl
所使用的憑證,您會看到類似下列範例輸出的錯誤:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
使用
az aks get-credentials
命令搭配--overwrite-existing
旗標來更新kubectl
使用的憑證。az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
使用
kubectl get
命令確認憑證已更新。kubectl get nodes
注意
若有任何在 AKS 上執行的服務,則您可能必須更新憑證。
下一步
本文說明如何手動和自動輪替叢集憑證、CA 及 SA。 如需詳細資訊,請參閱在 Azure Kubernetes Service (AKS) 中叢集安全性和升級的最佳做法。