添加授权网络以实现控制平面访问


本页面介绍了如何使用已获授权的网络来限制可从哪些来源访问 Google Kubernetes Engine (GKE) 集群的控制平面。已获授权的网络会为控制平面授予对一组特定的受信任 IP 地址的访问权限,并为 GKE 集群提供保护和额外的安全优势。

授权网络的工作原理

授权网络提供基于 IP 地址的防火墙,用于控制对 GKE 控制平面的访问权限。对控制平面的访问权限取决于 GKE 集群的类型和来源 IP 地址。使用授权网络时,您可以将允许访问 GKE 集群控制平面端点的 IP 地址配置为一个 CIDR 块列表。

以下术语用于区分各种不同的基于 IP 地址的防火墙规则(根据集群类型划分):

各类 IP 地址的区别:

  • Google Cloud 中所有 Compute Engine 虚拟机的公共 IP 地址:分配给在 Google Cloud 上托管的任何客户使用的任何虚拟机的公共 IP 地址。这些 IP 地址归 Google Cloud 所有。如需了解详情,请参阅在何处可以找到 Compute Engine IP 地址范围?
  • Google Cloud Platform IP 地址:Google Cloud 产品(例如 Cloud Run 或 Cloud Functions)使用的 IP 地址。托管在 Google Cloud 上的任何客户端都可以实例化这些 IP 地址。这些 IP 地址归 Google Cloud 所有。
  • Google 预留的 IP 地址:用于管理 GKE 集群的公共 IP 地址。这些 IP 地址包括 GKE 代管式进程和生产环境中的其他 Google 服务。这些 IP 地址归 Google 所有。
  • 互联网公共 IP 地址:非 RFC 1918 和非 Google 公共 IP 地址。这些公共 IP 地址既非 Google 所有,也非 Google Cloud 产品所有。
  • GKE 集群 IP 地址范围:分配给集群的 IP 地址,GKE 会将这些地址用于集群的节点、Pod 和 Service。
  • 以非公开方式使用的 IP 地址:集群的 VPC 网络中的 IP 地址。这些 IP 地址可能包括您的集群 IP 地址、本地网络、RFC 1918 范围或以非公开方式使用的公共 IP (PUPI) 地址(包括非 RFC 1918 范围)。

集群类型:

  • 旧版公共集群:在旧版网络VPC 网络上运行的公共集群,这些集群会将公共 IP 地址分配给节点并且尚未迁移到 Private Service Connect 架构。
  • 旧版专用集群:基于 VPC 网络对等互连的集群,仅用于从具有专用 IP 地址的节点实现控制平面连接。
  • 创建为公共或专用集群的基于 PSC 的集群:使用 Private Service Connect 架构在 GKE 集群控制平面和节点之间进行通信的集群。如需确定您的集群是否在使用 Private Service Connect,请参阅 GKE 控制平面

对控制平面端点的访问权限

下表显示了创建集群时的默认授权网络状态。根据 GKE 集群和控制平面端点的类型,您可以确定以下内容:

  • 始终可以访问 GKE 控制平面的预设 IP 地址。
  • 可配置为通过启用授权网络来访问集群控制平面的 IP 地址。

当您将可配置的 IP 地址列入许可名单并启用授权网络后,这些地址便可以访问集群的控制平面。

GKE 集群和控制平面端点的类型 默认控制平面授权的网络状态 始终可以访问 GKE 控制平面的预设 IP 地址1 可以通过启用授权网络访问 GKE 控制平面的可配置 IP 地址2
基于 VPC 网络对等互连的旧版公共集群或专用集群
具有公共端点的旧版公共集群 已停用
  • Google Cloud 中所有 Compute Engine 虚拟机的公共 IP 地址
  • Google Cloud Platform IP 地址
  • Google 预留的 IP 地址
  • GKE 集群 IP 地址范围
  • 列入许可名单的互联网公共 IP 地址,用于访问集群的公共 IP 端点。
具有公共和专用端点的旧版专用集群 已启用
  • Google 预留的 IP 地址
  • GKE 集群 IP 地址范围(仅限具有专用 IP 地址的节点、Pod 和 Service)。
  • 从集群网络列入许可名单的以非公开方式使用的 IP 地址,用于访问集群的专用端点。
  • 如果停用了 --enable-private-endpoint 标志,则为列入许可名单的互联网公共 IP 地址,用于访问集群的公共端点。
