创建专用集群


本页面介绍如何创建专用 Google Kubernetes Engine (GKE) 集群,该集群是一种 VPC 原生集群。在专用集群中,节点仅具有内部 IP 地址,这意味着节点和 Pod 默认与互联网隔离。 您可以选择对控制平面没有客户端访问权限、具有受限访问权限或不受限访问权限。

限制和局限

专用集群必须是 VPC 原生集群。VPC 原生集群不支持旧版网络

展开即可下部分,查看创建集群时有关 IP 地址范围和流量的规则。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

创建无法通过客户端访问公共端点的专用集群

在本部分中,您将创建以下资源:

  • 名为 private-cluster-0 的专用集群,该集群具有专用节点,但没有对公共端点的客户端访问权限。
  • 名为 my-net-0 的网络。
  • 名为 my-subnet-0 的子网。

控制台

创建网络和子网

  1. 前往 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击 创建 VPC 网络

  3. 对于名称,输入 my-net-0

  4. 对于子网创建模式,选择自定义

  5. 新子网部分的名称中,输入 my-subnet-0

  6. 地区列表中,选择所需的地区。

  7. 对于 IP 地址范围,输入 10.2.204.0/22

  8. 专用 Google 访问通道设置为开启

  9. 点击完成

  10. 点击创建

创建专用集群

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建,然后在Standard 或 Autopilot 部分中点击配置

  3. 对于名称,指定 private-cluster-0

  4. 在导航窗格中,点击网络

  5. 网络列表中,选择 my-net-0

  6. 节点子网列表中,选择 my-subnet-0

  7. 选择专用集群单选按钮。

  8. 取消选中使用外部 IP 地址的控制平面复选框。

  9. (对于 Autopilot 而言为可选):将控制层面 IP 地址范围设置为 172.16.0.32/28

  10. 点击创建

gcloud

  • 对于 Autopilot 集群,请运行以下命令:

    gcloud container clusters create-auto private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-private-nodes \
        --enable-private-endpoint
    
  • 对于 Standard 集群,请运行以下命令:

    gcloud container clusters create private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --enable-private-endpoint \
        --master-ipv4-cidr 172.16.0.32/28
    

其中:

  • --create-subnetwork name=my-subnet-0 使 GKE 自动创建名为 my-subnet-0 的子网。
  • --enable-master-authorized-networks 用于指定仅限您授权的 IP 地址范围访问公共端点。
  • --enable-ip-alias 使集群成为 VPC 原生集群(对于 Autopilot 而言并非必需)。
  • --enable-private-nodes 表示集群的节点没有外部 IP 地址。
  • --enable-private-endpoint 表示使用控制平面 API 端点的内部 IP 地址管理集群。
  • --master-ipv4-cidr 172.16.0.32/28 指定控制平面的内部 IP 地址范围(对于 Autopilot 而言可选)。此设置对于该集群是永久性的,并且在 VPC 中必须是唯一的。系统支持使用非 RFC 1918 内部 IP 地址

API

如需创建不具备可公开访问的控制平面的集群,请在 privateClusterConfig 资源中指定 enablePrivateEndpoint: true 字段。

此时,只有以下范围内的地址才能访问控制层面:

  • my-subnet-0 的主要范围。
  • 用于 Pod 的次要范围。

例如,假设您在 my-subnet-0 的主要范围内创建了一个虚拟机。 在该虚拟机上,您可以配置 kubectl 以使用控制平面的内部 IP 地址

如果您想从 my-subnet-0 外部访问控制平面,则必须至少授权一个地址范围访问专用端点。

假设您的虚拟机位于默认网络中,并且与您的集群位于同一区域,但不在 my-subnet-0 中。

例如:

  • my-subnet-010.0.0.0/22
  • Pod 次要范围:10.52.0.0/14
  • 虚拟机地址:10.128.0.3

您可以使用以下命令授权虚拟机访问控制平面:

gcloud container clusters update private-cluster-0 \
    --enable-master-authorized-networks \
    --master-authorized-networks 10.128.0.3/32

