共用方式為

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

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

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

注意

自定义 CA 功能将自定义证书添加到 AKS 节点的信任存储中。 使用此功能添加的证书不适用于 Pod 中运行的容器。 如果需要容器内的证书,则需要分别通过将它们添加到 Pod 使用的镜像中,或者在运行时通过脚本和秘密来添加它们。

先决条件

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

限制

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

创建证书文件

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

    示例文本文件:

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

在继续下一步之前,请确保文本文件中没有空格以避免错误

将自定义 CA 传递到 AKS 群集

  • 使用 az aks createaz 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>
    

    注意

    此作会触发模型更新,以确保所有现有节点都安装了相同的 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 命令。 当 containerd 重启后,容器运行时应自动使用新的证书。

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