集群信任


本页面介绍 Google Kubernetes Engine (GKE) 集群中的信任,包括控制层面和节点如何对请求进行身份验证。

集群内通信

集群中有许多用于 Kubernetes 组件间通信的连接。

控制层面到节点

控制层面与节点进行通信是为了管理容器。如果控制平面将请求(例如 kubectl logs)发送到公共集群中的节点,则会通过 Konnectivity 代理隧道发送请求。对专用集群中的节点的请求会通过 VPC 对等互连发送。控制平面发送的请求受 TLS 保护,并提供身份验证、完整性和加密。如果节点向控制平面发送请求(例如从 kubelet 到 API 服务器),该请求使用双向 TLS 进行身份验证和加密。

所有新创建和更新的集群都使用 TLS 1.3 来实现控制层面到节点的通信。TLS 1.2 是控制层面到节点通信支持的最低版本。

节点到节点

节点是 Compute Engine 虚拟机,其在 Google 生产网络中的连接会经过身份验证和加密。如需了解详情,请参阅传输加密白皮书中的“虚拟机到虚拟机”部分。

Pod 到 Pod

当一个 Pod 向另一个 Pod 发送请求时,默认情况下,该流量不会进行身份验证。GKE 会在网络层对不同节点上的 Pod 之间的流量进行加密。默认情况下,同一节点上 Pod 之间的流量不会加密。如需详细了解网络层加密,请参阅 Google Cloud 虚拟网络加密和身份验证

您可以使用 NetworkPolicy 限制 Pod 到 Pod 的流量,并可以使用服务网格(如 Anthos Service Mesh)或其他应用层加密方法对所有 Pod 到 Pod 的流量(包括同一节点上的流量)进行加密。

etcd 到 etcd

etcd 的实例可与 etcd 的其他实例进行通信,以使状态保持更新。当 etcd 的实例向其他实例发送请求时,系统会使用双向 TLS 对该请求进行身份验证和加密。流量永远不会离开受防火墙保护的归 GKE 所有的网络。

控制层面到 etcd

在 GKE 1.23.6-gke.1100 及更高版本中,此通信使用双向 TLS 加密。

信任根

GKE 具有以下配置:

  • 集群根证书授权机构 (CA) 用于验证 API 服务器和 kubelet 的客户端证书。也就是说,控制层面和节点具有相同的信任根。集群节点池中的任何 kubelet 都可以通过提交证书签名请求,使用 certificates.k8s.io API 向该证书授权机构请求证书。 根 CA 的生命周期有限,如集群根 CA 生命周期部分所述。
  • 每个集群的单独 etcd 证书授权机构用于验证 etcd 的证书。

API 服务器和 kubelet

API 服务器和 kubelet 依赖于集群根证书授权机构提供信任。在 GKE 中,控制层面 API 证书由集群根证书授权机构签名。每个集群运行其自己的证书授权机构,因此如果一个集群的证书授权机构被盗用,其他集群证书授权机构将不受影响。

内部 Google 服务管理该证书授权机构的根密钥,这些根密钥不可导出。该服务接受证书签名请求,包括来自每个 GKE 集群中 kubelet 的请求。即使集群中的 API 服务器遭入侵,证书授权机构也不会被盗用,因此不会影响其他集群。

在创建集群中的每个节点时,系统会为其注入共享密钥令牌,该共享密钥令牌可用于向集群根证书授权机构提交证书签名请求,并获取 kubelet 客户端证书。然后,kubelet 使用这些证书对向 API 服务器发出的请求进行身份验证。节点上的 Pod 可以访问此共享密钥令牌,除非您启用安全强化型 GKE 节点Workload Identity元数据隐藏

集群根 CA 生命周期

集群根 CA 的生命周期有限,在此之后,由过期 CA 签名的任何证书均无效。按照检查凭据生命周期中的说明检查集群 CA 的大致到期日期。

您应该在现有根 CA 过期之前手动轮替凭据。如果 CA 已过期,并且您未轮替凭据,则您的集群可能会进入不可恢复的状态。GKE 采用以下机制来尝试和防止不可恢复的集群:

  • 集群在 CA 过期前七天进入 DEGRADED 状态
  • GKE 会在 CA 过期前 30 天尝试自动凭据轮替。此自动轮替会忽略维护窗口,并且可能会在 GKE 重新创建节点以使用新凭据时导致中断。外部客户端(如本地环境中的 kubectl)将无法运行,直到您将其更新为使用新凭据。

如需了解如何执行轮替,请参阅轮替集群凭据

etcd

在 GKE 中,etcd 依赖于每个集群的单独 etcd 证书授权机构提供信任。

etcd 证书授权机构的根密钥分发给控制层面所运行的每个虚拟机的元数据。在控制层面虚拟机上执行的任何代码,或者能够访问这些虚拟机的计算元数据的任何代码,能够以该证书授权机构的身份签署证书。即使集群中的 etcd 被盗用,证书授权机构也不会在集群之间共享,因此不会影响其他集群。

etcd 证书的有效期为五年。

轮替证书

要轮替集群的所有 API 服务器和 kubelet 证书,请执行凭据轮替。您无法触发 etcd 证书的轮替;在 GKE 中,系统为您管理该操作。

后续步骤