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

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

概览

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

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

专用集群运行仅具有内部 IP 地址的节点,并且与已获授权的网络类似不允许 Google Cloud 外部不受信任的 IP 地址访问控制平面端点。

如果在专用集群中使用已获授权的网络,则只能通过以下各项访问控制平面:

  • Google Cloud 内部(例如 Compute Engine 虚拟机)的地址
  • 允许的 CIDR 地址块
  • 集群 VPC 中的节点和 Pod
  • 管理控制平面的 Google 内部生产作业

优势

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

限制

  • 公共集群最多可以有 50 个已获授权的网络 CIDR 范围;专用集群最多可包含 100 个。
  • 如果您扩展子网(具有已获授权的网络的集群使用该子网),则必须更新已获授权的网络以包含扩展的 IP 地址范围。
  • 对于使用授权网络的公共集群,可以从 Google Cloud 拥有的 IP 地址访问集群控制平面。如果公共集群使用 Private Service Connect 以私密方式连接节点和控制平面,您可以阻止从 Google Cloud 拥有的 IP 地址访问控制平面
  • 对于使用 Private Service Connect 以私密方式连接节点和控制平面的公共集群,授权网络不支持 RFC 1918 IP 地址。任何 RFC 1918 IP 地址都可以访问集群的专用端点。

准备工作

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

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。

创建具有授权网络的集群

您可以使用 Google Cloud CLI、Google Cloud 控制台或 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. 转到 Google Cloud 控制台中的 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

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

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

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

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

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

gcloud

运行以下命令:

gcloud container clusters create 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. 根据需要配置集群。

  4. 在导航菜单的集群下,点击网络

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

  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. 点击保存更改

移除授权网络

您可以使用 Google Cloud 控制台移除现有集群的所有自定义授权网络。

  1. 转到 Google Cloud 控制台中的 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 块

后续步骤