使用网络标记将防火墙规则应用于节点


本页面介绍如何将网络标记动态应用于 Google Kubernetes Engine (GKE) 集群中的节点,而不中断正在运行的工作负载。

网络标记简介

网络标记是 Compute Engine 虚拟机上的元数据,可让您将防火墙规则和路由应用于特定虚拟机实例。在 GKE 中,您可以使用网络标记将 VPC 防火墙规则或路由应用于集群中的节点。

您可以使用 GKE API 在 GKE 集群上应用和更新网络标记,而不会中断正在运行的工作负载。您指定的网络标记也会应用于 GKE 自动预配的任何新节点。

使用标记取代网络标记

网络标记是不受 Identity and Access Management 访问权限控制约束的简单字符串。有权访问 GKE API 中节点的任何人都可以向这些节点添加网络标记。

如果您使用的是 GKE 1.28 版或更高版本,我们建议您使用具有防火墙标识的标记,以强制执行区域级或全球级网络防火墙政策,从而改善 VPC 防火墙规则的功能。

标记是附加到 Compute Engine 虚拟机的键值对。您可以使用 IAM 来控制谁可以与特定标记进行交互。

应用网络标记的命令行选项

下表介绍了您可以使用 Google Cloud CLI 指定的标志,以将网络标记应用于您的集群及其使用场景。

标志 操作模式 层级 说明
--autoprovisioning-network-tags
  • Autopilot
  • 标准
集群

将指定的网络标记应用于所有 Autopilot 节点和所有自动预配的标准节点池。

--tags
  • 标准
节点池

将网络标记手动应用于特定标准节点池。

限制

使用 --autoprovisioning-network-tags 可防止您使用 --tags 更新自动预配的 Standard 节点池的网络标记。

我们建议您将 --autoprovisioning-network-tags 用于自动预配的节点池,并将 --tags 仅用于手动创建的节点池。

准备工作

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

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

将网络标记添加到新集群

您可以在创建新集群时添加网络标记。

将网络标记添加到新 Autopilot 集群

运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-network-tags=TAG1,TAG2,...

替换以下内容:

  • CLUSTER_NAME:新 Autopilot 集群的名称。
  • LOCATION:集群的 Compute Engine 位置
  • TAG1,TAG2, ...:要应用的网络标记的英文逗号分隔列表。

将网络标记添加到新 Standard 集群

对于标准层级,您还可以指定专门供节点自动预配功能使用的网络标记。

将网络标记应用于默认节点池

运行以下命令以创建新的标准集群并将网络标记应用于默认节点池:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --tags=NETWORK_TAG1,NETWORK_TAG2,...

替换以下内容:

  • CLUSTER_NAME:新标准集群的名称。
  • COMPUTE_REGION:集群的 Compute Engine 位置
  • NETWORK_TAG1,NETWORK_TAG2, ...:要应用的网络标记的英文逗号分隔列表。

将网络标记应用于自动预配的节点池

您可以将网络标记自动应用于节点自动预配功能创建的所有节点池。

运行以下命令:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --enable-autoprovisioning \
    --autoprovisioning-network-tags=TAG1,TAG2,...

TAG1,TAG2,... 替换为您要应用于所有自动预配节点池的网络标记的英文逗号分隔列表。

更新现有集群上的网络标记

您可以更新现有集群上的网络标记。

更新现有 Autopilot 集群上的网络标记

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-network-tags=TAG1,TAG2,...

更新现有 Standard 集群上的网络标记

运行以下命令以更新特定标准节点池上的网络标记。如果使用了 --autoprovisioning-network-tags,则无法使用此命令更新自动预配的节点池。

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --tags=NETWORK_TAG1,NETWORK_TAG2,...

如果为集群设置了 --autoprovisioning-network-tags,此命令会返回错误。

更新自动预配节点池的网络标记

您可以更新节点自动预配功能应用于新的和现有自动预配节点池的网络标记。

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-network-tags=TAG1,TAG2,...

将网络标记添加到新的标准节点池

如需在标准集群中使用特定网络标记创建新节点池,请运行以下命令:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --tags=NETWORK_TAG1,NETWORK_TAG2,...

NODE_POOL_NAME 替换为新节点池的名称。

查看现有网络标记

本部分介绍如何查看现有网络标记。

在 Autopilot 中查看现有网络标记

运行以下命令:

gcloud container clusters describe CLUSTER_NAME \
    --flatten=nodePoolAutoConfig.networkTags

如果集群有网络标记,则输出类似于以下内容:

---
tags:
- example-tag

在 Standard 中查看现有网络标记

您可以在自动预配的节点池或您创建的节点池中查看网络标记。

查看自动预配节点池中的网络标记

运行以下命令:

gcloud container clusters describe CLUSTER_NAME \
    --flatten=nodePoolAutoConfig.networkTags

如果集群有网络标记,则输出类似于以下内容:

---
tags:
- example-tag

在没有节点自动预配功能的节点池中查看网络标记

如需查看使用 --tags 标志应用标记的特定标准节点池的网络标记,请运行以下命令:

gcloud container node-pools describe NODE_POOL_NAME\
    --cluster=CLUSTER_NAME \
    --format='value(config.tags)'

NODE_POOL_NAME 替换为节点池的名称。

如果节点池具有标记,则输出类似于以下内容:

example-tag

移除网络标记

您可以从 GKE 中移除网络标记。

从 Autopilot 集群中移除网络标记

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-network-tags=""

将网络标记从 Standard 集群和节点池中移除

您可以将标记从所有自动预配的节点池或特定节点池中移除。

将网络标记从自动预配的节点池中移除

如需将网络标记从所有自动预配的节点池中移除,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-network-tags=""

此命令还恢复了使用 --tags 选项为自动预配节点池手动指定网络标记的功能。

将网络标记从特定节点池中移除

如需将网络标记从特定节点池中移除,请运行以下命令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --tags=""

后续步骤