GKE 中的专用集群


本页面介绍专用集群在 Google Kubernetes Engine (GKE) 中的工作原理。您还可以参阅如何创建和管理专用集群

专用集群是一种 VPC 原生集群,仅依赖于内部 IP 地址。专用集群中的节点、Pod 和 Service 需要唯一的子网 IP 地址范围

您可以在标准或 Autopilot 中创建和配置专用集群。

如果您要为特定专用节点提供出站互联网访问权限,可以使用 Cloud NAT

专用集群的架构

专用集群使用没有外部 IP 地址的节点。这意味着互联网上的客户端无法连接到节点的 IP 地址。例如,专用集群中托管的 NodePort 类型的 Service 可供外部客户端访问,因为该节点没有可互联网路由的公共 IP 地址。

与公共集群不同,专用集群同时具有控制层面专用端点和控制层面公共端点。您必须为控制层面的专用端点指定唯一的 /28 IP 地址范围,并且可以选择停用控制层面的公共端点。

下图概述了专用集群的架构:

专用集群架构

即使节点使用内部 IP 地址,外部客户端也可以连接到集群中的 Service。例如:

  • 如果互联网上具有来源 IP 地址的外部客户端从 Service 清单省略 spec.loadBalancerSourceRanges,则可以连接到 LoadBalancer 类型的外部 Service。

  • 您可以创建 NodePortClusterIP 类型的 Service,并使用外部 Ingress 将 Service 公开给外部客户端

在专用集群中使用专用 Google 访问通道

对于使用与集群位于同一项目中的 VPC 网络的专用集群,GKE 可确保在您创建集群时在该专用集群使用的子网上启用专用 Google 访问通道。如果专用集群是在共享 VPC 服务项目中创建的,则共享 VPC 宿主项目的网络管理员、项目所有者或项目编辑者必须手动为专用集群使用的子网启用专用 Google 访问通道。

专用 Google 访问通道默认在专用集群中启用,但共享 VPC 集群除外。您必须为共享 VPC 集群手动启用专用 Google 访问通道。

专用 Google 访问通道会通过 Google 的专用网络提供专用节点及其工作负载对 Google Cloud API 和服务的访问权限。例如,专用集群需要专用 Google 访问通道从 Artifact Registry 访问容器映像,以及将日志发送到 Cloud Logging

专用集群中的控制平面

每个 GKE 集群都有一个由控制平面管理的 Kubernetes API 服务器。

控制层面在由 Google 管理的项目的 VPC 网络中的一个虚拟机上运行。地区级集群有多个控制平面副本,每个副本都在其各自的虚拟机上运行。

在专用集群中,控制层面的 VPC 网络通过 VPC 网络对等互连连接到集群的 VPC 网络。您的 VPC 网络包含集群节点,由 Google 管理的 Google Cloud VPC 网络包含您集群的控制层面。

节点和控制层面之间的流量完全使用内部 IP 地址进行路由。如果您使用 VPC 网络对等互连将集群的 VPC 网络连接到第三个网络,则第三个网络无法访问控制层面 VPC 网络中的资源。这是因为 VPC 网络对等互连仅支持直接对等互连的网络之间的通信,第三个网络无法与控制层面网络建立对等互连。如需了解详情,请参阅 VPC 网络对等互连限制

重用 VPC 网络对等互连

如果集群位于同一位置并使用同一 VPC 网络,则在 2020 年 1 月 15 日之后创建的专用集群会使用通用 VPC 网络对等互连连接。在此上下文中,位置仅是指 Google Cloud 区域或 Google Cloud 地区。

  • 对于区域级集群:您在某个区域中创建的第一个专用集群会生成与集群 VPC 网络的新 VPC 网络对等互连连接。您在同一地区和 VPC 网络中创建的其他地区专用集群使用相同的对等互连连接。

  • 对于地区级集群:您在某个地区内创建的第一个专用集群会生成与集群的 VPC 网络的新 VPC 网络对等互连连接。您在同一区域和 VPC 网络中创建的其他区域专用集群使用相同的对等互连连接。

  • GKE 不会为地区级集群和地区级集群使用通用对等互连,即使地区级集群与地区级集群属于同一地区也是如此。

以下示例说明了此行为。每个示例使用一个 VPC 网络对等互连连接:

  • us-east1-b 地区中的两个或多个地区级专用集群使用相同的 VPC 网络。

  • us-east1 区域中的两个或多个区域专用集群使用同一 VPC 网络。

但是,us-east1-b 中的一个或多个地区级专用集群以及 us-east1 中的一个或多个区域级集群使用同一 VPC 网络需要两个 VPC 网络对等互连连接。

如需详细了解专用集群和连接,请参阅重复使用 VPC 网络对等互连

专用集群中的端点

专用集群的控制层面具有一个公共端点和一个专用端点。非专用集群的控制层面只有一个公共端点。

专用端点
专用端点是控制层面的 VPC 网络内的内部 IP 地址。在专用集群中,节点始终与控制层面的专用端点通信。根据您的配置,您也可以使用连接到专用端点的工具(例如 kubectl)来管理集群。对专用端点的访问权限取决于集群上已获授权的网络配置
公共端点
这是控制层面的外部 IP 地址。默认情况下,诸如 kubectl 之类的工具通过控制层面的公共端点与控制层面通信。

集群端点访问权限

