添加授权网络以实现集群主服务器访问通道

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

概览

授权网络允许您将特定 CIDR 范围列入白名单,并允许这些范围内的 IP 地址使用 HTTPS 访问您的集群主服务器端点。授权网络与所有集群都兼容。

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

优势

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

使用专用集群的优势

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

限制

  • 集群的授权网络 CIDR 范围不得超过 50 个。

准备工作

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

使用以下任一方法设定默认的 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 地区。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project project-id
  • 如果您使用的是地区级集群,请设置默认计算地区
    gcloud config set compute/zone compute-zone
  • 如果您使用的是区域级集群,请设置默认计算区域
    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 [CIDR],[CIDR]...

使用 --master-authorized-networks 标志时,您可以英文逗号作为分隔符指定最多 50 个 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 [CIDR],[CIDR]...

使用 --master-authorized-networks 标志时,您可以英文逗号作为分隔符指定最多 50 个 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. 点击添加已获授权的网络 (Add authorized network)。

  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. 选择所需的集群。

主要的已授权网络字段将显示已列入白名单的 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 地址块配置错误,kubectl 命令超时:

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

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

后续步骤