使用标记管理 GKE 资源


本页面介绍了如何使用标记来管理 Google Kubernetes Engine (GKE) 集群,以及如何有条件地将 Identity and Access Management 政策应用于节点。

概览

标记是键值对,可让您在组织级或项目级为 Google Cloud 资源添加注释和进行管理。您可以使用标记来整理资源并按条件应用政策(例如防火墙或 IAM 政策)。标记可支持 IAM 访问权限控制,让您能够定义谁可以附加、创建、更新或删除标记。

GKE 中标记的用例

在如下情况中,您可以在 GKE 中使用标记:

  • 有条件地将网络防火墙政策应用于特定节点。例如,拒绝从公共互联网到预演或测试环境中集群的所有节点的入站流量。如需了解相关说明,请参阅在 GKE 中有选择性地强制执行网络防火墙政策
  • 根据标记有条件地授予 IAM 角色。 例如,自动授予承包商访问通常仅供全职员工访问的特定环境的权限。有关说明,请参阅本文档的其余部分。
  • 根据在项目级或组织级应用的标记来审核和分析结算信息。

运作方式

如需专门强制执行网络防火墙政策,您可以创建一个标记并明确指定该标记供防火墙使用。对于其他所有用途,您可以在未设置防火墙标识的情况下创建标记。

创建标记后,将标记作为键值对附加到 GKE 资源。对于网络防火墙政策,您可以使用 GKE API,而对于所有其他用途,您可以使用 Tags API。

对于每个键,您可以将一个值附加到资源。例如,如果您已将 env:dev 附加到 GKE 集群,则不能同时附加 env:prodenv:test。对于每个资源,您最多可以向其附加 50 个非防火墙标记和最多 5 个防火墙标记。

GKE 中的资源注释方法

在 GKE 中,您可以通过多种方法为资源添加注解,如下表所示:

注释类型 说明 示例
标记(非防火墙)
  • 通过使用 Tags API 应用于集群资源
  • 整理资源以跟踪使用情况和结算信息
  • 有条件地应用 IAM 政策
  • 通过 IAM 控制对特定标记的访问权限

如需了解更多信息,请参阅标记概览

有条件地授予 IAM 角色,以控制对具有特定标记的资源的访问权限
标记(防火墙)
  • 通过 GKE API 应用于集群或节点池
  • 有条件地应用 Cloud 新一代防火墙网络防火墙政策。
  • 通过 IAM 控制对特定标记的访问权限
  • GKE 会将键值对附加到底层 Compute Engine 虚拟机。

如需了解更多信息,请参阅在 GKE 中有选择性地应用网络防火墙政策

自动拒绝从公共互联网到所有预演或测试环境的入站流量
网络标记
  • 通过 GKE API 应用于集群或节点池
  • 没有 IAM 访问权限控制的简单字符串
  • 用于有条件地应用 VPC 防火墙规则
  • GKE 会将键值对附加到底层 Compute Engine 虚拟机

如需了解更多信息,请参阅使用网络标记将防火墙规则应用于节点

自动拒绝从公共互联网到所有预演或测试环境的入站流量
GKE 集群标签
  • 通过 GKE API 应用于集群或节点池
  • 整理资源以跟踪使用情况和结算信息

如需了解更多信息,请参阅集群标签

区分组织中特定成本中心或团队拥有的集群。
Kubernetes 标签
  • 应用于 Kubernetes API 对象
  • 将集群组件与资源相互关联,并管理资源生命周期。

如需了解更多信息,请参阅 Kubernetes 标签和选择器

要求在具有特定标签的节点上调度工作负载。

须知事项

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

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

    • roles/resourcemanager.tagAdmin
    • roles/resourcemanager.tagUser

    如需了解这些角色授予的权限,请参阅所需的权限

  • 确保您拥有 GKE 集群并且它正在运行。

创建标记键和标记值

在将标记附加到 GKE 资源之前,您需要创建标记并配置其值。如需创建标记键和值,请参阅创建标记添加标记值

将标记附加到集群

如果您拥有正确的权限,则可以使用 Google Cloud CLI、Google Cloud 控制台或 Tags API 将标记附加到现有集群。

gcloud

如需创建标记绑定以将标记附加到集群,请运行以下命令:

gcloud alpha resource-manager tags bindings create \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

请替换以下内容:

  • TAG_VALUE_ID:要附加的标记值的永久 ID 或命名空间名称。例如 tagValues/4567890123。如需详细了解标记标识符,请参阅标记定义和标识符
  • CLUSTER_LOCATION:对于区域级集群,请指定计算区域,例如 us-central1。对于可用区级集群,请指定计算可用区,例如 us-central1-a
  • RESOURCE_ID:集群的完整资源名称,例如 //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME

    在资源 ID 中:

    • PROJECT_ID:您的 Google Cloud 项目 ID。
    • CLUSTER_NAME:您的集群的名称。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 元数据部分的标记旁边,点击 修改标记

  4. 如果您的组织未显示在标记面板中,请点击选择范围。选择您的组织,然后点击打开

  5. 标记面板中,选择添加标记

  6. 从列表中选择要附加的标记的键。您可以通过输入关键字来过滤列表。

  7. 从列表中选择要附加的标记的值。您可以通过输入关键字来过滤列表。

  8. 点击保存

  9. 确认对话框中,点击确认以附加标记。

    系统会显示一条通知以确认您的标记已更新。

