在 GKE 中自定义网络隔离


本页介绍了在创建或更新集群时如何为 Google Kubernetes Engine (GKE) 集群配置网络隔离。

最佳实践

与组织的网络架构师、网络管理员或负责定义、实现和维护网络架构的任何其他网络工程师团队一起规划和设计集群网络隔离。

集群网络隔离的工作原理

在 GKE 集群中,网络隔离取决于哪些人可以访问集群组件以及如何访问。您可以控制:

  • 控制平面访问权限:您可以自定义对控制平面的外部访问权限、受限访问权限或不受限访问权限。
  • 集群网络:您可以选择哪些人可以访问 Standard 集群中的节点或 Autopilot 集群中的工作负载。

在创建集群之前,请考虑以下事项:

  1. 谁可以访问控制平面,以及如何公开控制平面?
  2. 您的节点或工作负载是如何公开的?

如需回答这些问题,请遵循网络隔离简介中的规划和设计准则。

限制和局限

默认情况下,GKE 会将您的集群创建为 VPC 原生集群。VPC 原生集群不支持旧版网络

展开即可下部分,查看创建集群时有关 IP 地址范围和流量的规则。

准备工作

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

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

配置控制平面访问权限

当您使用 Google Cloud CLI 在任何版本中创建 GKE 集群,或者在 1.29 及更高版本中使用控制台创建 GKE 集群时,都可以通过以下接口访问控制平面:

基于 DNS 的端点

对控制平面的访问权限取决于来源流量的 DNS 解析。启用基于 DNS 的端点可获享以下优势:

  • 根据 IAM 政策创建动态访问权限政策。
  • 从其他 VPC 网络或外部位置访问控制平面,而无需设置堡垒主机或代理节点。

如需配置对基于 DNS 的端点的访问权限,请参阅定义基于 DNS 的端点访问权限

基于 IP 的端点

对控制平面端点的访问权限取决于来源 IP 地址,并由您的授权网络控制。您可以管理对控制平面基于 IP 的端点的访问权限,包括:

  • 启用或停用基于 IP 的端点。
  • 启用或停用外部端点,以允许外部流量访问。启用基于 IP 的控制平面端点后,内部端点始终处于启用状态。
  • 添加已获授权的网络,以将公共 IP 地址列入许可名单或禁止其访问。 如果您未配置已授权的网络,则可以通过任何外部 IP 地址访问控制平面。这包括没有任何限制的公共互联网或 Google Cloud 外部 IP 地址。
  • 将集群中的任何或所有专用 IP 地址列入许可名单或拒绝访问。
  • Google Cloud 外部 IP 地址列入许可名单或拒绝其访问权限,这些 IP 地址是分配给在 Google Cloud上托管的任何客户使用的任何虚拟机的外部 IP 地址。
  • 将其他 Google Cloud 区域中的 IP 地址列入许可名单或拒绝其访问权限。

在定义控制平面访问权限之前,请查看使用基于 IP 的端点的限制

创建集群并定义控制平面访问权限

如需创建或更新 Autopilot 或标准集群,请使用 Google Cloud CLI 或 Google Cloud 控制台。

控制台

如需创建集群,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据项目需求配置集群的属性。

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

  5. 控制平面访问权限下,配置控制平面端点:

    1. 选中使用 DNS 访问复选框,以启用基于 DNS 的控制平面端点。
    2. 选中使用 IPv4 地址访问复选框,以启用基于 IP 的控制平面端点。使用指定可以访问控制平面的 IP 地址中包含的配置来自定义对基于 IP 的端点的访问权限。

gcloud

对于 Autopilot 集群,请运行以下命令:

  gcloud container clusters create-auto CLUSTER_NAME \
    --enable-ip-access  \
    --enable-dns-access

对于 Standard 集群,请运行以下命令:

  gcloud container clusters create CLUSTER_NAME \
      --enable-ip-access \
      --enable-dns-access

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。

这两个命令都包含用于启用以下功能的标志:

  • enable-dns-access:通过使用基于 DNS 的控制平面端点启用对控制平面的访问。
  • enable-ip-access:使用 IPv4 地址启用对控制平面的访问。如果您想同时停用控制平面的内部端点和外部端点,请省略此标志。

使用定义可以访问控制平面的 IP 地址中列出的标志来自定义对基于 IP 的端点的访问权限。

定义对基于 DNS 的端点的访问权限