您可以使用以下配置之一控制对端点的访问:

  • 停用公共端点访问权限:这是最安全的选项,因为它可阻止对控制层面进行的所有互联网访问。如果您已将本地网络配置为使用 Cloud InterconnectCloud VPN 连接到 Google Cloud,那么这是一个不错的选择。

    如果您停用公共端点访问权限,则必须为专用端点配置授权网络。如果不执行此操作,您只能从与集群属于同一子网的集群节点或虚拟机连接到专用端点。使用此设置时,已获授权的网络必须是内部 IP 地址

  • 启用公共端点访问权限,并启用授权网络:在此配置中,授权网络适用于控制层面的公共端点。如果您需要从使用 Cloud Interconnect 或 Cloud VPN 连接到集群的 VPC 网络的源网络来管理集群,那么这是一个不错的选择。

  • 启用公共端点访问权限,但停用授权网络:这是默认选项,也是限制性最低的选项。由于未启用授权网络,因此只要您进行身份验证,就可以从任何来源 IP 地址管理集群。

下表汇总了几种不同的端点访问方式:

停用公共端点访问权限 启用公共端点访问权限,
启用授权网络
启用公共端点访问权限,
停用授权网络。
安全 最大程度限制对控制层面的访问。禁止客户端访问控制层面的公共端点。只能从内部 IP 地址访问控制层面。 仅允许通过您定义的内部和外部 IP 地址访问控制层面。 从任意 IP 地址访问控制层面。
详细配置步骤 创建对公共端点没有客户端访问权限的专用集群 创建对公共端点具有有限访问权限的专用集群. 创建对公共端点具有不受限访问权限的专用集群
Google Cloud 控制台配置选项
  1. 选择启用 VPC 原生
  2. 选择专用集群
  3. 取消选中使用控制平面的外部 IP 地址对其进行访问
    启用控制层面授权网络会自动启用。
  1. 选择启用 VPC 原生
  2. 选择专用集群
  3. 选择使用控制平面的外部 IP 地址对其进行访问
  4. 选择启用控制层面授权网络
  1. 选择启用 VPC 原生
  2. 选择专用集群
  3. 选择使用控制平面的外部 IP 地址对其进行访问
  4. 取消选中启用控制层面授权网络
gcloud 集群创建标志 --enable-ip-alias
--enable-private-nodes
--enable-private-endpoint
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--no-enable-master-authorized-networks
节点与控制层面之间的通信

节点始终使用专用端点与控制层面通信。

节点与 API 服务器之间的网络钩子通信

如要网络钩子使用具有 443 以外的 targetPort 的 Service,您需要使用防火墙规则来允许此操作。如需了解详情,请参阅针对特定使用场景添加防火墙规则

控制平面授权的网络

这是通过除节点和 Pod 以外的项的内部 IP 地址访问控制平面所必需的。

您无需明确授权节点的内部 IP 地址范围。集群子网的主要 IP 地址范围内的地址始终有权与专用端点进行通信。

使用 --master-authorized-networks 指定其他可以访问控制层面的内部 IP 地址。由于对公共端点的访问权限已停用,您无法在授权网络列表中添加外部 IP 地址。

这是通过外部 IP 地址以及通过除节点和 Pod 以外的项的内部 IP 地址访问控制层面所必需的。

使用 --master-authorized-networks 指定可以访问控制层面的外部和内部 IP 地址(节点和 Pod 除外)。

未使用。

如果在不启用授权网络的情况下启用对控制层面的公共端点的访问权限,则对控制层面的公共端点的访问权限不受限。

使用 kubectl 访问

通过节点:始终使用专用端点。 kubectl 必须配置为使用专用端点

通过集群 VPC 网络中的其他虚拟机:仅当其他虚拟机的内部 IP 地址包含在授权网络列表中或者其他虚拟机与集群的节点位于同一子网中时,其他虚拟机才能使用 kubectl 与专用端点通信。默认情况下,只有同一区域的虚拟机可以访问专用端点。如果您需要访问集群区域之外的专用端点,请考虑配置控制平面专用端点全球访问权限kubectl 必须配置为使用专用端点

通过公共 IP 地址:无法访问。

通过节点:始终使用专用端点。 kubectl 必须配置为使用专用端点

通过集群 VPC 网络中的其他虚拟机:仅当其他虚拟机的内部 IP 地址包含在授权网络列表中或者其他虚拟机与集群的节点位于同一子网中时,其他虚拟机才能使用 kubectl 与专用端点通信。默认情况下,只有同一区域的虚拟机可以访问专用端点。如果您需要访问集群区域之外的专用端点,请考虑配置控制平面专用端点全球访问权限kubectl 必须配置为使用专用端点

通过公共 IP 地址:对于具有公共 IP 地址的机器,仅当其公共 IP 地址包含在授权网络列表中时,这些机器才能使用 kubectl 与公共端点通信。这包括非 Google Cloud 机器以及具有外部 IP 地址的 Google Cloud 虚拟机。

通过节点:始终使用专用端点。 kubectl 必须配置为使用专用端点

通过集群 VPC 网络中的其他虚拟机:默认情况下,只有位于同一区域的虚拟机才能访问专用端点。如果您需要访问集群区域之外的专用端点,请考虑配置控制平面专用端点全球访问权限kubectl 必须配置为使用专用端点

通过公共 IP 地址:任何具有公共 IP 地址的机器均可使用 kubectl 与公共端点通信。 这包括非 Google Cloud 机器以及具有外部 IP 地址的 Google Cloud 虚拟机。

后续步骤