本文档简要介绍了 Google Kubernetes Engine (GKE) 集群中的 Private Service Connect。在继续阅读之前,请确保您熟悉 VPC 网络和网络基础知识,例如 IP 地址。
概览
Private Service Connect (PSC) 是 Google Cloud的网络基础设施的一部分,可让您的 GKE 集群安全地以非公开方式使用托管在 Google Cloud 或本地环境中的服务,而无需公开这些服务。借助 PSC, Google Cloud 会为控制平面分配一个内部 IP 地址,以将请求转发到 GKE 集群管理 API,从而让您无需通过公共互联网即可管理集群。PSC 提供了一致的框架,有助于通过服务网络方法连接不同的网络,并允许服务提供方和消费者使用 VPC 内部的内部 IP 地址进行通信。
在采用 PSC 基础架构的 GKE 集群中,集群控制平面与节点之间的所有通信均以私密方式进行。您还可以在控制平面和节点池层级隔离集群,而无需管理复杂的 VPC 对等互连配置。
启用 Private Service Connect 的集群的优势
安全性:PSC 在 GKE 集群控制平面和节点之间建立专用连接,使流量完全在 Google 的网络内传输,而不会通过公共互联网传输。这样可以最大限度地降低未经授权的访问风险。
简化连接:对于 PSC 集群,您无需为控制平面端点管理特定子网。PSC 端点完全位于集群网络内,无需复杂的网络配置。
可伸缩性:您可以创建最多 1000 个启用 PSC 的集群,以满足高资源需求。相比之下,对于使用 VPC 网络对等互连的集群,您只能在每个可用区或区域中创建最多 75 个集群。
可自定义的配置:借助 PSC,您可以独立控制集群控制平面、节点池或工作负载的隔离,从而提高集群的可伸缩性和安全性。您可以在集群中配置专用节点池和公共节点池的混合使用。
灵活性:创建集群后,您可以随时更改隔离设置。您可以在公开访问和私密访问控制平面之间切换,并更改节点池和工作负载的互联网可访问性,而无需创建新集群。
限制
控制平面同时具有内部端点和外部端点。控制平面的内部端点不支持在网址中对您配置的任何 webhook 使用内部 IP 地址。如果您的 Webhook 的网址中包含内部 IP 地址,您可以按照以下步骤缓解此不兼容问题:
创建无选择器的无头 Service,以手动管理此 Service 将流量定向到的端点。以下示例展示了一个在端口 3000 上监听 webhook 的服务:
apiVersion: v1 kind: Service metadata: name: <service-name> spec: clusterIP: None ports: - port: 3000 targetPort: 3000
为所需的目标位置创建相应的端点。例如,如果您的 Webhook 在网址中使用内部 IP 地址
10.0.0.1
,您可以创建以下端点:apiVersion: v1 kind: Endpoints metadata: name: <service-name> subsets: - addresses: - ip: 10.0.0.1 ports: - port: 3000
更新网络钩子配置:在网络钩子配置中,删除包含内部 IP 地址的网址,并添加您在第一步中创建的服务。例如:
... kind: ValidatingWebhookConfiguration ... webhooks: - name: <webhook-name> ... clientConfig: service: name: <service-name> namespace: <namespace> path: "/validate" port: 3000
在上面的示例中,Webhook 的路径为
/validate
,并监听端口 3000。验证您的网络钩子:确认您的网络钩子可以继续接收 API 服务器请求,并且可以根据自定义逻辑批准、拒绝或修改请求。如果您在验证 Webhook 时遇到错误,可能需要创建新证书,然后使用新证书的详细信息更新 Webhook 配置。例如:
... kind: ValidatingWebhookConfiguration ... webhooks: - name: <webhook-name> ... clientConfig: ... caBundle: <new-certificate> ...
架构
下图简要介绍了使用 PSC 的集群的架构:
以下是启用 PSC 的集群的核心组件:
控制平面:每个 GKE 集群都有一个由控制平面管理的 Kubernetes API 服务器。控制平面在由 Google 管理的项目的 VPC 网络中的一个虚拟机 (VM) 上运行。区域级集群有多个控制平面副本,每个副本都在其各自的虚拟机上运行。
控制平面同时具有一个内部端点(Private Service Connect 端点,用于内部集群通信)和一个外部端点。您可以选择停用外部端点。 节点和控制平面之间的流量完全使用内部 IP 地址进行路由。如需了解集群配置,请参阅验证控制平面配置。
VPC 网络:这是一个虚拟网络,您可以在其中创建具有内部 IP 地址范围的子网,专门用于集群的节点和 Pod。
Private Service Connect 端点:这是集群控制平面中位于项目 VPC 网络内的内部端点。PSC 端点充当访问集群控制平面的入口点。
服务连接:服务连接是一种资源,可在您的 VPC 网络与提供方 VPC 网络之间建立安全且私密的连接。如上图所示,PSC 端点通过专用连接访问服务连接,并允许流量在节点和控制平面之间流动。
配置集群访问权限
您可以通过多种方式配置启用 PSC 的集群上的控制平面访问权限和节点访问权限。创建集群后,您可以随时更改这些配置。如需配置集群访问权限,请参阅自定义网络隔离。
控制平面访问
仅使用基于 DNS 的端点访问控制平面(推荐)。您可以通过创建 IAM 允许政策来授权请求访问控制平面。
仅使用基于 IP 的端点访问控制平面。您可以选择同时使用控制平面的外部和内部端点,也可以停用外部端点,以仅允许从 Google 预留的 IP 地址(用于集群管理)和 GKE 集群内部 IP 地址进行访问。
如果您使用的是 IP 地址,建议您使用授权网络来限制对集群控制平面的访问权限。借助授权网络,您还可以禁止从具有 Google Cloud 外部 IP 的 Google Cloud 虚拟机、Cloud Run 或 Cloud Run functions 访问控制平面。
使用基于 DNS 的端点和基于 IP 的端点访问控制平面。
集群节点访问权限
借助启用 PSC 的集群,您可以配置混合模式集群。您可以配置集群,使其节点具有内部或外部访问权限。您还可以根据所用集群的类型更改节点网络配置:
对于 Autopilot 集群,您可以配置一些工作负载在专用节点上运行,而其他工作负载在公共节点上运行。例如,您可能在集群中混合运行多种工作负载,其中一些需要互联网访问权限,而另一些则不需要。您可以在具有外部 IP 地址的节点上部署工作负载,以确保只有此类工作负载可公开访问。
对于标准集群,您可以为部分节点预配内部 IP 地址,而其他节点可以使用外部 IP 地址。
使用 Private Service Connect 的集群
如需检查您的集群是否使用 Private Service Connect,请运行 gcloud container clusters describe 命令。如果您的集群使用 Private Service Connect,则 privateClusterConfig
资源具有以下值:
peeringName
字段为空或不存在。privateEndpoint
字段已被分配了一个值。
如需为集群启用 PSC,请在 1.29 版或更高版本上创建集群。否则,对于 1.28 版及更早版本,请创建集群,但不要启用私有节点。您可以在创建集群后随时更新此设置并启用专用节点。
后续步骤
- 了解如何在 GKE 中自定义网络隔离。