更安全!GKE 集群的新控制平面连接和隔离选项

曾几何时,所有 Google Kubernetes Engine (GKE) 集群都使用公共 IP 地址在节点和控制平面之间进行通信。而后,谷歌听取了客户的安全顾虑,并引入了由 VPC 对等互连支持的私有集群。


为了整合连接类型,从 2022 年 3 月开始,谷歌开始使用 Google Cloud 的Private Service Connect (PSC)在 GKE 集群控制平面和节点之间进行新公共集群的通信,这对如何配置 GKE 环境具有深远的影响。今天,谷歌将展示一个新的基于 PSC 的一致框架,用于从集群节点连接 GKE 控制平面。此外,谷歌宣布推出一个新功能集,其中包括控制平面和节点池级别的集群隔离,以实现更具可扩展性、更安全且更便宜的功能—— GKE 集群。



新架构


从 GKE 1.23 版及更高版本开始,在 2022 年 3 月 15 日或之后创建的所有新公共集群都开始使用 Google Cloud 的 PSC 基础架构在 GKE 集群控制平面和节点之间进行通信。PSC 提供了一个一致的框架,有助于通过服务网络方法连接不同的网络,并允许服务生产者和消费者使用 VPC 内部的私有 IP 地址进行通信。


此更改的最大好处是为 GKE 集群使用支持 PSC 的功能奠定了基础。


谷歌在这里展示的一组新的集群隔离功能是向更具可扩展性和安全性的 GKE 集群状态演进的一部分。此前,私有 GKE 集群启用了 VPC 对等互连,引入了特定的网络架构。使用此功能集,你现在可以:


  • 更新 GKE 集群控制平面以仅允许访问专用端点


  • 使用公共或私有节点创建或更新 GKE 集群节点池


  • 启用或禁用来自 Google 拥有的 IP 的 GKE 集群控制平面访问。


此外,新的 PSC 基础设施可以节省成本。传统上,控制平面通信被视为正常出口,并作为正常公共 IP 费用对公共集群收费。如果你kubectl出于配置或其他操作原因而运行,也是如此。借助 PSC 基础设施,谷歌消除了控制平面与你的集群节点之间的通信成本,从而减少了需要担心的网络出口费用。


现在,让我们看看这个特性集如何实现这些新功能。



仅允许通过专用端点访问控制平面


私有集群用户长期以来一直能够创建具有公共端点和私有端点的控制平面。谷歌现在将相同的灵活性扩展到基于 PSC 的公共 GKE 集群。有了这个,如果你希望仅私有访问你的 GKE 控制平面,但希望你的所有节点池都是公共的,你可以这样做。


此模型为控制平面提供更严格的安全状态,同时让你根据你的部署选择所需的集群节点类型。


要仅允许访问控制平面上的专用端点,请使用以下 gcloud 命令:

gcloud container clusters update CLUSTER_NAME \
--enable-private-endpoint


允许切换和混合模式集群与公共和私有节点池


所有提供托管 Kubernetes 产品的云提供商都提供公共和私有集群。集群是公共集群还是私有集群是在集群级别强制执行的,一旦创建就无法更改。现在你可以切换节点池以使用私有或公共 IP 地址。


你可能还需要混合使用私有和公共节点池。例如,你可能在集群中运行混合工作负载,其中一些需要 Internet 访问,而另一些则不需要。你可以在具有公共 IP 地址的节点池上部署工作负载,而不是设置 NAT 规则,以确保只有此类节点池部署可公开访问。


要在现有节点池上启用专用 IP 地址,请使用以下 gcloud 命令:

gcloud container node-pools update POOL_NAME \
--cluster CLUSTER_NAME \
--enable-private-nodes


要在节点池创建时启用专用 IP 地址,请使用以下 gcloud 命令:

gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--enable-private-nodes



配置来自 Google Cloud 的访问


在某些情况下,用户已识别出其 GKE 集群之外的工作负载,例如,在 Cloud Run 中运行的应用程序或任何源自 Google Cloud 公共 IP 的 GCP VM 都被允许到达集群控制平面。为了减轻潜在的安全问题,谷歌引入了一项功能,允许你切换从此类来源对集群控制平面的访问。


要移除 Google Cloud 公共 IP 对控制平面的访问权限,请使用以下 gcloud 命令:

gcloud container clusters update CLUSTER_NAME \
--no-enable-google-cloud-access


同样,你可以在集群创建时使用此标志。



选择你的专用端点地址


许多客户喜欢将 IP 映射到堆栈,以便更轻松地进行故障排除和跟踪使用情况。例如——用于基础设施的 IP 块 x、用于服务的 IP 块 y、用于 GKE 控制平面的 IP 块 z 等。默认情况下,基于 PSC 的 GKE 集群中控制平面的私有 IP 地址来自节点子网。但是,一些客户将节点子网视为基础设施并对其应用安全策略。为了区分基础设施和 GKE 控制平面,你现在可以创建一个新的自定义子网并将其分配给你的集群控制平面。

gcloud container clusters create CLUSTER_NAME \
--private-endpoint-subnetwork=SUBNET_NAME



你可以使用这个新的 GKE 架构做什么?


有了这组新功能,你基本上可以删除 GKE 集群的所有公共 IP 通信!从本质上讲,这意味着你可以使你的 GKE 集群完全私有。


你目前需要将集群创建为公共集群以确保它使用 PSC,但你随后可以使用带有--enable-private-endpoint标志或 UI 的 gcloud 更新集群,以仅通过控制平面上的私有端点配置访问或创建新的私有节点池。


或者,你可以在集群创建时使用--master-authorized-networks 和--no-enable-google-cloud-access标志控制访问,以防止从公共寻址访问控制平面。


此外,你可以使用 REST API 或 Terraform Providers 实际构建一个新的基于 PSC 的 GKE 集群,该集群具有默认(因此是第一个)节点池以拥有私有节点。这可以通过将该enablePrivateNodes字段设置为 true 来完成(而不是像 gcloud 和 UI 操作当前所要求的那样利用公共 GKE 集群默认值然后在之后更新)。


最后,上述功能不仅扩展到 Standard GKE 集群,还扩展到 GKE Autopilot 集群。


在评估你是否准备好移动这些基于 PSC 的 GKE 集群类型以利用私有集群隔离时,请记住控制平面的私有端点具有以下限制:


  • 不支持你配置的新 Webhook 或现有 Webhook 的 URL 中的私有地址。为了减轻这种不兼容性并为 webhook 的 URL 分配一个内部 IP 地址,通过 URL 将 webhook 设置为私有地址,创建一个没有选择器的无头服务和所需目的地的相应端点。


  • 目前无法从本地系统访问控制平面专用端点。


  • 控制平面专用端点当前不可全局访问:来自与集群区域不同的区域的客户端 VM 无法连接到控制平面的专用端点。


所有尚未基于 PSC 的 1.25 及更高版本的公共集群目前正在迁移到新的 PSC 基础架构;因此,你的集群可能已经在使用 PSC 与控制平面进行通信。


———

WebEye是中国大陆地区首家获得 Google Cloud MSP 资质的合作伙伴。WebEye致力于用创新的技术向中国企业提供数字化效率创新服务,实现数字化赋能。我们不断帮助客户打造新的运营与协作方式,打造新的竞争优势,构建资源高效链接,共创价值生长空间。

WebEye整合全球资源,打造全球数字化营销体系,为企业提供营销增长服务营销增长引擎以及企业上云三大板块业务,涵盖数字营销、数字创意、游戏发行、流量变现、程序化广告、数据洞察、云计算等一站式全链条增长产品矩阵,是中国互联网出海领军企业。


返回全部