在 Azure Kubernetes Service(AKS)中使用自訂憑證授權中心(CA)

自訂憑證授權中心(CA)支援允許你將最多 10 張 base64 編碼的憑證加入節點的信任儲存庫。 對於新叢集,CA 憑證內容不得超過 35 KB。 當節點需要 CA 憑證時,您通常會需要這項功能,例如在連線到私人登錄檔時。

本文說明如何建立自訂 CA,並將其套用至您的 AKS 叢集。

Note

自訂憑證功能會將你的自訂憑證加入 AKS 節點的信任儲存。 使用此功能新增的憑證無法供在 Pod 中執行的容器使用。 如果您需要在容器內使用憑證,您必須個別新增,方法是將憑證新增至 Pod 使用的映像,或在執行階段透過指令碼與祕密新增。

Prerequisites

  • Azure 訂用帳戶。 如果您沒有 Azure 訂閱,請建立免費帳戶。
  • Azure CLI 版本 2.72.0 或更新版本已安裝並設定。 要找到你的 CLI 版本,請執行該 az --version 指令。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
  • base64 編碼的憑證字串或具有憑證的文字檔。

Limitations

  • 不支援 Windows 節點集區。
  • 不支援在相同的叢集中安裝不同的CA。
  • 對於新叢集,CA 憑證內容不得超過 35 KB。

建立憑證檔案

  • 建立一個包含最多 10 個空白行分隔憑證的文字檔。 對於新叢集,檔案中的 CA 憑證內容不得超過 35 KB。 當你將這個檔案傳給叢集時,憑證會安裝在 AKS 節點的信任儲存庫中。

    範例文字檔:

        -----BEGIN CERTIFICATE-----
        cert1
        -----END CERTIFICATE-----
    
        -----BEGIN CERTIFICATE-----
        cert2
        -----END CERTIFICATE-----
    

在進入下一步之前,請確保你的文字檔中沒有空白,以避免錯誤。

將自訂 CA 傳遞到您的 AKS 叢集

  • 用 az aks create or az aks update 指令將憑證傳給叢集,並 --custom-ca-trust-certificates 設定為憑證檔案名稱。

    # Create a new cluster
    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --custom-ca-trust-certificates <path-to-certificate-file> \
        --generate-ssh-keys
    
    # Update an existing cluster
    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates <path-to-certificate-file>
    

    Note

    此作業會觸發模型更新,以確保所有現有的節點都已安裝相同的 CA,以進行正確的佈建。 AKS 會建立新的節點、清空現有的節點、刪除現有的節點,並以已安裝新 CA 集的節點取代它們。

確認 CA 是否已安裝

  • 請用指令 az aks show 確認 CA 是否已安裝。

    az aks show --resource-group <resource-group-name> --name <cluster-name> | grep securityProfile -A 4
    

    在輸出中,該 securityProfile 區塊應該包含你自訂的 CA 憑證。 例如:

      "securityProfile": {
        "azureKeyVaultKms": null,
        "customCaTrustCertificates": [
            "values"
    

解決自訂 CA 格式錯誤

如果具有憑證的檔案格式不正確,將憑證新增至叢集可能會導致錯誤。 你可能會看到類似以下範例的錯誤:

failed to decode one of SecurityProfile.CustomCATrustCertificates to PEM after base64 decoding

如果您遇到此錯誤,您應該檢查輸入檔沒有額外的新行、空格符,或格式正確的憑證以外的數據,如範例檔案所示。

解決由未知權威簽署的自訂 CA X.509 憑證錯誤

AKS 要求通過的憑證必須格式正確且 base64 編碼。 請確定您傳遞的 CA 已正確採用 base64 編碼,且具 CA 的檔案沒有 CRLF 換行符。

重新啟動 containerd 以取得新的憑證

如果 containerd 沒有接收新的憑證,就從節點的 shell 執行該 systemctl restart containerd 指令。 容器重啟後,容器執行時應該會接收新的憑證。

enableCustomCATrust (預覽)退休遷移

Important

自2026年9月14日起,預覽物業 enableCustomCATrust 將正式退休。 在該日期之後,enableCustomCATrust=true 節點集區層級欄位將無法再啟用 AKS 中的自訂憑證授權單位 (CA) 功能。 最後一個支援此屬性的預覽 API 是 2025-08-02-preview。 仍依賴 enableCustomCATrust=true 的現有節點池,在擴充作業期間或更新憑證時,可能會發生失敗。 為避免服務中斷,請在 2026 年 9 月 14 日前更新受影響的叢集與節點池,並移除預覽屬性。 關於遷移步驟,請參見 enableCustomCATrust (預覽)退休遷移。 欲了解更多退休資訊,請參閱 退休 GitHub 專題。 想隨時掌握公告與更新,請參考 AKS 發布說明。

從你的節點池中移除自訂 CA Trust 屬性

目前的 Azure CLI 版本沒有包含這個--disable-custom-ca-trust選項。 若要移除即將淘汰的 enableCustomCATrust 屬性,請針對每個受影響的節點集區執行一般資源更新。 API 2025-08-02-preview 是最後一個暴露此特性的 API 版本。

POOL_ID=$(az aks nodepool show \
  --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --name <node-pool-name> \
  --query id \
  --output tsv)

az resource update \
  --ids "$POOL_ID" \
  --api-version 2025-08-02-preview \
  --set properties.enableCustomCATrust=false

此指令會取得完整的節點池資源,更新 enableCustomCATrust,並將更新後的資源送回。 它保留了其他節點池的特性。

確認該屬性已被停用,且節點池更新是否成功:

az rest \
  --method get \
  --url "https://management.azure.com${POOL_ID}?api-version=2025-08-02-preview" \
  --query "properties.{enableCustomCATrust:enableCustomCATrust,provisioningState:provisioningState}" \
  --output json

對每個啟用 enableCustomCATrust 的節點池重複這些步驟。 預期輸出顯示 enableCustomCATrust 設為 false,且 provisioningState 設為 Succeeded。

如果你想在這次退休後在叢集上啟用自訂 CA 信任,請使用 --custom-ca-trust-certificates 並提供憑證檔案的路徑。

如需 AKS 安全性最佳做法的詳細資訊,請參閱在 Azure Kubernetes Service (AKS) 中叢集安全性和升級的最佳做法。