您可以通过配置 IAM 权限 container.clusters.connect 来管理对基于 DNS 的端点的身份验证和授权。如需配置此权限,请向您的 Google Cloud 项目分配以下 IAM 角色

  • roles/container.developer
  • roles/container.viewer

您可以视需要使用以下功能来管理基于 DNS 的端点的可访问性:

  • VPC Service Controls:基于 DNS 的端点支持 VPC Service Controls,可为您的控制平面访问添加一层安全保障。VPC Service Controls 在 Google Cloud API 中始终如一。

  • 从无公共互联网访问权限的客户端访问基于 DNS 的端点:您可以通过公共互联网上提供的 Google Cloud API 访问基于 DNS 的端点。如需从专用客户端访问基于 DNS 的端点,您可以使用专用 Google 访问通道Cloud NAT 网关适用于 Google Cloud API 的 Private Service Connect

    当您使用适用于 Google Cloud API 的 Private Service Connect 时,GKE 会将对 gke.goog 地址的请求重定向到 Google API 专用 Service Connect 添加的内部 IP 地址,而不是默认的 Google 公共 IP 地址。如需为 Google Cloud API 配置 Private Service Connect,请完成通过端点访问 Google API 中的步骤。

  • 从本地客户端访问基于 DNS 的端点:本地客户端可以通过专用 Google 访问通道访问基于 DNS 的端点。如需配置专用 Google 访问通道,请完成为本地主机配置专用 Google 访问通道中的步骤。

定义可以访问控制平面的 IP 地址

如需定义可以访问控制平面的 IP 地址,请完成以下步骤:

控制台

  1. 控制平面访问下,选择启用授权网络
  2. 点击添加授权网络
  3. 输入网络的名称
  4. 对于网络,输入要授予集群控制平面访问权限的 CIDR 范围。
  5. 点击完成
  6. 根据需要添加其他已获授权的网络。
定义控制平面 IP 地址防火墙规则

如需定义控制平面 IP 地址防火墙规则,请完成以下步骤:

  1. 展开显示 IP 地址防火墙规则部分。
  2. 选中使用控制平面的外部 IP 地址访问复选框,以允许从公共 IP 地址访问控制平面。

    最佳实践

    定义控制平面授权的网络以限制对控制平面的访问。

  3. 选中使用控制平面的内部 IP 地址从任何区域访问复选框。任何 Google Cloud区域中的内部 IP 地址都可以访问控制平面内部端点。

  4. 选择在控制平面的内部端点上强制使用授权网络。只有您在添加授权网络列表中定义的 IP 地址才能访问控制平面内部端点。内部端点默认处于启用状态。

  5. 选择向授权网络添加 Google Cloud 外部 IP 地址。 Google Cloud 中的所有公共 IP 地址都可以访问控制平面。

gcloud

您可以使用以下标志配置可以访问控制平面外部和内部端点的 IP 地址:

  • enable-private-endpoint:指定停用对外部端点的访问。如果您想允许从外部 IP 地址访问控制平面,请忽略此标志。在这种情况下,我们强烈建议您使用 enable-master-authorized-networks 标志控制对外部端点的访问权限。
  • enable-master-authorized-networks: 用于指定仅限您授权的 IP 地址范围访问外部端点。
  • master-authorized-networks:列出已获授权的网络的 CIDR 值。此列表采用英文逗号分隔。例如 8.8.8.8/32,8.8.8.0/24

    最佳实践

    使用 enable-master-authorized-networks 标志以限制对控制平面的访问。

  • enable-authorized-networks-on-private-endpoint:指定仅限您使用 enable-master-authorized-networks 标志授权的 IP 地址范围访问内部端点。

  • no-enable-google-cloud-access:拒绝从Google Cloud 外部 IP 地址访问控制平面。

  • enable-master-global-access:允许从其他Google Cloud 区域中的 IP 地址访问。

    您可以继续配置集群网络,方法是定义集群级别的节点或 Pod 隔离

您还可以创建集群并在集群级别定义属性,例如节点网络和子网、IP 栈类型和 IP 地址分配。如需了解详情,请参阅创建 VPC 原生集群

修改控制平面访问权限

如需更改集群的控制平面访问权限,请使用 gcloud CLI 或 Google Cloud 控制台。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

  3. 集群详情标签页的控制平面网络下,点击

  4. 修改控制平面网络对话框中,根据您的用例要求修改控制平面访问权限。

  5. 验证控制平面配置

gcloud

