Azure Kubernetes 服务 (AKS)群集使用证书在各种组件(包括 AKS 托管的控制平面组件和数据平面组件)之间进行身份验证。 本文概述了 AKS 中的证书管理和轮换。
重要
从 2027 年 4 月 1 日开始,Azure Kubernetes 服务 (AKS)不再支持aks-disable-kubelet-serving-certificate-rotation=true节点池标记来禁用 Kubelet 服务证书轮换(KSCR)。 可以使用此标记创建新的节点池,但 AKS 不会尊重它。 这意味着将启用 KSCR 功能来创建节点池。 对于现有节点池,KSCR 将在下一次重置映像操作时自动启用。 在此日期之前,可以使用带有标记的az aks nodepool updateaks-disable-kubelet-serving-certificate-rotation=true命令更新节点池。 若要准备删除,应使用正确的证书路径更新工作负荷。 有关详细信息,请参阅 停用 GitHub 问题。 若要随时了解公告和更新,请关注AKS 发行说明。
注意
对于启用了 Kubernetes RBAC 的集群,默认启用节点客户端证书和服务证书的自动轮换。
- 在 2019 年 5 月之前创建的 AKS 群集具有在两年后过期的群集 CA 证书。
- 在 2019 年 5 月之后创建的 AKS 群集具有在 30 年后过期的群集 CA 证书。
什么是证书轮换?
证书轮换是将数字证书替换为新证书以维护安全性并防止中断的过程。 这是一项关键的安全做法,用于替换过期的证书、缓解密钥泄露的风险,并响应新的安全要求。 此过程可能涉及自动续订证书或手动替换证书。 通常,复杂更换需要预先安排的维护窗口,尤其是在涉及根证书的情况下。
AKS 中的证书、证书颁发机构和服务帐户令牌
AKS 生成并使用以下证书、证书颁发机构(CA)和服务帐户(SA)令牌:
| Certificate | Description | 旋转方法 |
|---|---|---|
| 群集证书颁发机构 | 由 AKS 为你创建,是你的群集所独有的。 此 CA 证书用于为数据平面中运行的 kubelet 签发客户端证书和服务器证书,以及为 API 服务器签发其所使用的证书。 | Manual |
| 服务帐户令牌 | 由群集 CA 证书签名的 JSON Web 令牌(JWT)。 运行在代理节点上的 kubelet 会自动请求并更新这些令牌。 有关详细信息,请参阅 使用服务帐户令牌投影启动 Pod。 | 在手动群集 CA 轮换过程中自动刷新 |
| API 服务器证书 | 由集群 CA 证书签名并签发。 每当与 API 服务器建立基于 TLS 的连接时,都使用此证书,例如使用 kubectl。 |
在手动群集 CA 轮换过程中自动刷新 |
| Kubelet 服务证书 | 在启用 kubelet 服务证书轮换的群集中,群集 CA 证书颁发并对此证书进行签名。 否则,代理节点将生成并自签名此证书。 此证书与需要连接到任一 kubelet 服务终结点(例如 metrics-server)的组件建立基于 TLS 的连接。 | 对于启用了 kubelet 服务证书轮换的集群,将自动启用 |
| Kubelet 客户端证书 | 由集群 CA 证书签名并签发。 此证书使用特定于 AKS 的 TLS 引导协议 ,该协议在 kubelet 启动之前提供其客户端证书和相应的 kubeconfig。 AKS TLS 协议仅在 Kubernetes 群集版本 1.32 或更高版本上启用。 | 默认情况下,会使用标准 TLS 引导自动更新,并且在手动轮换集群 CA 时也会进行更新 |
kubectl 客户端证书 |
用于 API 服务器的基于证书的身份验证。 | 在手动轮换集群 CA 后手动轮换 |
注意
AKS 不管理任何为客户工作负载创建的或客户工作负载特有的证书。
AKS 中的证书自动轮换
AKS 会自动轮换以下证书:
- 默认情况下,于 2022 年 3 月之后创建且启用了 Kubernetes RBAC 的集群会默认启用 kubelet 客户端证书自动轮换。
注意
出于安全或策略原因,可能需要定期手动轮换这些证书。 例如,你可能有一个策略,用于每隔 90 天轮换所有证书。 默认情况下,kubelet 客户端证书自动轮流会手动进行。
证书自动轮换的限制
以下限制适用于证书自动轮换:
- 群集必须使用 vanilla TLS 引导或 AKS 安全 TLS 引导,该引导默认在所有Azure区域中启用。
- 对于现有集群,需要先升级集群,才能启用证书自动轮换。
AKS 中的手动证书轮换
必须 手动轮换 以下证书:
- 使用
az aks rotate-certs对 CA 证书进行分组。 -
kubectl使用az aks get-credentials命令的客户端证书(在手动轮换群集 CA 证书后)。
轮换群集 CA 证书时,还会刷新以下子证书:
- 服务帐户 (SA) 令牌
- API 服务器证书
- Kubelet 客户端证书
- Kubelet 服务器证书(如果群集上启用了 kubelet 服务证书轮换)
轮换群集 CA 证书后,还必须手动轮换 kubectl 客户端证书,以确保继续访问 API 服务器。
kubelet 客户端证书的 TLS 引导
Kubelet 使用特定于 AKS 的 TLS 引导协议,并依赖于Entra ID中的节点标识。 此标识在 kubelet 启动之前为其提供客户端证书和相应的 kubeconfig。 此更改旨在通过消除 kubelet 在向 API 服务器注册自身时对静态引导令牌 Secret 的依赖,来增强 AKS 节点的安全状况。 如果出于任何原因安全 TLS 引导协议失败,kubelet 仍可使用启动令牌向 API 服务器注册自身,节点最终准备就绪。 你会看到 aksService (而不是 system:bootstrap:<>)作为协议创建的证书签名请求(CSR)对象上的请求者字段。
kubelet 客户端证书仍位于 Linux 节点上的 /var/lib/kubelet/pki/kubelet-client-current.pem 中,Windows节点上 C:\k\pki\kubelet-client-current.pem。 bootstrap-kubeconfig 仍位于同一位置。 AKS 继续在其证书轮换过程中自动轮换此证书。
Kubelet 服务证书轮换
Kubelet 服务证书轮换使 AKS 能够使用 kubelet 服务器 TLS 引导机制,对由群集 CA 签名的服务证书进行初始引导和轮换。
有关详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 中管理和轮换证书。
Kubelet 服务证书轮换的限制
- 在 Kubernetes 版本 1.27 及更高版本上受支持。
- 当节点池使用基于任何早于
202501.12.0的节点映像的节点池快照时,不受支持。 - 无法手动启用此功能。 现有节点池在首次升级到 Kubernetes 1.27 或更高版本后,将默认启用 kubelet 服务证书轮换。 Kubernetes 版本 1.27 或更高版本上的新节点池默认已启用 kubelet 服务证书轮换。 若要查看是否在区域中启用了 kubelet 服务证书轮换,请参阅 AKS 版本。
- 必须在群集上启用 Kubernetes RBAC,才能启用 kubelet 服务证书轮换。 如果有现有群集,则必须升级该群集才能启用 Kubernetes RBAC。