创建对公共端点的访问受限的专用集群

使用此配置创建专用集群时,您可以选择使用自动生成的子网或自定义的子网。

使用自动生成的子网

在本部分中,您将创建一个名为 private-cluster-1 的专用集群,其中 GKE 会自动为您的集群节点生成子网。该子网启用了专用 Google 访问通道。在该子网中,GKE 会自动创建两个次要范围:一个用于 Pod,另一个用于 Service。

您可以使用 Google Cloud CLI 或 GKE API。

gcloud

  • 对于 Autopilot 集群,请运行以下命令:

    gcloud container clusters create-auto private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-private-nodes
    
  • 对于 Standard 集群,请运行以下命令:

    gcloud container clusters create private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.0/28
    

其中:

  • --create-subnetwork name=my-subnet-1 使 GKE 自动创建名为 my-subnet-1 的子网。
  • --enable-master-authorized-networks 用于指定仅限您授权的 IP 地址范围访问公共端点。
  • --enable-ip-alias 使集群成为 VPC 原生集群(对于 Autopilot 而言并非必需)。
  • --enable-private-nodes 表示集群的节点没有外部 IP 地址。
  • --master-ipv4-cidr 172.16.0.0/28 指定控制平面的内部 IP 地址范围(对于 Autopilot 而言可选)。此设置对于该集群是永久性的,并且在 VPC 中必须是唯一的。系统支持使用非 RFC 1918 内部 IP 地址

API

Cluster API 资源中指定 privateClusterConfig 字段:

{
  "name": "private-cluster-1",
  ...
  "ipAllocationPolicy": {
    "createSubnetwork": true,
  },
  ...
    "privateClusterConfig" {
      "enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
      "enablePrivateEndpoint": boolean # false creates a cluster control plane with a publicly-reachable endpoint
      "masterIpv4CidrBlock": string # CIDR block for the cluster control plane
      "privateEndpoint": string # Output only
      "publicEndpoint": string # Output only
  }
}

此时,只有以下范围内的地址才能访问集群控制平面:

  • my-subnet-1 的主要范围。
  • 用于 Pod 的次要范围。

假设您有一组机器位于 VPC 网络之外,它们的地址在范围 203.0.113.0/29 内。您可以通过输入以下命令向这些机器授予对公共端点的访问权限:

gcloud container clusters update private-cluster-1 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

现在,只有以下范围内的地址才能访问控制平面:

  • my-subnet-1 的主要范围。
  • 用于 Pod 的次要范围。
  • 您已授权的地址范围,例如 203.0.113.0/29

使用自定义子网

在本部分中,您将创建以下资源:

  • 名为 private-cluster-2 的专用集群。
  • 名为 my-net-2 的网络。
  • 用于集群节点的主范围为 192.168.0.0/20my-subnet-2 子网。您的子网具有以下次要地址范围:
    • my-pods(对于 Pod IP 地址)。
    • my-services(对于 Service IP 地址)。

控制台

创建网络、子网和次要范围

  1. 前往 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击 创建 VPC 网络

  3. 对于名称,输入 my-net-2

  4. 对于子网创建模式,选择自定义

  5. 新子网部分的名称中,输入 my-subnet-2

  6. 地区列表中,选择所需的地区。

  7. 对于 IP 地址范围,输入 192.168.0.0/20

  8. 点击创建次要 IP 范围。在子网范围名称部分,输入 my-services;在次要 IP 范围部分,输入 10.0.32.0/20

  9. 点击添加 IP 范围。在子网范围名称部分,输入 my-pods;在次要 IP 范围部分,输入 10.4.0.0/14

  10. 专用 Google 访问通道设置为开启

  11. 点击完成

  12. 点击创建

创建专用集群

