共用方式為


Azure Kubernetes Service (AKS) 中的自訂憑證授權單位 (CA) (預覽)

AKS 會產生並使用下列憑證、憑證授權單位 (CA) 及服務帳戶 (SA):

  • AKS API 伺服器會建立稱為叢集 CA 的憑證授權單位 (CA)。
  • API 伺服器具有叢集 CA,可簽署憑證以進行從 API 伺服器到 kubelet 的單向通訊。
  • 每個 kubelet 亦會建立由叢集 CA 簽署的憑證簽署要求 (CSR),以便進行從 kubelet 到 API 伺服器的通訊。
  • API 彙總工具會使用叢集 CA 發行其他 API 的通訊憑證。 API 匯總工具亦可使用自己的 CA 發行這些憑證,但目前使用叢集 CA。
  • 每個節點皆會使用 SA 權杖 (由叢集 CA 簽署)。
  • kubectl 用戶端具有憑證可與 AKS 叢集通訊。

您也可以建立自訂憑證授權單位,讓您建立 Azure Kubernetes Service (AKS) 叢集與工作負載之間的信任,例如私人登錄、Proxy 和防火牆。 Kubernetes 密碼會儲存憑證授權單位的資訊,然後將其傳遞至叢集中的所有節點。 此功能會套用至每個節點集區,因此您必須在新的和現有的節點集區上啟用此功能。

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

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請建立免費帳戶
  • 已安裝 Azure CLI (2.43.0 版或更新版本)。
  • base64 編碼的憑證字串或具有憑證的文字檔。

限制

  • Windows 節點集區目前不支援此功能。

安裝 aks-preview Azure CLI 延伸模組

重要

AKS 預覽功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

  1. 使用 az extension add 命令,來安裝 aks-preview 延伸模組。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令,以更新為延伸模組最新版。

    az extension update --name aks-preview
    

註冊 CustomCATrustPreview 功能旗標

  1. 使用 az feature register 命令註冊 CustomCATrustPreview 功能旗標。

    az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    

    狀態需要幾分鐘的時間才會顯示「已註冊」

  2. 使用 az feature show 命令確認註冊狀態。

    az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    
  3. 當狀態顯示為 [已註冊] 時,請使用 az provider register 命令來重新整理 Microsoft.ContainerService 資源提供者的註冊。

    az provider register --namespace Microsoft.ContainerService
    

AKS 節點集區上的自訂 CA 安裝

在 AKS 節點集區上安裝 CA

  • 如果您的環境需要將自訂 CA 新增至節點信任存放區,才能正確佈建,您必須在 az aks createaz aks update 作業期間傳遞包含最多 10 個空白行分隔憑證的文字檔。 範例文字檔:

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

在節點集區建立期間安裝 CA

  • 使用 az aks create 命令在節點集區建立期間安裝 CA,並指定 參數的 --custom-ca-trust-certificates 文字檔。

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

節點集區開機期間可用性的 CA 輪替

  • 使用 az aks update 命令在開機期間更新傳遞至叢集的 CA,並為 --custom-ca-trust-certificates 參數指定文字檔。

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

    注意

    此作業會觸發模型更新,確保新節點具有正確佈建所需的最新 CA。 AKS 會建立其他節點、清空現有的節點、將其刪除,並且用已安裝新 CA 集的節點取代它們。

在建立節點集區之後安裝 CA

如果您的環境可以在沒有自訂 CA 的情況下成功佈建,您可以在 kube-system 命名空間中部署秘密來提供 CA。 這種方法允許憑證輪替,而不需要節點重新建立。

  • 使用欄位中的base64編碼憑證字串data,建立 Kubernetes 秘密 YAML 指令清單。

    apiVersion: v1
    kind: Secret
    metadata: 
        name: custom-ca-trust-secret
        namespace: kube-system
    type: Opaque
    data:
        ca1.crt: |
          {base64EncodedCertStringHere}
        ca2.crt: |
          {anotherBase64EncodedCertStringHere}
    

    此密碼中的資料會用來更新所有節點上的 CA。 請確定秘密名為 custom-ca-trust-secret ,並在 kube-system 命名空間中建立。 在 kube-system 命名空間中使用秘密安裝 CA,可讓您進行 CA 輪替,而不需要節點重新建立。 若要更新或移除 CA,可以編輯並套用 YAML 資訊清單。 叢集會輪詢變更,並據以更新節點。 套用變更可能需要幾分鐘的時間。

    注意

    可能需要在節點上重新啟動容器,才能正確挑選 CA。 如果 CA 似乎未正確新增至節點的信任存放區,您可以使用節點殼層中的下列命令來觸發重新啟動:

    systemctl restart containerd

設定新的 AKS 叢集以使用自訂 CA

  • 使用 az aks create 命令搭配 --enable-custom-ca-trust 參數,設定新的 AKS 叢集以使用自訂 CA。

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --generate-ssh-keys
    

設定新的 AKS 叢集,以在節點開機之前,先使用已安裝 CA 的自訂 CA

  • 將新的 AKS 叢集設定為在節點開機之前,使用 --enable-custom-ca-trust--custom-ca-trust-certificates 參數的 az aks create 命令,使用已安裝 CA 的自訂 CA。

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

將現有的 AKS 叢集設定為在節點開機前先安裝自訂 CA

  • 將現有的 AKS 叢集設定為將自訂 CA 新增至節點的信任存放區,再搭配 --custom-ca-trust-certificates 參數使用 az aks update 命令開機。

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

設定新的節點集區以使用自訂 CA

  • 使用 az aks nodepool add 命令搭配 --enable-custom-ca-trust 參數,設定新的節點集區以使用自訂 CA。

    az aks nodepool add \
        --cluster-name <cluster-name> \
        --resource-group <resource-group-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust \
        --os-type Linux
    

    如果沒有其他已啟用功能的節點集區存在,叢集必須協調其設定,變更才會生效。 此作業會在 AKS 的協調循環中自動發生。 在作業之前,精靈集和 Pod 不會出現在叢集上。 您可以使用 az aks update 命令來觸發立即協調作業。 精靈集和 Pod 會在更新完成之後出現。

設定現有的節點集區以使用自訂 CA

  • 使用 az aks nodepool update 命令搭配 --enable-custom-ca-trust 參數,設定現有的節點集區以使用自訂 CA。

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust
    

    如果沒有其他已啟用功能的節點集區存在,叢集必須協調其設定,變更才會生效。 此作業會在 AKS 的協調循環中自動發生。 在作業之前,精靈集和 Pod 不會出現在叢集上。 您可以使用 az aks update 命令來觸發立即協調作業。 精靈集和 Pod 會在更新完成之後出現。

停用節點集區上的自定義 CA

  • 使用 az aks nodepool update 命令搭配 --disable-custom-ca-trust 參數,停用現有節點集區上的自定義 CA 功能。

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --disable-custom-ca-trust
    

疑難排解

已啟用功能,並新增具有 CA 的秘密,但由於未知授權單位簽署的 X.509 憑證錯誤而作業失敗

祕密中傳遞的憑證格式不正確

AKS 要求傳入使用者建立秘密的憑證格式正確,並以 base64 編碼。 請確定您傳遞的 CA 已正確採用 base64 編碼,且具 CA 的檔案沒有 CRLF 換行符。 傳遞至 --custom-ca-trust-certificates 的憑證不應該以 base64 編碼。

containerd 尚未挑選新的憑證

從節點的殼層中,執行 systemctl restart containerd。 容器重新啟動之後,容器運行時間會正確挑選新的憑證。

下一步

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