自定义证书颁发机构(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 create或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>注意
此作会触发模型更新,以确保所有现有节点都安装了相同的 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) 中的群集安全性和升级的最佳做法。