API

要将标记附加到资源,必须首先创建包含标记值和资源永久 ID 的标记绑定的 JSON 表示法。如需详细了解标记绑定的格式,请参阅 TagBinding 参考文档

使用带有您的集群所在的区域或地区端点的 tagBindings.create 方法。

POST https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

LOCATION 替换为您的集群所在的区域或地区,例如 us-central1

JSON 请求正文:

{
  "parent": "RESOURCE_ID",
  "tagValue": "TAG_VALUE_ID"
}

请替换以下内容:

  • RESOURCE_ID:集群的完整资源名称,例如 //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME

    在资源 ID 中:

    • PROJECT_ID:您的 Google Cloud 项目 ID。
    • CLUSTER_NAME:您的集群的名称。
  • TAG_VALUE_ID:要附加的标记值的永久 ID 或命名空间名称。例如 tagValues/4567890123。如需详细了解标记标识符,请参阅标记定义和标识符

输出类似于以下内容:

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding",
    "name": "tagBindings///container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME/tagValues/TAG_VALUE_ID",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
}

列出附加到集群的标记

您可以使用 gcloud CLI、Google Cloud 控制台或 Tags API 列出附加到集群的标记。

gcloud

如需获取附加到集群的标记绑定列表,请运行以下命令:

gcloud alpha resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

替换以下内容:

  • CLUSTER_LOCATION:对于区域级集群,请指定计算区域,例如 us-central1。对于可用区级集群,请指定计算可用区,例如 us-central1-a

  • RESOURCE_ID:集群的完整资源名称,例如 //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME

    在资源 ID 中:

    • PROJECT_ID:您的 Google Cloud 项目 ID。

    • CLUSTER_NAME:您的集群的名称。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要查看的集群的名称。

  3. 元数据部分的标记旁边,寻找当前附加的标记值。

API

如需获取集群的标记绑定列表,请使用带有您的集群所在的区域或可用区端点的 tagBindings.list 方法。

GET https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

JSON 请求正文:

{
  "parent": RESOURCE_ID,
}

请替换以下内容:

  • RESOURCE_ID:集群的完整资源名称,例如 //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME

    在资源 ID 中:

    • PROJECT_ID:您的 Google Cloud 项目 ID。
    • CLUSTER_NAME:您的集群的名称。

输出内容类似如下:

"tagBindings": [
  {
    "name": "tagBindings/%2F%2Fcontainer.googleapis.com%2Fprojects%2Ftags-bugbash-project%2Flocations%2Fus-central1%2Fclusters%2Ftestcluster/tagValues/758072120217",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
]

从集群分离标记

您可以使用 gcloud CLI、Google Cloud 控制台或 Tags API 删除附加到集群的标记绑定资源,以从集群分离标记。如果您需要删除标记,必须先将标记从所有附加的资源分离。

gcloud

如需分离附加到集群的标记绑定,请运行以下命令:

gcloud alpha resource-manager tags bindings delete \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

请替换以下内容:

  • TAG_VALUE_ID:要分离的标记值的永久性 ID 或命名空间名称。例如 tagValues/4567890123。 如需详细了解标记标识符,请参阅标记定义和标识符

  • CLUSTER_LOCATION:对于区域级集群,请指定计算区域,例如 us-central1。对于可用区级集群,请指定计算可用区,例如 us-central1-a

  • RESOURCE_ID:集群的完整资源名称,例如 //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME

    在资源 ID 中:

    • PROJECT_ID:您的 Google Cloud 项目 ID。

    • CLUSTER_NAME:您的集群的名称。

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 元数据部分的标记旁边,点击 修改标记

  4. 标记面板中,点击要分离的标记旁边的 删除项

  5. 点击保存

  6. 确认对话框中,点击确认以分离标记。

    系统会显示一条通知以确认您的标记已更新。

API

如需删除集群的标记绑定,请使用带有您的集群所在的区域或地区端点的 tagBindings.delete 方法。

DELETE https://LOCATION-cloudresourcemanager.googleapis.com/v3/TAG_BINDING_NAME

TAG_BINDING_NAME 替换为您要分离的 tagBinding 对象的完整资源名称。例如 tagBindings/container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/tagValues/TAG_VALUE_ID

删除标记键和标记值

在删除标记键和值之前,请确保标记已从所有资源分离。然后,请参阅删除标记,以删除相关键和值。

Identity and Access Management 条件和标记

您可以使用标记和 IAM 条件来有条件地向项目层次结构中的用户授予角色绑定。在您更改或删除附加到集群的标记时,如果应用了具有条件角色绑定的 IAM 政策,则 GKE 可以移除用户对该集群的访问权限。

系统会在项目级(而不是在个别集群级)检查列出和创建 GKE 集群所需的授权。如果您将条件 IAM 角色绑定与集群级标记结合使用来限制对特定集群的访问,则用户在项目中尝试列出或创建集群时可能会遇到错误。为避免这些错误,可以将标记附加到父项目,并使用条件角色绑定来授予列出或创建权限。如需了解角色和权限,请参阅 IAM 角色参考文档

如需详细了解 IAM 中的条件访问授权,请参阅 Identity and Access Management 条件和标记

后续步骤