本页面介绍了如何使用标记来管理 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:prod
或 env:test
。对于每个资源,您最多可以向其附加 50 个非防火墙标记和最多 5 个防火墙标记。
GKE 中的资源注释方法
在 GKE 中,您可以通过多种方法为资源添加注解,如下表所示:
注释类型 | 说明 | 示例 |
---|---|---|
标记(非防火墙) |
如需了解更多信息,请参阅标记概览。 |
有条件地授予 IAM 角色,以控制对具有特定标记的资源的访问权限 |
标记(防火墙) |
如需了解更多信息,请参阅在 GKE 中有选择性地应用网络防火墙政策。 |
自动拒绝从公共互联网到所有预演或测试环境的入站流量 |
网络标记 |
如需了解更多信息,请参阅使用网络标记将防火墙规则应用于节点。 |
自动拒绝从公共互联网到所有预演或测试环境的入站流量 |
GKE 集群标签 |
如需了解更多信息,请参阅集群标签。 |
区分组织中特定成本中心或团队拥有的集群。 |
Kubernetes 标签 |
如需了解更多信息,请参阅 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
:您的集群的名称。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
在元数据部分的标记旁边,点击
修改标记。如果您的组织未显示在标记面板中,请点击选择范围。选择您的组织,然后点击打开。
在标记面板中,选择添加标记。
从列表中选择要附加的标记的键。您可以通过输入关键字来过滤列表。
从列表中选择要附加的标记的值。您可以通过输入关键字来过滤列表。
点击保存。
在确认对话框中,点击确认以附加标记。
系统会显示一条通知以确认您的标记已更新。
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
替换以下内容:
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要查看的集群的名称。
在元数据部分的标记旁边,寻找当前附加的标记值。
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
:您的集群的名称。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
在元数据部分的标记旁边,点击
修改标记。在标记面板中,点击要分离的标记旁边的
删除项。点击保存。
在确认对话框中,点击确认以分离标记。
系统会显示一条通知以确认您的标记已更新。
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 条件和标记。