使用 Private Service Connect 的集群
创建为公共集群的集群 已停用
  • 集群网络中的所有专用 IP 地址(不包括已知的 VPC 网络对等互连路由)。

设置 –enable-google-cloud 标志(默认)后,以下 IP 地址将可以访问 GKE 控制平面:

  • Google Cloud 中所有 Compute Engine 虚拟机的公共 IP 地址
  • Google Cloud Platform IP 地址
  • Google 预留的 IP 地址
  • GKE 集群节点的公共 IP 地址。

设置 –no-enable-google-cloud 标志后,以下 IP 地址将可以访问 GKE 控制平面:

  • Google 预留的 IP 地址
  • GKE 集群 IP 地址范围(仅限具有专用 IP 地址的节点、Pod 和 Service)。

如需了解详情,请参阅更改集群隔离

  • 列入许可名单的互联网公共 IP 地址,用于访问集群的公共端点
创建为专用集群的集群 已启用

GKE 集群 IP 地址范围(如节点、Pod 和 Service)仅具有专用 IP 地址。

默认情况下,创建集群时,–enable-google-cloud 会处于停用状态。不过,设置 –enable-google-cloud 标志后,以下 IP 地址将可以访问 GKE 控制平面:

  • Google Cloud 中所有 Compute Engine 虚拟机的公共 IP 地址
  • Google Cloud Platform IP 地址
  • Google 预留的 IP 地址
  • GKE 集群节点的公共 IP 地址。

设置 –no-enable-google-cloud 标志后,以下 IP 地址将可以访问 GKE 控制平面:

  • Google 预留的 IP 地址
  • GKE 集群 IP 地址范围(仅限具有专用 IP 地址的节点、Pod 和 Service)。

如需了解详情,请参阅更改集群隔离

  • 如果停用了 --enable-private-endpoint 标志,则为列入许可名单的互联网公共 IP 地址,用于访问集群的公共端点。
  • 从集群网络列入许可名单的以非公开方式使用的 IP 地址,用于访问集群的专用端点
  1. 始终可以访问 GKE 控制平面的 IP 地址,无论授权网络是启用还是停用

  2. 您必须将这些可配置的 IP 地址列入许可名单,之后这些地址才能访问集群控制平面。

限制

  • 如果您扩展子网并且具有授权网络的集群会使用该子网,则必须更新授权网络配置以包含扩展的 IP 地址范围。
  • 您可以为公共和专用 IP 地址指定的授权 IP 地址范围的数量取决于集群的类型:

    • 公共集群:50 个 IP 地址范围
    • 专用集群:100 个 IP 地址范围
    • 基于 PSC 的集群:100 个 IP 地址范围

准备工作

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

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

创建具有授权网络的集群

您可以使用 Google Cloud CLI、Google Cloud 控制台或 GKE API 创建具有一个或多个已获授权的网络的集群。

gcloud

运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,...

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • CIDR1,CIDR2,...:已获授权的网络的 CIDR 值的列表(以英文逗号分隔)。例如 8.8.8.8/32,8.8.8.0/24

控制台

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

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. AutopilotStandard 部分中,点击配置

  4. 根据需要配置集群。

  5. 在导航菜单中,点击网络

  6. 高级网络选项下,选中启用控制平面授权网络复选框。

  7. 点击添加已获授权的网络

  8. 输入网络的名称

  9. 对于网络,输入要授予集群控制平面访问权限的 CIDR 范围。

  10. 点击完成。根据需要添加其他已获授权的网络。

  11. 点击创建

API

在集群 create 请求中指定 masterAuthorizedNetworksConfig 对象:

"masterAuthorizedNetworksConfig": {
  "enabled": true,
  "cidrBlocks": [
    {
      "displayName": string,
      "cidrBlock": string
    }
  ]
}

如需了解详情,请参阅 MasterAuthorizedNetworksConfig

您可以使用一个或多个授权网络配置专用集群。如需了解详情,请参阅专用集群

创建具有有限控制平面访问权限的集群