创建使用子网的专用集群:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建,然后在Standard 或 Autopilot 部分中点击配置

  3. 对于名称,请输入 private-cluster-2

  4. 在导航窗格中,点击网络

  5. 选择专用集群单选按钮。

  6. 如需创建可从授权外部 IP 范围访问的控制平面,请保持使用外部 IP 地址访问主节点复选框处于选中状态。

  7. (对于 Autopilot 而言为可选):将控制层面 IP 地址范围设置为 172.16.0.16/28

  8. 网络列表中,选择 my-net-2

  9. 节点子网列表中,选择 my-subnet-2

  10. 清除自动创建次要范围复选框。

  11. Pod 次要 CIDR 范围列表中,选择 my-pods

  12. Service 次要 CIDR 范围列表中,选择 my-services

  13. 选中启用控制平面授权网络复选框。

  14. 点击创建

gcloud

创建网络

首先,为您的集群创建一个网络。以下命令会创建一个网络 my-net-2

gcloud compute networks create my-net-2 \
    --subnet-mode custom

创建子网和次要范围

接下来,在 my-net-2 网络中创建一个子网 my-subnet-2,其次要范围为 my-pods(用于 Pod)和 my-services(用于 Service):

gcloud compute networks subnets create my-subnet-2 \
    --network my-net-2 \
    --range 192.168.0.0/20 \
    --secondary-range my-pods=10.4.0.0/14,my-services=10.0.32.0/20 \
    --enable-private-ip-google-access

创建专用集群

现在,使用您创建的网络、子网以及次要范围创建一个专用集群 private-cluster-2

  • 对于 Autopilot 集群,请运行以下命令:

    gcloud container clusters create-auto private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes
    
  • 对于 Standard 集群,请运行以下命令:

    gcloud container clusters create private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes \
        --enable-ip-alias \
        --master-ipv4-cidr 172.16.0.16/28 \
        --no-enable-basic-auth \
        --no-issue-client-certificate
    

此时,只有以下范围内的地址才能访问控制层面:

  • my-subnet-2 的主要范围。
  • 次要范围 my-pods

假设您有一组机器位于 my-net-2 之外,它们的地址在范围 203.0.113.0/29 内。您可以通过输入以下命令向这些机器授予对公共端点的访问权限:

gcloud container clusters update private-cluster-2 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

此时,只有以下范围内的地址才能访问控制层面:

  • my-subnet-2 的主要范围。
  • 次要范围 my-pods
  • 您已授权的地址范围,例如 203.0.113.0/29

使用 Cloud Shell 访问专用集群

如果您启用了专用端点,则无法通过 Cloud Shell 访问 GKE 控制平面。

如果要使用 Cloud Shell 访问集群,则必须将 Cloud Shell 的外部 IP 地址添加到集群的已获授权的网络列表中。

为此,请按以下说明操作:

  1. 在 Cloud Shell 命令行窗口中,使用 dig 查找 Cloud Shell 的外部 IP 地址:

    dig +short myip.opendns.com @resolver1.opendns.com
    
  2. 将 Cloud Shell 的外部地址添加到集群的授权网络列表中:

    gcloud container clusters update CLUSTER_NAME \
        --enable-master-authorized-networks \
        --master-authorized-networks EXISTING_AUTH_NETS,SHELL_IP/32
    

    替换以下内容:

    • CLUSTER_NAME:您的集群的名称。
    • EXISTING_AUTH_NETS:现有的已获授权的网络列表的 IP 地址。您可以在控制台中查找授权网络,也可以通过运行以下命令来查找:

      gcloud container clusters describe CLUSTER_NAME --format "flattened(masterAuthorizedNetworksConfig.cidrBlocks[])"
      
    • SHELL_IP:您的 Cloud Shell 的外部 IP 地址。

  3. 获取凭据,以便使用 kubectl 访问集群:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    PROJECT_ID 替换为您的项目 ID。

  4. 在 Cloud Shell 中使用 kubectl 访问集群:

    kubectl get nodes
    

    输出类似于以下内容:

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

创建对公共端点具有不受限制的访问权限的专用集群

