本页介绍 Google Kubernetes Engine (GKE) 集群中的信任模型,包括集群内的通信以及如何对控制平面等组件的请求进行身份验证。
本文档适用于希望了解 GKE 集群信任模型的安全专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
在阅读本页面之前,请确保您熟悉以下内容:
集群内通信
GKE 会对集群组件之间的流量应用各种安全机制,如下所示:
控制平面与节点之间的流量:控制平面与节点进行通信是为了管理容器。当控制平面向节点发送请求(例如
kubectl logs
)时,该请求会通过 Konnectivity 代理隧道发送。控制平面发送的请求会经过身份验证并受 TLS 保护。如果节点向控制平面发送请求(例如从 kubelet 到 API 服务器),该请求使用双向 TLS (mTLS) 进行身份验证和加密。所有新创建和更新的集群都使用 TLS 1.3 来实现控制层面到节点的通信。TLS 1.2 是控制平面到节点通信支持的最低版本。
节点之间的流量:节点是 Compute Engine 虚拟机。 Google Cloud 生产网络中的节点之间的连接会经过身份验证和加密。如需了解详情,请参阅传输加密白皮书中的“虚拟机到虚拟机”部分。
Pod 之间的流量:当一个 Pod 向另一个 Pod 发送请求时,默认情况下,该流量不会进行身份验证。GKE 会在网络层对不同节点上的 Pod 之间的流量进行加密。默认情况下,同一节点上 Pod 之间的流量不会加密。如需详细了解网络层加密,请参阅 Google Cloud 虚拟网络加密和身份验证。
您可以使用 NetworkPolicy 限制 Pod 到 Pod 的流量,并可以使用服务网格(如 Cloud Service Mesh)或其他应用层加密方法对所有 Pod 到 Pod 的流量(包括同一节点上的流量)进行加密。
控制平面组件之间的流量:控制平面上运行的各种组件之间的流量使用 TLS 进行身份验证和加密。流量永远不会离开受防火墙保护的归 Google 所有的网络。
信任根
GKE 具有以下配置:
- 集群根证书授权机构 (CA) 用于验证 API 服务器和 kubelet 的客户端证书。也就是说,控制层面和节点具有相同的信任根。集群节点池中的任何 kubelet 都可以通过提交证书签名请求,使用
certificates.k8s.io
API 向该证书授权机构请求证书。 根 CA 的生命周期有限,如集群根 CA 生命周期部分所述。 - 在控制平面虚拟机上运行 etcd 数据库实例的集群中,每个集群的单独 etcd 对等 CA 用于在 etcd 实例之间建立信任。
- 在所有 GKE 集群中,单独的 etcd API CA 用于在 Kubernetes API 服务器和 etcd API 之间建立信任。
API 服务器和 kubelet
API 服务器和 kubelet 依赖于集群根证书授权机构提供信任。在 GKE 中,控制层面 API 证书由集群根证书授权机构签名。每个集群运行其自己的证书授权机构,因此如果一个集群的证书授权机构被盗用,其他集群证书授权机构将不受影响。
内部服务管理该证书授权机构的根密钥,这些根密钥不可导出。该服务接受证书签名请求,包括来自每个 GKE 集群中 kubelet 的请求。即使集群中的 API 服务器遭入侵,证书授权机构也不会被盗用,因此不会影响其他集群。
在创建集群中的每个节点时,系统会为其注入共享密钥令牌,该共享密钥令牌可用于向集群根证书授权机构提交证书签名请求,并获取 kubelet 客户端证书。然后,kubelet 使用这些证书对向 API 服务器发出的请求进行身份验证。节点上的 Pod 可以访问此共享密钥令牌,除非您启用 安全强化型 GKE 节点或 适用于 GKE 的工作负载身份联合。
集群根 CA 生命周期
集群根 CA 的生命周期有限,在此之后,由过期 CA 签名的任何证书均无效。按照检查凭据生命周期中的说明检查集群 CA 的大致到期日期。
您应该在现有根 CA 过期之前手动轮替凭据。如果 CA 已过期,并且您未轮替凭据,则您的集群可能会进入不可恢复的状态。GKE 采用以下机制来尝试和防止不可恢复的集群:
- 集群在 CA 过期前七天进入
DEGRADED
状态 GKE 会在 CA 过期前 30 天尝试自动凭据轮替。此自动轮替会忽略维护窗口,并且可能会在 GKE 重新创建节点以使用新凭据时导致中断。外部客户端(如本地环境中的 kubectl)将无法运行,直到您将其更新为使用新凭据。
如需了解如何执行轮替,请参阅轮替集群凭据。
集群状态存储
GKE 集群会将 Kubernetes API 对象的状态存储为数据库中的键值对。控制平面中的 Kubernetes API 服务器使用 etcd API 与此数据库交互。GKE 使用以下技术之一来运行集群状态数据库:
- etcd:集群使用在控制平面虚拟机上运行的 etcd 实例。
- Spanner:集群使用在控制平面虚拟机之外运行的 Spanner 数据库。
无论集群使用哪种数据库技术,每个 GKE 集群都会在控制平面中提供 etcd API。如需对涉及集群状态数据库的流量进行加密,GKE 会使用以下任一集群级 CA 或两者都使用:
- etcd API CA:用于为进出 etcd API 端点的流量签署证书。每个 GKE 集群中都运行着一个 etcd API CA。
- etcd 对等 CA:用于为控制平面上 etcd 数据库实例之间的流量签名证书。etcd 对等 CA 在使用 etcd 数据库的任何集群中运行。使用 Spanner 数据库的集群不会使用 etcd 对等 CA。
etcd API CA 的根密钥分发给控制层面所运行的每个 Compute Engine 实例的元数据。etcd API CA 不会在集群之间共享。
etcd CA 证书的有效期为五年。GKE 会在这些证书过期之前自动轮替这些证书。
证书轮替
要轮替集群的所有 API 服务器和 kubelet 证书,请执行凭据轮替。您无法触发 etcd 证书的轮替;在 GKE 中,系统为您管理该操作。