Private Service Connect 简介


本文档简要介绍了 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 地址,您可以按照以下步骤来缓解这种不兼容性:

  1. 创建无选择器的无头服务,以手动管理此服务将流量定向到的端点。以下示例展示了一个在端口 3000 上监听 webhook 的服务:

    apiVersion: v1
    kind: Service
    metadata:
      name: <service-name>
    spec:
      clusterIP: None
      ports:
      - port: 3000
        targetPort: 3000
    
  2. 为所需的目标位置创建相应的端点。例如,如果您的 webhook 在网址中使用内部 IP 地址 10.0.0.1,您可以创建以下端点:

    apiVersion: v1
    kind: Endpoints
    metadata:
      name: <service-name>
    subsets:
    - addresses:
      - ip: 10.0.0.1
      ports:
      - port: 3000
    
  3. 更新 webhook 配置:在 webhook 配置中,删除包含内部 IP 地址的网址,然后添加您在第一步中创建的服务。例如:

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        service:
          name: <service-name>
          namespace: <namespace>
          path: "/validate"
          port: 3000
    

    在前面的示例中,该 webhook 的路径为 /validate,并监听端口 3000。

  4. 验证您的网络钩子:确认您的网络钩子可以继续接收 API 服务器请求,并且可以根据自定义逻辑批准、拒绝或修改请求。如果您在验证 webhook 时收到错误消息,则可能需要创建新的证书,然后使用新的证书详细信息更新 webhook 配置。例如:

    ...
    kind: ValidatingWebhookConfiguration
    ...
    webhooks:
    - name: <webhook-name>
    ...
      clientConfig:
        ...
        caBundle: <new-certificate>
    ...
    

架构

下图简要介绍了使用 PSC 的集群的架构:

GKE 中的 Private Service Connect 架构。
图: Private Service Connect 架构

以下是启用了 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 及更低版本,请创建集群,但不启用专用节点。您可以在集群创建后随时更新此设置并启用私有节点。

后续步骤