专用集群

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

利用专用集群,您可以将节点隔离,防止其与公共互联网之间建立入站和出站连接。由于节点仅具有内部 IP 地址,因此可以实现此隔离。

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

即使节点 IP 地址是专用地址,外部客户端也可以访问集群中的 Service。例如,您可以创建 LoadBalancer 类型的 Service,然后外部客户端可以调用负载平衡器的 IP 地址。或者,您可以创建 NodePort 类型的 Service,然后创建一个 Ingress。 GKE 会使用 Service 和 Ingress 中的信息来配置 HTTP(S) 负载平衡器。然后,外部客户端可以调用 HTTP(S) 负载平衡器的外部 IP 地址。

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

专用集群架构

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

默认情况下,专用 Google 访问通道处于启用状态。专用 Google 访问通道会通过 Google 的专用网络为专用节点及其工作负载提供对 Google Cloud API 和服务的有限出站访问权限。例如,专用 Google 访问通道可使专用节点能够从 Container Registry 中拉取容器映像,以及向 Cloud Logging 发送日志。

专用集群中的控制层面

每个 GKE 集群都有一个由控制层面(主服务器)管理的 Kubernetes API 服务器。控制层面在 Google 拥有项目的 VPC 网络中的一个虚拟机上运行。一个区域级集群有多个控制层面,每个控制层面都在其各自的虚拟机上运行。

在专用集群中,控制层面的 VPC 网络通过 VPC 网络对等互连连接到您集群的 VPC 网络。您的 VPC 网络包含集群节点,而单独的 Google Cloud VPC 网络包含您集群的控制层面。控制层面的 VPC 网络位于由 Google 控制的项目中。节点和控制层面之间的流量完全使用内部 IP 地址进行路由。

重用 VPC 网络对等互连

所有新创建的专用集群都会自动重用现有的 VPC 网络对等互连连接。您创建的第一个地区或区域级专用集群会生成一个新的 VPC 网络对等互连连接。位于同一地区或区域和网络中的其他专用集群可以使用相同对等互连,而无需创建任何其他 VPC 网络对等互连连接。例如,如果您在 us-east1-b 地区创建两个单地区专用集群,并在 asia-east1 区域创建三个区域级专用集群,则将仅创建两个对等互连连接。但是,如果在同一区域创建一个区域级集群和一个地区级集群(例如 asia-east1asia-east1-a),则将创建两个不同的对等互连连接。您可以检查您的专用集群是否重用连接

专用集群中的端点

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

专用端点
专用端点是控制层面的 VPC 网络内的内部 IP 地址。在专用集群中,节点始终与控制层面的专用端点通信。根据您的配置,您也可以使用连接到专用端点的工具(例如 kubectl)来管理集群。任何与专用集群使用相同子网的虚拟机都可以访问专用端点。
公共端点
这是控制层面的外部 IP 地址。默认情况下,诸如 kubectl 之类的工具通过控制层面的公共端点与控制层面通信。您可以使用授权网络来控制对此端点的访问,也可以禁止对公共端点的访问。

默认情况下,标准集群和 Autopilot 专用集群都使用公共控制层面端点。您可以替换此设置并指定专用端点。

集群端点访问权限

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

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

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

  • 启用公共端点访问权限,并启用授权网络:使用已启用授权网络的专用集群可限制您定义的来源 IP 地址对控制层面的访问权限。如果您还没有 VPN 基础架构,或者您的远程用户或分支办公室通过公共互联网(而不是公司 VPN 和 Cloud Interconnect 或 Cloud VPN)进行连接,这是一个不错的选择。

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

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

停用公共端点访问权限 启用公共端点访问权限,
启用授权网络
启用公共端点访问权限,
停用授权网络。
安全 最大程度限制对控制层面的访问。禁止客户端访问控制层面的公共端点。只能从内部 IP 地址访问控制层面。 仅允许通过您定义的内部和外部 IP 地址访问控制层面。 从任意 IP 地址访问控制层面。
详细配置步骤 创建对公共端点没有客户端访问权限的专用集群 创建对公共端点具有有限访问权限的专用集群. 创建对公共端点具有不受限访问权限的专用集群
Cloud Console 配置选项
  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 与专用端点通信。kubectl 必须配置为使用专用端点

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

后续步骤