运行以下命令,并附加符合您使用情形的标志。您可以使用以下标志:

  • enable-dns-access:通过使用基于 DNS 的控制平面端点启用对控制平面的访问。
  • enable-ip-access:使用 IPv4 地址启用对控制平面的访问。如果您想同时停用控制平面的内部端点和外部端点,请省略此标志。
  • enable-private-endpoint:指定停用对外部端点的访问。如果您想允许从外部 IP 地址访问控制平面,请忽略此标志。在这种情况下,我们强烈建议您使用 enable-master-authorized-networks 标志控制对外部端点的访问权限。
  • enable-master-authorized-networks: 用于指定仅限您授权的 IP 地址范围访问外部端点。
  • master-authorized-networks:列出已获授权的网络的 CIDR 值。此列表采用英文逗号分隔。例如 8.8.8.8/32,8.8.8.0/24

    最佳实践

    使用 enable-master-authorized-networks 标志以限制对控制平面的访问。

  • enable-authorized-networks-on-private-endpoint:指定仅限您使用 enable-master-authorized-networks 标志授权的 IP 地址范围访问内部端点。

  • no-enable-google-cloud-access:拒绝从Google Cloud 外部 IP 地址访问控制平面。

  • enable-master-global-access:允许从其他Google Cloud 区域中的 IP 地址访问。

    gcloud container clusters update CLUSTER_NAME
    

    CLUSTER_NAME 替换为您的集群的名称。

验证控制平面配置

您可以使用 gcloud CLI 或Google Cloud 控制台查看集群的端点。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

  3. 集群详情标签页的控制平面下,您可以查看控制平面端点的以下特性:

    • DNS 端点包括集群基于 DNS 的端点的名称(如果您已启用此端点)。
    • 使用 IPv4 地址访问控制平面包括基于 IP 的端点的状态。如果已启用,您可以查看公共端点和专用端点的信息。
    • 如果其他区域的 Google IP 地址可以访问控制平面,使用控制平面的内部 IP 地址从任何区域访问的状态会显示为已启用
    • 如果您已启用授权网络,授权网络会显示可以访问控制平面的 CIDR 列表。
    • 如果只有已获授权的网络字段中的 CIDR 可以访问内部端点,则在控制平面的内部端点上强制使用授权网络会显示已启用状态。
    • 如果来自 Google Cloud的外部 IP 地址可以访问控制平面,则向授权网络添加 Google Cloud 外部 IP 地址 会显示已启用状态。

如需修改任何属性,请点击 使用 IPv4 地址访问控制平面,然后根据您的用例进行调整。

gcloud

如需验证控制平面配置,请运行以下命令:

gcloud container clusters describe CLUSTER_NAME

输出包含一个 controlPlaneEndpointsConfig 块,用于描述网络定义。您会看到类似如下所示的输出:

controlPlaneEndpointsConfig:
dnsEndpointConfig:
  allowExternalTraffic: true
  endpoint: gke-dc6d549babec45f49a431dc9ca926da159ca-518563762004.us-central1-c.autopush.gke.goog
ipEndpointsConfig:
  authorizedNetworksConfig:
    cidrBlocks:
    - cidrBlock: 8.8.8.8/32
    - cidrBlock: 8.8.8.0/24
    enabled: true
    gcpPublicCidrsAccessEnabled: false
    privateEndpointEnforcementEnabled: true
  enablePublicEndpoint: false
  enabled: true
  globalAccess: true
  privateEndpoint: 10.128.0.13

在此示例中,集群具有以下配置:

  • 已启用基于 DNS 和 IP 地址的端点。
  • 已启用授权网络,并定义了 CIDR 范围。系统会对内部 IP 地址强制执行这些已获授权的网络。
  • 系统会拒绝从 Google Cloud 外部 IP 地址访问控制平面。

控制平面访问权限配置示例

本部分详细介绍了以下网络隔离示例的配置。评估以下示例与您的用例的相似性:

  • 示例 1:可通过您定义的特定 IP 地址访问控制平面。这些 IP 地址可能来自其他 Google Cloud 区域或 Google 预留的 IP 地址。
  • 示例 2:任何外部 IP 地址都无法访问控制平面。
示例 1:可从特定 IP 地址访问控制平面

在本部分中,您将创建一个具有以下网络隔离配置的集群:

  • 控制平面已启用基于 DNS 的端点。
  • 除了默认启用的内部端点之外,控制平面还启用了外部端点。
  • 控制平面已定义授权网络,因此只有以下授权网络可以访问控制平面:

