更改使用 Private Service Connect 的集群中的隔离


本页面介绍如何对集群的控制平面和集群节点更改网络隔离。只有使用 Private Service Connect 以私密方式连接控制平面和节点的集群才支持更改集群的隔离模式。

更改集群隔离的原因

默认情况下,当您创建使用 Private Service Connect 的集群时,GKE 会为控制平面分配外部 IP 地址(外部端点)。这意味着任何具有外部 IP 地址的虚拟机都可以访问控制平面。

如果您配置授权网络,您可以限制有权访问集群控制平面的 IP 地址范围,但仍然可以从 Google Cloud 拥有的 IP 地址访问集群控制平面。例如,在 Google Cloud 中分配有外部 IP 地址的任何虚拟机都可以访问您的控制平面外部 IP 地址。但是,没有相应凭据的虚拟机无法访问您的节点

优势

网络隔离具有以下优势:

  • 您可以在同一集群中配置专用节点和公共节点的混合使用。这可以降低不需要外部 IP 地址访问互联网上的公共服务的节点的费用。
  • 您可以阻止从 Google Cloud 拥有的 IP 地址或从外部 IP 地址访问控制平面,以完全隔离集群控制平面。

本页介绍如何通过执行以下操作来更改此默认行为:

  • 启用或停用从 Google Cloud 拥有的 IP 地址访问控制平面。此操作可防止任何具有 Google Cloud 拥有的 IP 地址的虚拟机访问您的控制平面。如需了解详情,请参阅阻止从 Google Cloud 拥有的 IP 地址访问控制平面
  • 启用或停用对控制平面外部端点的公共访问权限。此操作会完全隔离您的集群,并且无法从任何公共 IP 地址访问控制平面。如需了解详情,请参阅隔离集群控制平面
  • 从节点中移除公共 IP 地址。此操作会将您的工作负载完全隔离。如需了解详情,请参阅隔离节点池

准备工作

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

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

禁止从 Google Cloud 虚拟机、Cloud Run 和 Cloud Functions 访问控制平面

默认情况下,如果您创建将 Private Service Connect 预定义为公共的集群,则已获授权的网络功能默认处于停用状态。

如果您创建将 Private Service Connect 预定义为专用的集群,则已获授权的网络功能默认处于启用状态。如需了解哪些 IP 地址始终可以访问 GKE 控制平面,请参阅对控制平面端点的访问权限

如需移除 Google Cloud 虚拟机、Cloud Run 和 Cloud Functions 对集群控制平面的访问权限,请使用 gcloud CLI 或 Google Cloud 控制台:

gcloud

  1. 更新集群以使用 --no-enable-google-cloud-access 标志:

    gcloud container clusters update CLUSTER_NAME \
        --no-enable-google-cloud-access
    

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

  2. 确认应用了 --no-enable-google-cloud-access 标志:

    gcloud container clusters describe CLUSTER_NAME | grep "gcpPublicCidrsAccessEnabled"
    

    输出类似于以下内容:

    gcpPublicCidrsAccessEnabled: false
    

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击要修改的集群的名称。

  3. 网络下的控制平面授权网络字段中,点击 修改控制平面授权网络

  4. 清除允许通过 Google Cloud 公共 IP 地址访问复选框。

  5. 点击保存更改

允许从 Google Cloud 拥有的 IP 地址访问控制层面

如需允许从 Google Cloud 拥有的公共 IP 地址访问集群控制平面,请运行以下命令:

gcloud

gcloud container clusters update CLUSTER_NAME \
    --enable-google-cloud-access

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

Google Cloud 拥有的 IP 地址可以访问您的集群控制平面。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击要修改的集群的名称。

  3. 网络下的控制平面授权网络字段中,点击 修改控制平面授权网络

  4. 勾选允许通过 Google Cloud 公共 IP 地址访问复选框。

  5. 点击保存更改

在使用 Private Service Connect 的集群中停用对控制平面的外部访问权限

创建为公共集群的集群

默认情况下,当您创建 GKE 公共集群时,GKE 会为控制平面分配外部 IP 地址(外部端点)。如果您指示 GKE 取消分配此外部端点,则 GKE 会启用专用端点。已停用从外部 IP 地址访问控制平面,从运行集群管理流程的 Google Cloud 服务访问除外。如需详细了解已启用的专用端点及其限制,请参阅使用 Private Service Connect 的公共集群

如需更改创建为公共集群的集群的控制平面隔离,请使用 gcloud CLI:

  1. 更新集群以使用 --enable-private-endpoint 标志:

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-endpoint
    

    CLUSTER_NAME 替换为公共集群的名称。

  2. 确认应用了 --enable-private-endpoint 标志:

    gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
    

    输出类似于以下内容:

    enablePrivateEndpoint:true
    

创建为专用集群的集群

默认情况下,当您创建 GKE 专用集群时,GKE 会为控制平面分配外部 IP 地址(外部端点)和内部 IP 地址(内部端点)。您可以取消分配此外部端点,但无法取消分配内部端点。