在本部分中,您将创建一个专用集群,使得任何 IP 地址都可以访问控制平面。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建,然后在Standard 或 Autopilot 部分中点击配置

  3. 对于名称,请输入 private-cluster-3

  4. 在导航窗格中,点击网络

  5. 选择专用集群选项。

  6. 保持使用外部 IP 地址的访问权限控制复选框处于选中状态。

  7. (对于 Autopilot 而言为可选):将控制层面 IP 地址范围设置为 172.16.0.32/28

  8. 网络节点子网保留设置为 default。这会使 GKE 为您的集群生成子网。

  9. 取消选中启用控制平面授权网络复选框。

  10. 点击创建

gcloud

  • 对于 Autopilot 集群,请运行以下命令:

    gcloud container clusters create-auto private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-private-nodes
    
  • 对于 Standard 集群,请运行以下命令:

    gcloud container clusters create private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.32/28
    

其中:

  • --create-subnetwork name=my-subnet-3 使 GKE 自动创建名为 my-subnet-3 的子网。
  • --no-enable-master-authorized-networks 用于为集群停用已授权的网络。
  • --enable-ip-alias 使集群成为 VPC 原生集群(对于 Autopilot 而言并非必需)。
  • --enable-private-nodes 表示集群的节点没有外部 IP 地址。
  • --master-ipv4-cidr 172.16.0.32/28 指定控制平面的内部 IP 地址范围(对于 Autopilot 而言可选)。此设置对于该集群是永久性的,并且在 VPC 中必须是唯一的。系统支持使用非 RFC 1918 内部 IP 地址

针对特定用例添加防火墙规则

本部分介绍如何向集群添加防火墙规则。默认情况下,防火墙规则将集群控制平面限制为只能启动与端口 443 (HTTPS) 和 10250 (kubelet) 上的节点和 Pod 的 TCP 连接。对于某些 Kubernetes 功能,您可能需要添加防火墙规则以允许在其他端口上进行访问。请勿创建优先级高于自动创建的防火墙规则的防火墙规则或分层防火墙政策规则

需要额外防火墙规则的 Kubernetes 功能包括:

添加防火墙规则,允许流量从集群控制平面传输到以下所有端口:

  • 每个节点的指定端口 (hostPort)。
  • 在这些节点上运行的每个 Pod 的指定端口。
  • 在这些节点上运行的每个 Service 的指定端口。

如需了解防火墙规则,请参阅 Cloud Load Balancing 文档中的防火墙规则

如需在集群中添加防火墙规则,您需要记录集群控制平面的 CIDR 块和使用的目标。记录完成后,就可以创建规则了。

查看控制层面的 CIDR 块

为了添加防火墙规则,您需要使用集群控制层面的 CIDR 块。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

网络下的详细信息标签页中,记下控制平面地址范围字段中的值。

gcloud

运行以下命令:

gcloud container clusters describe CLUSTER_NAME

CLUSTER_NAME 替换为您的集群的名称。

在命令输出中,记下 masterIpv4CidrBlock 字段中的值。

查看现有防火墙规则

您需要指定集群的现有防火墙规则针对的目标(在这种情况下,就是目标节点)。

控制台

  1. 前往 Google Cloud 控制台中的防火墙政策页面。

    前往“防火墙政策”

  2. VPC 防火墙规则过滤表中,输入 gke-CLUSTER_NAME

在结果中,记下目标字段中的值。

gcloud

运行以下命令:

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

在命令输出中,记下目标字段中的值。

如需查看共享 VPC 的防火墙规则,请在命令中添加 --project HOST_PROJECT_ID 标志。

添加防火墙规则

控制台

  1. 前往 Google Cloud 控制台中的防火墙政策页面。

    前往“防火墙政策”

  2. 点击 创建防火墙规则

  3. 对于名称,输入防火墙规则的名称。

  4. 网络列表中,选择相关网络。

  5. 流量方向中,点击入站

  6. 对匹配项执行的操作中,点击允许

  7. 目标列表中,选择指定的目标标记

  8. 目标标记部分,输入您之前记下的目标值。

  9. 来源过滤条件列表中,选择 IPv4 范围

  10. 来源 IPv4 范围部分,输入集群控制平面的 CIDR 地址块。

  11. 协议和端口中,点击指定的协议和端口,选中相关协议(tcpudp),然后在协议字段中输入端口号。

  12. 点击创建

