你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Kubernetes 服务 (AKS) 中的自定义证书颁发机构 (CA) (预览版)
本文介绍了如何创建自定义 CA 并将其应用于 AKS 群集。
先决条件
限制
- Windows 节点池当前不支持此功能。
安装 Azure CLI aks-preview
扩展
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
使用
az extension add
命令安装 aks-preview 扩展。az extension add --name aks-preview
使用
az extension update
命令更新到扩展的最新版本。az extension update --name aks-preview
注册 CustomCATrustPreview
功能标志
使用
az feature register
命令注册CustomCATrustPreview
功能标志。az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
状态显示为“已注册”需要几分钟时间。
使用
az feature show
命令验证注册状态。az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
当状态反映为已注册时,使用
az provider register
命令刷新 Microsoft.ContainerService 资源提供程序的注册。az provider register --namespace Microsoft.ContainerService
在 AKS 节点池上安装自定义 CA
在 AKS 节点池上安装 CA
如果环境要求将自定义 CA 添加到节点信任存储中以便正确预配,则需要在
az aks create
或az aks update
操作期间传递最多包含 10 个证书(以空行分隔)的文本文件。 示例文本文件:-----BEGIN CERTIFICATE----- cert1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- cert2 -----END CERTIFICATE-----
在创建节点池期间安装 CA
使用
az aks create
命令并为--custom-ca-trust-certificates
参数指定文本文件,在创建节点池期间安装 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
在节点池启动期间进行 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。 使用此方法,无需重新创建节点即可实现证书轮换。
使用
data
字段中的 base64 编码证书字符串创建 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 清单。 群集将对更改进行轮询,并相应地更新节点。 应用更改可能需要几分钟的时间。注意
可能需要在节点上重启 containerd 才能正确选取 CA。 如果 CA 似乎未正确添加到节点的信任存储中,则可以从节点的 shell 中使用以下命令触发此类重启:
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
使用
az aks create
命令以及--enable-custom-ca-trust
和--custom-ca-trust-certificates
参数,将新的 AKS 群集配置为使用自定义 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
使用
az aks update
命令及--custom-ca-trust-certificates
参数,将现有 AKS 群集配置为在节点启动之前将自定义 CA 添加到节点的信任存储。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
使用带
--disable-custom-ca-trust
参数的az aks nodepool update
命令在现有节点池上禁用自定义 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 尚未选取新证书
在节点的 shell 中,运行 systemctl restart containerd
。 重启 containerd 后,容器运行时会正确选取新证书。
后续步骤
有关 AKS 安全性最佳做法的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中的群集安全性和升级的最佳做法。