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

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

概览

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

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

专用集群可以运行仅具有内部 IP 地址的节点,并且不允许通过互联网的公共 IP 访问控制层面端点。此外,默认情况下,专用集群不允许 Google Cloud IP 地址访问控制层面端点。如果在专用集群中使用授权网络,则只有允许的 CIDR、集群的 VPC 中的节点和 Pod 以及管理控制层面的 Google 内部生产作业能够访问控制层面。

优势

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

限制

  • 公共集群最多可以有 50 个已获授权的网络 CIDR 范围;专用集群最多可包含 100 个。
  • 如果您扩展子网(具有已获授权的网络的集群使用该子网),则必须更新已获授权的网络以包含扩展的 IP 地址范围。

准备工作

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

  • 确保您已启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 确保您已安装 Cloud SDK
  • 使用以下方法之一为您的项目设置默认 gcloud 命令行工具设置:
    • 使用 gcloud init(如果您想要在系统引导下完成项目默认设置)。
    • 使用 gcloud config(如果您想要单独设置项目 ID、可用区和区域。

    gcloud init

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

      gcloud init

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

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

    gcloud config

    1. 设置默认项目 ID
      gcloud config set project PROJECT_ID
    2. 设置默认的 Compute Engine 区域(例如 us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. 设置默认的 Compute Engine 可用区(例如 us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud 更新到最新版本:
      gcloud components update

    通过设置默认位置,您可以避免 gcloud 工具中出现以下错误:One of [--zone, --region] must be supplied: Please specify location

创建具有授权网络的集群

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

gcloud

运行以下命令:

gcloud container clusters create 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. 转到 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:现有集群的名称。
  • CIDR1,CIDR2,...:已获授权的网络的 CIDR 值的列表(以英文逗号分隔)。例如 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:
  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. 点击保存更改

移除授权网络

您可以使用 gcloud 工具或 Cloud Console 移除现有集群的所有自定义授权网络。

gcloud

运行以下命令:

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

控制台

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

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

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

  4. 如需移除 CIDR,请点击 删除

  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 块

后续步骤