gcloud

运行以下命令:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

请替换以下内容:

  • FIREWALL_RULE_NAME:您为防火墙规则选择的名称。
  • CONTROL_PLANE_RANGE:您之前收集的集群控制平面 IP 地址范围 (masterIpv4CidrBlock)。
  • PROTOCOL:PORT:端口及其协议(tcpudp)。
  • TARGET:您先前收集的目标 (Targets) 值。

如需为共享 VPC 添加防火墙规则,请在命令中添加以下标志:

--project HOST_PROJECT_ID
--network NETWORK_ID

验证节点是否没有外部 IP 地址

创建专用集群后,请验证集群的节点是否没有外部 IP 地址。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

  3. 对于 Autopilot 集群,在集群基本信息部分中,查看外部端点字段。其值为已停用

对于 Standard 集群,请执行以下操作:

  1. 集群页面上,点击节点标签页。
  2. 节点池下,点击节点池名称。
  3. 节点池详情页面的实例组下,点击实例组的名称。例如 gke-private-cluster-0-default-pool-5c5add1f-grp`。
  4. 在实例列表中,确认实例没有外部 IP 地址。

gcloud

运行以下命令:

kubectl get nodes --output wide

输出的 EXTERNAL-IP 列为空:

STATUS ... VERSION        EXTERNAL-IP  OS-IMAGE ...
Ready      v.8.7-gke.1                 Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS

验证集群中的 VPC 对等互连重复使用

您在 2020 年 1 月 15 日之后创建的所有专用集群会重复使用 VPC 网络对等互连连接

您可以使用 gcloud CLI 或 Google Cloud 控制台检查专用集群是否会重复使用 VPC 网络对等互连连接。

控制台

检查集群详情页面中的 VPC 对等互连行。如果您的集群正在重复使用 VPC 对等互连连接,则输出会以 gke-n 开头。例如 gke-n34a117b968dee3b2221-93c6-40af-peer

gcloud

gcloud container clusters describe CLUSTER_NAME \
    --format="value(privateClusterConfig.peeringName)"

如果您的集群正在重复使用 VPC 对等互连连接,则输出会以 gke-n 开头。例如 gke-n34a117b968dee3b2221-93c6-40af-peer

高级集群配置

本部分介绍创建专用集群时您可能需要的一些高级配置。

授予专用节点出站互联网访问权限

如需为专用节点提供出站互联网访问权限(例如从外部注册表拉取映像),请使用 Cloud NAT 创建并配置一个 Cloud Router 路由器。Cloud NAT 允许专用节点通过互联网建立出站连接,以发送和接收数据包。

Cloud Router 路由器允许区域内的所有节点将 Cloud NAT 用于所有主要 IP 范围和别名 IP 范围。此外,它还会为 NAT 网关自动分配外部 IP 地址。

有关创建和配置 Cloud Router 路由器的说明,请参阅 Cloud NAT 文档中的创建使用 Cloud Router 路由器的 Cloud NAT 配置

在共享 VPC 网络中创建专用集群

如需了解如何在共享 VPC 网络中创建专用集群,请参阅在共享 VPC 中创建专用集群

部署 Windows Server 容器应用

如需了解如何将 Windows Server 容器应用部署到包含专用节点的集群,请参阅 Windows 节点池文档

在全球范围内访问控制层面的专用端点

控制平面的专用端点由控制平面的 VPC 网络中的内部直通式网络负载均衡器实现。内部客户端或通过 Cloud VPN 隧道和 Cloud Interconnect VLAN 连接进行连接的客户端可以访问内部直通式网络负载均衡器。

默认情况下,这些客户端必须与负载均衡器位于同一区域

启用控制平面全球访问权限时,可在全球范围内访问内部直通式网络负载均衡器:客户端虚拟机和本地系统可以从任意区域连接到控制平面的专用端点(受授权网络配置的限制)。

如需详细了解内部直通式网络负载均衡器和全球访问权限,请参阅内部负载均衡器和连接的网络

启用控制层面专用端点全球访问权限

默认情况下,在创建专用集群时,系统不会为控制层面的专用端点启用全球访问权限。如需启用控制平面全球访问权限,请根据您的集群模式使用以下工具:

  • 对于标准集群,您可以使用 Google Cloud CLI 或 Google Cloud 控制台。
  • 对于 Autopilot 集群,您可以使用 google_container_cluster Terraform 资源。

控制台

如需创建启用了控制层面全球访问权限的新专用集群,请执行以下步骤:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建,然后在Standard 或 Autopilot 部分中点击配置

  3. 输入名称

  4. 在导航窗格中,点击网络

  5. 选择专用集群

  6. 选中启用控制平面全球访问权限复选框。

  7. 根据需要配置其他字段。

  8. 点击创建

如需为现有专用集群启用控制层面全球访问权限,请执行以下步骤:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在要修改的集群旁边,点击 操作,然后点击 修改

  3. 网络部分的控制平面全球访问权限旁边,点击 修改

  4. 修改控制平面全球访问权限对话框中,选中启用控制平面全球访问权限复选框。

  5. 点击保存更改

gcloud

添加 --enable-master-global-access 标志以创建启用了控制层面专用端点的全球访问权限的专用集群:

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --enable-master-global-access

您还可以为现有专用集群启用控制层面专用端点的全球访问权限:

gcloud container clusters update CLUSTER_NAME \
    --enable-master-global-access

验证控制平面专用端点全球访问权限

如需验证是否启用了控制层面专用端点的全球访问权限,请运行以下命令并查看其输出。

gcloud container clusters describe CLUSTER_NAME

输出包括 privateClusterConfig 部分,您可以在其中查看 masterGlobalAccessConfig 的状态。

privateClusterConfig:
  enablePrivateNodes: true
  masterIpv4CidrBlock: 172.16.1.0/28
  peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
  privateEndpoint: 172.16.1.2
  publicEndpoint: 34.68.128.12
  masterGlobalAccessConfig:
    enabled: true

从其他网络访问控制平面的专用端点

创建 GKE 专用集群并停用控制平面的公共端点后,您必须使用 kubectl 等工具通过控制平面的专用端点来管理该集群。您可以从其他网络访问集群控制平面的专用端点,包括:

  • 使用 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接来连接到集群的 VPC 网络的本地网络
  • 使用 Cloud VPN 隧道连接到集群的 VPC 网络的另一个 VPC 网络

下图展示了本地网络和 GKE 控制平面节点之间的路由路径:

显示本地 VPC 和集群控制平面之间的路由的图表

如需允许其他网络中的系统连接到集群的控制平面专用端点,请完成以下要求:

  1. 识别并记录集群及其控制平面专用端点的相关网络信息。

    gcloud container clusters describe CLUSTER_NAME \
       --location=COMPUTE_LOCATION \
       --format="yaml(network, privateClusterConfig)"
    

    替换以下内容:

    在该命令的输出中,找到并记录以下信息以在后续步骤中使用:

    • network:集群的 VPC 网络的名称或 URI。
    • privateEndpoint:控制平面专用端点的 IPv4 地址或所属的 IPv4 CIDR 范围 (masterIpv4CidrBlock)。
    • peeringName:用于将集群的 VPC 网络连接到控制平面的 VPC 网络的 VPC 网络对等互连连接的名称。

    输出类似于以下内容:

    network: cluster-network
    privateClusterConfig:
      enablePrivateNodes: true
      masterGlobalAccessConfig:
        enabled: true
      masterIpv4CidrBlock: 172.16.1.0/28
      peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
      privateEndpoint: 172.16.1.2
      publicEndpoint: 34.68.128.12
    
  2. 考虑启用控制平面专用端点全球访问权限,以允许数据包从集群的 VPC 网络中的任何区域进入。启用控制平面专用端点全球访问权限后,您可以使用位于任何区域(而不仅仅是集群所在区域)的 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接来连接到专用端点。

  3. 为另一个网络中的 privateEndpoint IP 地址或 masterIpv4CidrBlock IP 地址范围创建路由。由于控制平面的专用端点 IP 地址始终在 masterIpv4CidrBlock IPv4 地址范围内,为 privateEndpoint IP 地址或其所属范围创建路由可为数据包提供从其他网络到控制平面专用端点的路径:

    • 另一个网络使用 Cloud Interconnect VLAN 连接或使用动态 (BGP) 路由的 Cloud VPN 隧道连接到集群的 VPC 网络:使用 Cloud Router 路由器自定义通告路由。如需了解详情,请参阅 Cloud Router 文档中的通告自定义地址范围

    • 另一个网络使用不使用动态路由的传统 VPN 隧道连接到集群的 VPC 网络:您必须在另一个网络中配置静态路由。

  4. 配置集群的 VPC 网络,以将其在对等互连关系中的自定义路由导出到控制平面的 VPC 网络。 Google Cloud 始终会将控制平面的 VPC 网络配置为从集群的 VPC 网络导入自定义路由。此步骤为数据包提供了从控制平面的专用端点返回另一个网络的路径。

    如需启用从集群的 VPC 网络导出的自定义路由,请使用以下命令:

    gcloud compute networks peerings update PEERING_NAME \
        --network=CLUSTER_VPC_NETWORK \
        --export-custom-routes
    

    请替换以下内容:

    • PEERING_NAME:将集群的 VPC 网络连接到控制平面 VPC 网络的对等互连的名称
    • CLUSTER_VPC_NETWORK:集群的 VPC 网络的名称或 URI

    为 VPC 启用自定义路由导出后,创建与 Google Cloud IP 范围重叠的路由可能会破坏您的集群。

    如需详细了解如何更新现有 VPC 网络对等互连连接的路由交换,请参阅更新对等互连连接

    集群的 VPC 网络中的自定义路由包括目的地为其他网络(例如本地网络)中的 IP 地址范围的路由。如需确保这些路由成为控制平面的 VPC 网络中的有效对等互连自定义路由,请参阅来自其他网络的受支持目的地

来自其他网络的受支持目的地

另一个网络向集群 VPC 网络中的 Cloud Router 路由器发送的地址范围必须遵循以下条件:

  • 虽然集群的 VPC 可以接受默认路由 (0.0.0.0/0),但控制平面的 VPC 网络始终拒绝默认路由,因为它已经有本地默认路由。 如果另一个网络向您的 VPC 网络发送默认路由,则另一个网络还必须发送需要连接到控制平面专用端点的系统的特定目的地。如需了解详情,请参阅路由顺序

  • 如果控制平面的 VPC 网络接受有效替换默认路由的路由,则这些路由会中断与Google Cloud API 和服务的连接,从而中断集群控制平面。作为代表性示例,另一个网络不得通告目的地为 0.0.0.0/1128.0.0.0/1 的路由。如需了解替代方法,请参阅上一点。

请监控 Cloud Router 路由器限制,特别是已知路由的唯一目的地数量上限。

使用 VPC Service Controls 保护专用集群

为进一步保障 GKE 专用集群的安全,您可以使用 VPC Service Controls 来保护它们。

VPC Service Controls 可为 GKE 专用集群提供额外的安全保护,有助于降低发生数据渗漏的风险。使用 VPC Service Controls,您可以将项目添加到服务边界,从而防止资源和服务受到源自边界外部的请求的影响。

如需详细了解服务边界,请参阅服务边界详情和配置

如果您在 VPC Service Controls 服务边界内将 Artifact Registry 与 GKE 专用集群搭配使用,则必须配置到受限虚拟 IP 的路由以防止数据渗漏。

清理

完成本页面上的任务后,请按照以下步骤移除资源,以防止您的账号产生不必要的费用:

删除集群

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 选择每个集群。

  3. 点击 删除

gcloud

gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3

删除网络

控制台

  1. 前往 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击 my-net-0

  3. VPC 网络详细信息页面上,点击 删除 VPC 网络

  4. 删除网络对话框中,点击删除

gcloud

gcloud compute networks delete my-net-0

后续步骤