本文档简要介绍了 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 端点完全位于集群网络中,因此无需进行复杂的网络配置。
可扩缩性:您最多可以创建 1,000 个启用了 PSC 的集群,以满足高资源要求。相比之下,对于使用 VPC 网络对等互连的集群,每个可用区或区域最多只能创建 75 个集群。
可自定义的配置:借助 PSC,您可以独立控制集群控制平面、节点池或工作负载的隔离,从而提高集群的可伸缩性和安全性。您可以在集群中配置专用节点池和公共节点池的混合使用。
灵活性:创建集群后,您可以随时更改隔离设置。您可以切换对控制平面的公开访问权限和专用访问权限,以及更改节点池和工作负载的互联网访问权限,而无需创建新的集群。
限制
控制平面同时具有内部端点和外部端点。控制平面的内部端点不支持在您配置的任何 webhook 的网址中使用内部 IP 地址。如果您的某个 webhook 网址中包含内部 IP 地址,您可以按照以下步骤来缓解这种不兼容性:
创建无选择器的无头服务,以手动管理此服务将流量定向到的端点。以下示例展示了一个在端口 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
更新 webhook 配置:在 webhook 配置中,删除包含内部 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 网络中的一个虚拟机上运行。区域级集群有多个控制平面副本,每个副本都在其各自的虚拟机上运行。
控制平面同时具有一个内部端点(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 中自定义网络隔离。