GKE 会为公共集群中的控制平面分配公共 IP 地址(外部端点)。您可以对公共集群设置进一步的集群隔离,从而使用 Private Service Connect 以私密方式连接节点和控制平面。如需检查您的集群是否使用 Private Service Connect,请参阅使用 Private Service Connect 的公共集群

您可以创建集群并指示 GKE 阻止从以下来源访问控制平面:

您可以使用 Google Cloud CLI 或 Google Cloud 控制台创建集群并定义控制平面访问权限。

gcloud

运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME
    --no-enable-google-cloud-access

CLUSTER_NAME 替换为 GKE 集群的名称。

使用此命令时,no-enable-google-cloud-access 标志会阻止从 Google Cloud 拥有的 IP 地址访问控制平面。

控制台

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

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. AutopilotStandard 部分中,点击配置

  4. 根据需要配置集群。

  5. 在导航菜单中,点击网络

  6. 高级网络选项下,选中启用控制平面授权网络复选框。

  7. 清除允许通过 Google Cloud 公共 IP 地址访问复选框,以防止从 Google Cloud 拥有的 IP 地址访问控制平面。

  8. 点击添加已获授权的网络

  9. 输入网络的名称

  10. 对于网络,输入要授予集群控制平面访问权限的 CIDR 范围。

  11. 点击完成。根据需要添加其他已获授权的网络。

  12. 点击创建

将授权网络添加到现有集群

您可以使用 gcloud CLI 或 Google Cloud 控制台将已获授权的网络添加到现有集群。

gcloud

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,...

替换以下内容:

  • CLUSTER_NAME:现有集群的名称。
  • CIDR1,CIDR2,...:已获授权的网络的 CIDR 值的列表(以英文逗号分隔)。例如 8.8.8.8/32,8.8.8.0/24

控制台

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

    转到 Google Kubernetes Engine

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

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

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

  5. 点击添加已获授权的网络

  6. 输入网络的名称

  7. 对于网络,输入要授予集群控制平面访问权限的 CIDR 范围。

  8. 点击完成。根据需要添加其他已获授权的网络。

  9. 点击保存更改

API

在集群 update 请求中指定 desiredMasterAuthorizedNetworksConfig 字段。在该字段中,指定 MasterAuthorizedNetworksConfig 对象:

"desiredMasterAuthorizedNetworksConfig": {
    object(MasterAuthorizedNetworksConfig)
  }

验证授权网络

您可以使用 gcloud CLI 或 Google Cloud 控制台验证现有集群中已获授权的网络。

gcloud

运行以下命令:

gcloud container clusters describe CLUSTER_NAME

输出内容类似如下:

...
masterAuthorizedNetworksConfig:
  cidrBlocks:
  - cidrBlock: 8.8.8.8/32
  - cidrBlock: 8.8.4.4/32
  enabled: true
...

控制台

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

    转到 Google Kubernetes Engine

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

  3. 网络下,控制平面授权网络字段会显示允许的 CIDR。

API

发送 get 请求。 在 masterAuthorizedNetworksConfig 字段下查找 CIDR 地址块。例如:

"masterAuthorizedNetworksConfig": {
"enabled": true,
 "cidrBlocks": [
  {
    "displayName": "Office",
    "cidrBlock": "192.0.2.0/24"
  }
]
}

停用授权网络

您可以使用 gcloud CLI 或 Google Cloud 控制台停用现有集群已获授权的网络。

gcloud

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --no-enable-master-authorized-networks

控制台

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

    转到 Google Kubernetes Engine

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

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

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

  5. 点击保存更改

移除授权网络

gcloud

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-master-authorized-networks

控制台

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

    转到 Google Kubernetes Engine

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

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

  4. 点击 删除

  5. 点击保存更改

问题排查

以下部分说明如何解决授权网络的常见问题。

CIDR 地址块太多

在尝试创建或更新具有超过 50 个 CIDR 地址块的集群时,gcloud 将返回以下错误:

ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args

如需解决此问题,如果您的集群是公共的,请确保指定的 CIDR 地址块数不超过 50 个。如果您的集群是专用集群,则指定的 CIDR 块数量不超过 100 个。

无法连接到服务器

由于 CIDR 地址块配置错误,kubectl 命令超时:

Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out

创建或更新集群时,请确保指定了正确的 CIDR 块

后续步骤