如果您指示 GKE 取消分配外部端点,则系统会停用从外部 IP 地址对控制平面的外部访问权限。

如需在创建为专用集群的集群中移除外部端点,请使用 gcloud CLI 或 Google Cloud 控制台:

gcloud

  1. 更新集群以使用 --enable-private-endpoint 标志:

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-endpoint
    

    CLUSTER_NAME 替换为公共集群的名称。

  2. 确认应用了 --enable-private-endpoint 标志:

    gcloud container clusters describe CLUSTER_NAME | grep "enablePrivateEndpoint"
    

    输出类似于以下内容:

    enablePrivateEndpoint: true
    

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击要修改的集群的名称。

  3. 集群基本信息外部端点字段中,点击 修改外部控制平面访问权限

  4. 清除允许通过 Google Cloud 公共 IP 地址访问复选框。

  5. 点击保存更改

在使用 Private Service Connect 的集群中启用对控制平面的外部访问权限

如需在创建为公共或专用集群的集群中为控制平面分配外部 IP 地址(外部端点),请使用 gcloud CLI 或 Google Cloud 控制台:

gcloud

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-private-endpoint

CLUSTER_NAME 替换为公共集群的名称。

外部 IP 地址可以访问您的集群控制平面。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击要修改的集群的名称。

  3. 集群基本信息外部端点字段中,点击 修改外部控制平面访问权限

  4. 选中使用控制平面的外部 IP 地址对其进行访问复选框。

  5. 点击保存更改

隔离节点池

您可以指示 GKE 预配仅具有专用 IP 地址的节点池。将公共节点池更新为专用模式后,需要公共互联网访问权限的工作负载可能会失败。在更改节点隔离之前,请参阅 Private Service Connect 集群限制。您可以在创建为公共或专用集群的集群上修改此设置:

Autopilot

在 Autopilot 集群中,在现有 Pod 上添加污点,以便 GKE 仅在专用节点上预配它们:

  1. 如需请求 GKE 在专用节点上调度 Pod,请将以下 nodeSelector 添加到您的 Pod 规范:

     cloud.google.com/private-node=true
    

    GKE 会在专用节点上重新创建您的 Pod。为避免工作负载中断,请单独迁移每个工作负载并监控迁移过程。

  2. 如果您使用的是共享 VPC,请在更改集群隔离模式后启用专用 Google 访问通道。如果您使用的是 Cloud NAT,则无需启用专用 Google 访问通道。

Standard

gcloud

如需通过现有节点池中的专用 IP 地址预配节点,请运行以下命令:

  gcloud container node-pools update NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --enable-private-nodes

请替换以下内容:

  • NODE_POOL_NAME:您要修改的节点池的名称。
  • CLUSTER_NAME:GKE 集群的名称。

    如果您使用的是共享 VPC,请在更改集群隔离模式后启用专用 Google 访问通道。如果您使用的是 Cloud NAT,则无需启用专用 Google 访问通道。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

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

  3. 集群页面上,点击节点标签页。

  4. 节点池下,点击节点池名称。

  5. 点击修改

  6. 选中启用专用节点复选框。

  7. 点击保存

还原节点池隔离

在 Standard 集群中,如需指示 GKE 预配具有公共 IP 地址的节点池,请运行以下命令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --no-enable-private-nodes

请替换以下内容:

  • NODE_POOL_NAME:您要修改的节点池的名称。
  • CLUSTER_NAME:GKE 集群的名称。

公共 IP 地址可以访问您的集群节点。

限制

在更改集群隔离模式之前,请考虑以下限制:

  • 旧版网络上运行的公共集群不支持更改隔离模式。
  • 将公共节点池更新为专用模式后,在以下情况下,需要公共互联网访问权限的工作负载可能会失败:
    • 未启用专用 Google 访问通道的共享 VPC 网络中的集群。手动启用专用 Google 访问通道,以确保 GKE 下载分配的节点映像。对于不在共享 VPC 网络中的集群,GKE 会自动启用专用 Google 访问通道。
    • 需要访问互联网的工作负载(未启用 Cloud NAT 或未定义自定义 NAT 解决方案的情况下)。如需允许流向互联网的出站流量,请启用 Cloud NAT 或自定义 NAT 解决方案。

创建为公共或专用集群的 Private Service Connect 集群

创建为公共集群并使用 Private Service Connect 的集群启用了专用端点。在此专用端点中,不支持在网址中对您配置的新 webhook 或现有 webhook 使用内部 IP 地址。如需缓解这种不兼容问题,请执行以下操作:

  1. 按网址设置具有专用地址的 webhook。
  2. 创建无选择器的无头服务
  3. 为所需的目标位置创建相应的端点。

创建为公共集群的 Private Service Connect 集群

只有在创建为公共集群的 Private Service Connect 集群中,集群网络中的所有专用 IP 地址才始终可以访问集群专用端点。如需详细了解控制平面访问权限,请参阅用于访问控制平面的已获授权的网络

后续步骤