閱讀英文

共用方式為

Azure Kubernetes 服务(AKS)中的自定义证书颁发机构(CA)

自定义证书颁发机构(CA)允许向节点的信任存储添加多达 10 个 base64 编码的证书。 当节点上需要 CA(例如连接到专用注册表时)时,通常需要此功能。

本文介绍了如何创建自定义 CA 并将其应用于 AKS 群集。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请创建一个试用帐户
  • 需要安装并配置 Azure CLI 2.72.0 或更高版本。 若要查找 CLI 版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 一个 base64 编码的证书字符串或一个包含证书的文本文件。

限制

  • 不支持 Windows 节点池。
  • 在同一个群集中,安装不同的认证中心(CA)是不被支持的。

在节点的信任存储上安装 CA

  1. 创建包含 CA 的文件。

    创建包含最多 10 个空白行分隔证书的文本文件。 将此文件传递到群集时,这些证书将安装在节点的信任存储中。

    示例文本文件:

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

    在继续下一步之前,请确保文本文件中没有空格。 如果未删除,则这些空格将导致下一步中出现错误。

  2. 使用az aks createaz aks update将证书传递给群集。 作完成后,证书将安装在节点的信任存储中。

    • 使用 az aks create 命令并为 --custom-ca-trust-certificates 参数指定文本文件,在创建群集期间安装 CA。

      az aks create \
          --resource-group <resource-group-name> \
          --name <cluster-name> \
          --node-count 2 \
          --custom-ca-trust-certificates FileWithCAs \
          --generate-ssh-keys
      
    • 使用 az aks update 命令并为 --custom-ca-trust-certificates 参数指定文本文件,在群集更新期间安装 CA。

      az aks update \
          --resource-group <resource-group-name> \
          --name <cluster-name> \
          --custom-ca-trust-certificates <path-to-ca-file>
      

    注意

    此作会触发模型更新,以确保所有现有节点都安装了相同的 CA,以便进行正确的预配。 AKS 创建新的节点、清空现有节点、删除现有节点,并将其替换为安装了新 CA 集的节点。

  3. 检查是否已安装 CA。

使用 az aks show 命令检查 CA 已安装情况。

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

securityProfile 输出应包括自定义 CA 信任证书。

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

疑难解答

格式错误

如果具有证书的文件格式不正确,则向群集添加证书可能会导致错误。

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

如果您遇到此错误,应检查输入文件中是否有多余的新行、空格或数据,确保文件中只有正确格式的证书,如示例文件所示。

功能已启用并添加了带 CA 的机密,但操作失败并出现“X.509 证书由未知授权机构签名”错误

机密中传递的证书格式不正确

AKS 要求传入用户创建的机密中的证书采用正确的格式并经过适当的 base64 编码。 确保传递的 CA 已经过适当的 base64 编码,并且包含 CA 的文件没有 CRLF 换行符。

传递给 --custom-ca-trust-certificates 的证书不应进行 base64 编码。

Containerd 不会选取新证书

在节点的 shell 中,运行 systemctl restart containerd。 一旦 containerd 重启,容器运行时就会选取新证书。

后续步骤

有关 AKS 安全性最佳做法的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中的群集安全性和升级的最佳做法