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

本页面介绍如何向授权网络授予对 Google Kubernetes Engine (GKE) 集群中的集群控制层面(主服务器)的访问权限。如需了解 GKE 网络的一般信息,请访问网络概览

概览

通过授权网络,您可以指定 CIDR 范围并允许这些范围内的 IP 地址使用 HTTPS 访问您的集群控制层面端点。授权网络与所有集群都兼容。

GKE 使用传输层安全协议 (TLS) 和身份验证来提供从公共互联网对集群主控制层面端点的安全访问。这使您可以灵活地从任何地方管理您的集群。使用授权网络可以进一步限制对一组指定 IP 地址的访问。

优势

添加已授权网络可为集群提供额外的安全性优势。已授权网络可授予对您指定的一组特定地址(例如您环境中的一组地址)的访问权限。如果集群的身份验证或授权机制存在漏洞,这样将有助于为集群提供访问保护。

使用专用集群的优势

专用集群可以运行没有外部 IP 地址的节点,并且可以选择性运行这些节点的无可公开访问的端点的集群控制层面。此外,默认情况下,专用集群不允许 Google Cloud IP 地址访问控制层面端点。如果将专用集群与授权网络配合使用,则只有允许的 CIDR、集群的 VPC 中的节点以及管理控制层面的 Google 内部产品作业能够访问控制层面。

限制

  • 公共集群最多可以有 50 个已获授权的网络 CIDR 范围;专用集群最多可包含 100 个。

准备工作

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

使用以下任一方法设定默认的 gcloud 设置:

  • 使用 gcloud init(如果您想要在系统引导下完成默认设置)。
  • 使用 gcloud config(如果您想单独设置项目 ID、区域和地区)。

使用 gcloud init

如果您收到 One of [--zone, --region] must be supplied: Please specify location 错误,请完成本部分。

  1. 运行 gcloud init 并按照说明操作:

    gcloud init

    如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

    gcloud init --console-only
  2. 按照说明授权 gcloud 使用您的 Google Cloud 帐号。
  3. 创建新配置或选择现有配置。
  4. 选择 Google Cloud 项目。
  5. 为可用区级集群选择默认 Compute Engine 可用区,或为区域级集群或 Autopilot 集群选择区域。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project PROJECT_ID
  • 如果您使用的是可用区级集群,请设置默认计算可用区
    gcloud config set compute/zone COMPUTE_ZONE
  • 如果您使用的是 Autopilot 集群或区域级集群,请设置默认计算区域
    gcloud config set compute/region COMPUTE_REGION
  • gcloud 更新到最新版本:
    gcloud components update

创建具有授权网络的集群

您可以使用 gcloud 工具、Google Cloud Console 或 GKE API 创建具有一个或多个授权网络的集群。

gcloud

运行以下命令:

gcloud container clusters create cluster-name \
    --enable-master-authorized-networks \
    --master-authorized-networks cidr1,cidr2...

替换以下内容:

  • cluster-name:您的现有集群的名称。
  • cidr1cidr2:已获授权网络的 CIDR 值。

使用 --master-authorized-networks 标志时,您可以英文逗号作为分隔符指定 CIDR(例如 8.8.8.0/24),以允许其通过 HTTPS 访问集群控制层面端点。

例如:

gcloud container clusters create example-cluster \
    --enable-master-authorized-networks \
    --master-authorized-networks 8.8.8.8/32,8.8.8.0/24

控制台

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 点击 创建

  3. 根据需要配置集群。

  4. 在导航窗格的集群下,点击网络

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

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

  7. 输入网络的名称

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

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

  10. 点击创建

API

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

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

如需了解详情,请参阅 MasterAuthorizedNetworksConfig

创建具有已授权网络的专用集群

要了解如何创建具有一个或多个已授权网络的专用集群,请参阅专用集群

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

您可以使用 gcloud 命令行工具或使用 Cloud Console 将已授权网络添加到现有集群。

gcloud

运行以下命令:

gcloud container clusters update cluster-name \
    --enable-master-authorized-networks \
    --master-authorized-networks cidr1,cidr2...

替换以下内容:

  • cluster-name:您的现有集群的名称。
  • cidr1cidr2:已获授权网络的 CIDR 值。

使用 --master-authorized-networks 标志时,您可以英文逗号作为分隔符指定 CIDR(例如 8.8.8.0/24),以允许其通过 HTTPS 访问集群控制层面端点。

例如:

gcloud container clusters update example-cluster \
    --enable-master-authorized-networks \
    --master-authorized-networks 8.8.8.8/32,8.8.8.0/24

控制台

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

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

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

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

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

  6. 输入网络的名称

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

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

  9. 点击保存更改

API

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

"desiredMasterAuthorizedNetworksConfig": {
    object(MasterAuthorizedNetworksConfig)
  }

验证授权网络

您可以使用 gcloud 命令行工具或使用 Cloud Console 验证现有集群中的已授权网络。

gcloud

运行以下命令:

gcloud container clusters describe cluster-name

在命令输出中,查找 masterAuthorizedNetworksConfig 字段:

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

控制台

  1. 访问 Cloud Console 中的 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 命令行工具或使用 Cloud Console 停用现有集群的授权网络。

gcloud

运行以下命令:

gcloud container clusters update cluster-name \
    --no-enable-master-authorized-networks

控制台

  1. 访问 Cloud Console 中的 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 块

后续步骤