Azure Kubernetes Service (AKS) 中的憑證輪替

Azure Kubernetes Service (AKS) 使用憑證來驗證其許多元件。 在 2022 年 3 月後建立的啟用 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 -g MC_rg_myAKSCluster_region -n vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

檢查虛擬機器擴展集代理程式節點憑證的到期日

  • 使用 az vm 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 /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
    

憑證自動輪替

若要讓 AKS 自動輪替非 CA 憑證,該叢集必須具有所有 Azure 區域已預設啟用的 TLS 啟動程序

注意

  • 若有現有叢集,則必須升級該叢集,以便啟用憑證自動輪替。
  • 請勿停用啟動程序,讓自動輪替保持啟用。
  • 如果叢集在自動憑證輪替期間處於停止狀態,則系統只會輪替控制平面憑證。 在此情況下,您應在憑證輪替之後重新建立節點集區,以起始節點集區的憑證輪替。

若 AKS 叢集在 2022 年 3 月後建立或升級,Azure Kubernetes Service 會在用戶端憑證有效時間 80% 內自動輪替非 CA 憑證,以確保叢集未到期且未停機。

如何檢查目前代理程式節點集區是否已啟用 TLS 啟動程序?

  1. 瀏覽至下列路徑,確認您的叢集已啟用 TLS 啟動程序:

    • 在 Linux 節點上:/var/lib/kubelet/bootstrap-kubeconfig/host/var/lib/kubelet/bootstrap-kubeconfig
    • 在 Windows 節點上: C:\k\bootstrap-config

    如需詳細資訊,請參閱連線到 Azure Kubernetes Service 叢集節點以進行維護或疑難排解

    注意

    檔案路徑可能會隨著 Kubernetes 版本演進而變更。

  2. 設定區域後,建立新叢集或升級現有叢集,以設定該叢集憑證自動輪替。 您必須升級控制平面和節點集區才能啟用這項功能。

手動輪替叢集憑證

警告

使用 az aks rotate-certs 輪替憑證會重新建立所有節點、虛擬機器擴展集和磁碟,且可能導致 AKS 叢集最多停機 30 分鐘

  1. 使用 az aks get-credentials 命令連線至您的叢集。

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    
  2. 使用 az aks rotate-certs 命令,輪替叢集上的所有憑證、CA 和 SA。

    az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    

    重要

    az aks rotate-certs 可能需要 30 分鐘才能完成。 如果命令在完成之前失敗,請使用 az aks show 確認叢集的狀態為憑證輪替中。 如果叢集處於失敗狀態,請重新執行 az aks rotate-certs 以再次輪替憑證。

  3. 使用任何 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")
    
  4. 使用 az aks get-credentials 命令搭配 --overwrite-existing 旗標來更新 kubectl 使用的憑證。

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
    
  5. 使用 kubectl get 命令確認憑證已更新。

    kubectl get nodes
    

    注意

    若有任何在 AKS 上執行的服務,則您可能必須更新憑證。

下一步

本文說明如何自動輪替叢集憑證、CA 及 SA。 如需詳細資訊,請參閱在 Azure Kubernetes Service (AKS) 中叢集安全性和升級的最佳做法