如需创建此集群,请使用 Google Cloud CLI 或 Google Cloud 控制台。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据您的要求配置集群。

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

  5. 控制平面访问权限下,配置控制平面端点:

    1. 选中使用 DNS 访问复选框。
    2. 选中使用 IPV4 地址进行访问复选框。
  6. 选择启用已授权网络

  7. 点击添加授权网络

  8. 输入网络的名称

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

  10. 点击完成

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

  12. 展开显示 IP 地址防火墙规则部分。

  13. 选择使用控制平面的内部 IP 地址从任何区域访问。任何 Google Cloud 区域中的内部 IP 地址都可以通过内部 IP 地址访问控制平面。

  14. 选择向授权网络添加 Google Cloud 外部 IP 地址。 Google Cloud 中的所有外部 IP 地址都可以访问控制平面。

您可以继续配置集群网络,方法是定义集群级节点或 Pod 隔离

gcloud

运行以下命令:

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

替换以下内容:

  • CLUSTER_NAME:GKE 集群的名称。
  • CIDR1,CIDR2,...:已获授权的网络的 CIDR 值的列表(以英文逗号分隔)。例如 8.8.8.8/32,8.8.8.0/24
示例 2:可通过内部 IP 地址访问控制平面

在本部分中,您将创建一个具有以下网络隔离配置的集群:

  • 控制平面已启用基于 DNS 的端点。
  • 控制平面已停用外部端点。
  • 控制平面已启用授权网络。
  • 允许从任何Google Cloud 区域通过内部 IP 地址访问控制平面。
  • Google Cloud 外部 IP 地址无权访问您的集群。

您可以使用 Google Cloud CLI 或 Google Cloud 控制台创建此集群。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 根据您的要求配置集群。

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

  5. 控制平面访问权限下,配置控制平面端点:

    1. 选中使用 DNS 访问复选框。
    2. 选中使用 IPV4 地址进行访问复选框。
  6. 展开显示 IP 地址防火墙规则部分。

  7. 取消选中使用控制平面的外部 IP 地址访问。任何外部 IP 地址都无法访问控制平面。

  8. 控制平面访问下,选择启用授权网络

  9. 选中使用控制平面的内部 IP 地址从任何区域访问复选框。任何 Google Cloud 区域中的内部 IP 地址都可以通过内部 IP 地址访问控制平面。

您可以通过定义集群级节点或 Pod 隔离来继续进行集群网络配置。

gcloud

运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-dns-access \
    --enable-ip-access \
    --enable-private-endpoint \
    --enable-master-authorized-networks \
    --master-authorized-networks CIDR1,CIDR2,... \
    --no-enable-google-cloud-access \
    --enable-master-global-access

替换以下内容:

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

配置集群网络

在本部分中,您将配置集群,使其包含具有内部(专用)或外部(公共)访问权限的节点。在 GKE 中,您可以根据所用集群的类型组合节点网络配置:

  • 标准集群:您可以创建或更新节点池,以便在同一集群中预配专用节点或公共节点。例如,如果您创建包含专用节点的节点池,则 GKE 会为其节点预配仅具有内部 IP 地址。GKE 不会修改现有节点池。您还可以在集群级别定义默认网络配置。只有当新节点池未定义任何网络配置时,GKE 才会应用此默认网络配置。
  • Autopilot 集群:您可以创建或更新集群,以定义所有工作负载的默认网络配置。GKE 会根据您的配置,在公共或专用节点上调度新工作负载和现有工作负载。您还可以明确定义单个工作负载的集群网络配置。

配置集群

在本部分中,您将在集群级别配置集群网络。如果您的节点池或工作负载未定义此配置,GKE 会考虑此配置。

如需定义集群级配置,请使用 Google Cloud CLI 或Google Cloud 控制台。

控制台

创建集群

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建,然后在“Standard”或“Autopilot”部分中,点击配置

  3. 根据您的要求配置集群。

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

  5. 集群网络部分,根据您的用例完成以下操作:

    1. 选择启用专用节点,以便预配仅具有内部 IP 地址(专用节点)的节点,从而阻止外部客户端访问这些节点。您可以随时更改这些设置。
    2. 取消选中启用专用节点,以便预配仅具有外部 IP 地址(公共)的节点,从而允许外部客户端访问这些节点。
  6. 高级网络选项部分中,配置其他 VPC 原生属性。如需了解详情,请参阅创建 VPC 原生集群

  7. 点击创建

更新现有集群

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

  3. 专用节点中,点击“默认的新节点池配置”标签页下的 修改专用节点

  4. 修改私有节点对话框中,执行以下任一操作:

    1. 选择启用专用节点,以便预配仅具有内部 IP 地址(专用节点)的节点,从而阻止外部客户端访问这些节点。您可以随时更改这些设置。
    2. 取消选中启用专用节点,以便预配仅具有外部 IP 地址(公共)的节点,从而允许外部客户端访问这些节点。
  5. 点击保存更改

gcloud

您可以使用以下任一标志来定义集群网络:

  • enable-private-nodes:仅使用内部 IP 地址预配节点(专用节点)。使用此标志时,请考虑以下条件:
    • 使用 enable-private-nodes 时,必须使用 enable-ip-alias 标志。
    • 创建专用子网时,master-ipv4-cidr 标志是可选的。如果您使用此标志,GKE 会创建一个新子网,该子网使用您在 master-ipv4-cidr 中定义的值,并使用新子网为控制平面提供内部 IP 地址。
  • no-enable-private-nodes:仅使用外部 IP 地址预配节点(公共节点)。

在 Autopilot 集群中,使用 enable-private-nodes 标志创建更新集群。

  • 如需创建集群,请使用以下命令:

    gcloud container clusters create-auto CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • 如需更新集群,请使用以下命令。

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    只有在所有节点池都重新调度后,集群更新才会生效。此过程可能需要几个小时才能完成。

在标准集群中,使用 enable-private-nodes 标志创建更新集群。

  • 如需创建集群,请使用以下命令:

    gcloud container clusters create CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    
  • 如需更新集群,请使用以下命令:

    gcloud container clusters update CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    集群更新仅会对新节点池生效。GKE 不会更新现有节点池上的此配置。

集群配置会被节点池或工作负载级别中的网络配置覆盖。

配置节点池或工作负载

如需在工作负载级别为 Autopilot 集群配置专用或公共节点,或为标准集群配置节点池,请使用 Google Cloud CLI 或Google Cloud 控制台。如果您未在工作负载或节点池级别定义网络配置,GKE 会在集群级别应用默认配置。

控制台

在标准集群中,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 集群详情页面上,点击要修改的集群的名称。

  3. 点击 添加节点池

  4. 根据您的用例配置启用专用节点复选框:

    1. 选择启用专用节点,以预配仅具有内部 IP 地址的节点(专用节点)。
    2. 取消选中启用专用节点,以便预配仅具有外部 IP 地址(公共)的节点,从而允许外部客户端访问这些节点。您可以随时更改此配置。
  5. 配置新节点池。

  6. 点击创建

如需详细了解节点池管理,请参阅添加和管理节点池

gcloud

  • 在 Autopilot 集群中,如需请求 GKE 在专用节点上调度 Pod,请将以下 nodeSelector 添加到您的 Pod 规范:

    cloud.google.com/private-node=true
    

    在 Pod nodeSelector 中使用 private-node=true 可在仅具有内部 IP 地址的节点(专用节点)上调度 Pod。

    GKE 会根据您的配置,在专用节点或公共节点上重新创建您的 Pod。为避免工作负载中断,请单独迁移每个工作负载并监控迁移过程。

  • 在标准集群中,如需通过现有节点池中的专用 IP 地址预配节点,请运行以下命令:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --enable-private-nodes \
        --enable-ip-alias
    

    替换以下内容:

    • NODE_POOL_NAME:您要修改的节点池的名称。
    • CLUSTER_NAME:现有集群的名称。

    使用以下任一标志定义节点池网络配置:

    • enable-private-nodes:仅使用内部 IP 地址预配节点(专用节点)。
    • no-enable-private-nodes:仅使用外部 IP 地址预配节点(公共节点)。

高级配置

以下部分介绍了配置集群网络隔离时您可能需要的高级配置。

使用 Cloud Shell 访问已停用外部端点的集群

如果集群控制平面的外部端点处于停用状态,您将无法通过 Cloud Shell 访问 GKE 控制平面。如果您想使用 Cloud Shell 访问集群,我们建议您启用基于 DNS 的端点

如需验证对集群的访问权限,请完成以下步骤:

  1. 如果您已启用基于 DNS 的端点,请运行以下命令以获取集群的凭据:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --dns-endpoint
    

    如果您已启用基于 IP 的端点,请运行以下命令以获取集群的凭据:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    PROJECT_ID 替换为您的项目 ID。

  2. 在 Cloud Shell 中使用 kubectl 访问集群:

    kubectl get nodes
    

    输出类似于以下内容:

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

如果基于 IP 的端点访问被停用,get-credentials 命令会自动使用基于 DNS 的端点。

针对特定用例添加防火墙规则

本部分介绍如何向集群添加防火墙规则。默认情况下,防火墙规则将集群控制平面限制为只能启动与端口 443 (HTTPS) 和 10250 (kubelet) 上的节点和 Pod 的 TCP 连接。对于某些 Kubernetes 功能,您可能需要添加防火墙规则以允许在其他端口上进行访问。请勿创建优先级高于自动创建的防火墙规则的防火墙规则或分层防火墙政策规则

需要额外防火墙规则的 Kubernetes 功能包括:

添加防火墙规则,允许流量从集群控制平面传输到以下所有端口:

  • 每个节点的指定端口 (hostPort)。
  • 在这些节点上运行的每个 Pod 的指定端口。
  • 在这些节点上运行的每个 Service 的指定端口。

如需了解防火墙规则,请参阅 Cloud Load Balancing 文档中的防火墙规则

如需在集群中添加防火墙规则,您需要记录集群控制平面的 CIDR 块和使用的目标。记录完成后,就可以创建规则了。

查看控制层面的 CIDR 块

为了添加防火墙规则,您需要使用集群控制层面的 CIDR 块。

控制台

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击集群名称。

网络下的详细信息标签页中,记下控制平面地址范围字段中的值。

gcloud

运行以下命令:

gcloud container clusters describe CLUSTER_NAME

CLUSTER_NAME 替换为您的集群的名称。

在命令输出中,记下 masterIpv4CidrBlock 字段中的值。

查看现有防火墙规则

您需要指定集群的现有防火墙规则针对的目标(在这种情况下,就是目标节点)。

控制台

  1. 前往 Google Cloud 控制台中的防火墙政策页面。

    前往“防火墙政策”

  2. VPC 防火墙规则过滤表中,输入 gke-CLUSTER_NAME

在结果中,记下目标字段中的值。

gcloud

运行以下命令:

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

在命令输出中,记下目标字段中的值。

如需查看共享 VPC 的防火墙规则,请在命令中添加 --project HOST_PROJECT_ID 标志。

添加防火墙规则

控制台

  1. 前往 Google Cloud 控制台中的防火墙政策页面。

    前往“防火墙政策”

  2. 点击 创建防火墙规则

  3. 对于名称,输入防火墙规则的名称。

  4. 网络列表中,选择相关网络。

  5. 流量方向中,点击入站

  6. 对匹配项执行的操作中,点击允许

  7. 目标列表中,选择指定的目标标记

  8. 目标标记部分,输入您之前记下的目标值。

  9. 来源过滤条件列表中,选择 IPv4 范围

  10. 来源 IPv4 范围部分,输入集群控制平面的 CIDR 地址块。

  11. 协议和端口中,点击指定的协议和端口,选中相关协议(tcpudp),然后在协议字段中输入端口号。

  12. 点击创建

gcloud

运行以下命令:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

请替换以下内容:

  • FIREWALL_RULE_NAME:您为防火墙规则选择的名称。
  • CONTROL_PLANE_RANGE:您之前收集的集群控制平面 IP 地址范围 (masterIpv4CidrBlock)。
  • PROTOCOL:PORT:端口及其协议(tcpudp)。
  • TARGET:您先前收集的目标 (Targets) 值。

如需为共享 VPC 添加防火墙规则,请在命令中添加以下标志:

--project HOST_PROJECT_ID
--network NETWORK_ID

授予专用节点出站互联网访问权限

如需为专用节点提供出站互联网访问权限(例如从外部注册表拉取映像),请使用 Cloud NAT 创建并配置一个 Cloud Router 路由器。Cloud NAT 允许专用节点通过互联网建立出站连接,以发送和接收数据包。

Cloud Router 路由器允许区域内的所有节点将 Cloud NAT 用于所有主要 IP 范围和别名 IP 范围。此外,它还会为 NAT 网关自动分配外部 IP 地址。

有关创建和配置 Cloud Router 路由器的说明,请参阅 Cloud NAT 文档中的创建使用 Cloud Router 路由器的 Cloud NAT 配置

部署 Windows Server 容器应用

如需了解如何将 Windows Server 容器应用部署到包含专用节点的集群,请参阅 Windows 节点池文档

后续步骤