Administrar recursos de GKE mediante etiquetas


En esta página, se muestra cómo usar etiquetas para administrar los clústeres de Google Kubernetes Engine (GKE) y aplicar de forma condicional las políticas de Identity and Access Management a los nodos.

Descripción general

Las etiquetas son pares clave-valor que te permiten anotar y administrar tus recursos de Google Cloud a nivel de organización o de proyecto. Puedes usar etiquetas para organizar los recursos y aplicar de forma condicional políticas como firewalls o políticas de IAM. Las etiquetas admiten el control de acceso de IAM, que te permite definir quién puede adjuntar, crear, actualizar o borrar etiquetas.

Casos de uso para etiquetas en GKE

Puedes usar etiquetas en GKE para situaciones como las siguientes:

  • Aplicar condicionalmente políticas de firewall de red a nodos específicos. Por ejemplo, denegar el tráfico de entrada de la Internet pública a todos los nodos de un clúster en entornos de etapa de pruebas o de prueba. Para obtener instrucciones, consulta Aplica de forma selectiva las políticas de firewall de red en GKE.
  • Otorga roles de IAM de forma condicional en función de las etiquetas. Por ejemplo, otorgar automáticamente a los contratistas acceso a entornos específicos que, por lo general, solo estarían disponibles para empleados de tiempo completo. Para obtener instrucciones, consulta el resto de este documento.
  • Audita y analiza los datos de facturación según las etiquetas aplicadas a nivel de proyecto o de la organización.

Cómo funciona

Para la aplicación de políticas de firewall de red específicamente, debes crear una etiqueta y designarla de forma explícita para el uso del firewall. Para todos los demás fines, puedes crear una etiqueta sin configurar una designación de firewall.

Después de crear la etiqueta, debes adjuntarla a tus recursos de GKE como un par clave-valor. Para las políticas de firewall de red, usa la API de GKE, mientras que para todos los demás fines, usa la API de etiquetas.

Para cada clave, puedes adjuntar un valor a un recurso. Por ejemplo, si adjuntaste env:dev a un clúster de GKE, no puedes adjuntar también env:prod o env:test. Puedes adjuntar hasta 50 etiquetas que no sean de firewall y hasta cinco etiquetas de firewall a cada recurso.

Métodos de anotación de recursos en GKE

En GKE, existen varios métodos para anotar tus recursos, como se describe en la siguiente tabla:

Tipo de anotación Descripción Ejemplo
Etiquetas (no son de firewall)
  • Aplicar al recurso del clúster mediante la API de etiquetas
  • Organizar los recursos para realizar un seguimiento del uso y la facturación.
  • Aplicar condicionalmente políticas de IAM
  • Controlar el acceso a etiquetas específicas con IAM

Para obtener más información, consulta Descripción general de etiquetas.

Otorgar roles de IAM de forma condicional para controlar el acceso a los recursos que tienen etiquetas específicas.
Etiquetas (firewall)
  • Aplicar al clúster o al grupo de nodos con la API de GKE
  • Aplicar condicionalmente las políticas de firewall de red de Cloud Next Generation Firewall.
  • Controlar el acceso a etiquetas específicas con IAM
  • GKE adjunta los pares clave-valor a las VMs de Compute Engine subyacentes.

Para obtener más información, consulta Aplica de forma selectiva las políticas de firewall de red en GKE.

Deniega automáticamente el tráfico de entrada desde la Internet pública a todos los entornos de etapa de pruebas o de prueba
Etiquetas de red
  • Aplicar al clúster o al grupo de nodos con la API de GKE
  • Cadenas simples sin control de acceso de IAM
  • Se usa para aplicar reglas de firewall de VPC de forma condicional
  • GKE adjunta los pares clave-valor en las VMs subyacentes de Compute Engine.

Si deseas obtener más información, consulta Usa etiquetas de red para aplicar reglas de firewall a los nodos.

Deniega automáticamente el tráfico de entrada desde la Internet pública a todos los entornos de etapa de pruebas o de prueba
Etiquetas de clúster de GKE
  • Aplicar al clúster o al grupo de nodos con la API de GKE
  • Organizar los recursos para realizar un seguimiento del uso y la facturación.

Para obtener más información, consulta Etiquetas de clúster.

Diferenciar entre clústeres que pertenecen a equipos o centros de costos específicos de tu organización.
Etiquetas de Kubernetes
  • Aplicar a objetos de la API de Kubernetes
  • Asociar los componentes y los recursos de los clústeres entre sí y administrar los ciclos de vida de los recursos.

Para obtener más información, consulta Etiquetas y selectores de Kubernetes.

Requerir que las cargas de trabajo estén programadas en nodos con etiquetas específicas.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Adjunta etiquetas a un clúster

Puedes adjuntar etiquetas a un clúster existente si tienes los permisos correctos a través de Google Cloud CLI, la consola de Google Cloud, la API de etiquetas o Terraform.

gcloud

Antes de poder adjuntar una etiqueta a tus recursos de GKE a través de gcloud CLI, debes crear la etiqueta y configurar sus valores. Para crear valores y claves de etiqueta, consulta Crea una etiqueta y Agrega valores de etiqueta.

Para crear una vinculación de etiqueta a fin de adjuntar una etiqueta a un clúster, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • TAG_VALUE_ID: el ID permanente o el nombre con espacio de nombres del valor de la etiqueta que se adjuntará. Por ejemplo, tagValues/4567890123 Para obtener más detalles sobre los identificadores de etiquetas, consulta Identificadores y definiciones de etiquetas.
  • CLUSTER_LOCATION: Para los clústeres regionales, especifica la región de procesamiento, como us-central1. Para los clústeres zonales, especifica la zona de procesamiento, como us-central1-a.
  • RESOURCE_ID: el nombre completo del recurso de tu clúster, como //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    En el ID de recurso:

    • PROJECT_ID es el ID del proyecto de Google Cloud.
    • CLUSTER_NAME: Es el nombre del clúster.

Console

Antes de poder adjuntar una etiqueta a tus recursos de GKE a través de la consola de Google Cloud, debes crear la etiqueta y configurar sus valores. Para crear valores y claves de etiqueta, consulta Crea una etiqueta y Agrega valores de etiqueta.

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la sección Metadatos, junto a Etiquetas, haz clic en Editar etiquetas.

  4. Si tu organización no aparece en el panel Etiquetas, haz clic en Seleccionar alcance. Selecciona tu organización y haz clic en Abrir.

  5. En el panel Etiquetas, selecciona Agregar etiqueta.

  6. Selecciona la clave para la etiqueta que deseas adjuntar de la lista. Para filtrar la lista, escribe palabras clave.

  7. Selecciona el valor de la etiqueta que deseas adjuntar de la lista. Para filtrar la lista, escribe palabras clave.

  8. Haz clic en Guardar.

  9. En el cuadro de diálogo Confirmar, haz clic en Confirmar para adjuntar la etiqueta.

    Una notificación confirma que se actualizaron tus etiquetas.

API

Para adjuntar una etiqueta a un recurso, primero debes crear una representación JSON de una vinculación de etiqueta que incluya los ID permanentes del valor de la etiqueta y el recurso. Para obtener más información sobre el formato de una vinculación de etiqueta, consulta la Referencia de TagBinding.

Usa el método tagBindings.create con el extremo regional o zonal en el que se encuentra tu clúster.

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

Reemplaza LOCATION por la región o zona en la que se encuentra el clúster, como us-central1.

Cuerpo de la solicitud JSON:

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

Reemplaza lo siguiente:

  • RESOURCE_ID: el nombre completo del recurso de tu clúster, como //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    En el ID de recurso:

    • PROJECT_ID es el ID del proyecto de Google Cloud.
    • CLUSTER_NAME: Es el nombre del clúster.
  • TAG_VALUE_ID: el ID permanente o el nombre con espacio de nombres del valor de la etiqueta que se adjuntará. Por ejemplo, tagValues/4567890123 Para obtener más detalles sobre los identificadores de etiquetas, consulta Identificadores y definiciones de etiquetas.

El resultado es similar al siguiente:

{
  "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"
  }
}

Terraform

Para crear una etiqueta, configurar sus valores y adjuntar una etiqueta a un recurso a través de Terraform, consulta el siguiente ejemplo:

resource "google_container_cluster" "default" {
  name     = "gke-autopilot-tag"
  location = "us-central1"

  enable_autopilot = true

  # Set `deletion_protection` to `true` will ensure that one cannot
  # accidentally delete this instance by use of Terraform.
  deletion_protection = false
}

data "google_project" "default" {}

resource "google_tags_tag_key" "default" {
  parent      = "projects/${data.google_project.default.project_id}"
  short_name  = "env"
  description = "Environment tag key"
}

resource "google_tags_tag_value" "default" {
  parent      = "tagKeys/${google_tags_tag_key.default.name}"
  short_name  = "dev"
  description = "Development environment tag value."
}

resource "google_tags_location_tag_binding" "default" {
  parent    = "//container.googleapis.com/${google_container_cluster.default.id}"
  location  = google_container_cluster.default.location
  tag_value = "tagValues/${google_tags_tag_value.default.name}"
}

Si deseas obtener más información sobre el uso de Terraform, consulta Compatibilidad con Terraform para GKE.

Enumerar las etiquetas adjuntas a un clúster

Puedes enumerar las etiquetas adjuntas a un clúster mediante la gcloud CLI, la consola de Google Cloud o la API de etiquetas.

gcloud

Para obtener una lista de vinculaciones de etiquetas adjuntas a un clúster, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • CLUSTER_LOCATION: Para los clústeres regionales, especifica la región de procesamiento, como us-central1. Para los clústeres zonales, especifica la zona de procesamiento, como us-central1-a.

  • RESOURCE_ID: el nombre completo del recurso de tu clúster, como //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    En el ID de recurso:

    • PROJECT_ID es el ID del proyecto de Google Cloud.

    • CLUSTER_NAME: Es el nombre del clúster.

Consola

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas ver.

  3. En la sección Metadatos, junto a Etiquetas, busca los valores de etiqueta adjuntos actualmente.

API

Si deseas obtener una lista de vinculaciones de etiquetas de un clúster, usa el método tagBindings.list con el extremo regional o zonal en el que se encuentra tu clúster.

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

Cuerpo de la solicitud JSON:

{
  "parent": RESOURCE_ID,
}

Reemplaza lo siguiente:

  • RESOURCE_ID: el nombre completo del recurso de tu clúster, como //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    En el ID de recurso:

    • PROJECT_ID es el ID del proyecto de Google Cloud.
    • CLUSTER_NAME: Es el nombre del clúster.

El resultado es similar a este:

"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"
  }
]

Desconecta etiquetas de un clúster

Puedes desconectar una etiqueta de un clúster si borras el recurso de vinculación de etiqueta adjunto al clúster mediante la gcloud CLI, la consola de Google Cloud o la API de etiquetas. Si necesitas borrar una etiqueta, primero debes desconectarte de todos los recursos adjuntos.

gcloud

Para desconectar una vinculación de etiqueta adjunta a un clúster, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • TAG_VALUE_ID: el ID permanente o el nombre con espacio de nombres del valor de la etiqueta que se desconectará. Por ejemplo, tagValues/4567890123 Para obtener más detalles sobre los identificadores de etiquetas, consulta Identificadores y definiciones de etiquetas.

  • CLUSTER_LOCATION: Para los clústeres regionales, especifica la región de procesamiento, como us-central1. Para los clústeres zonales, especifica la zona de procesamiento, como us-central1-a.

  • RESOURCE_ID: el nombre completo del recurso de tu clúster, como //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    En el ID de recurso:

    • PROJECT_ID es el ID del proyecto de Google Cloud.

    • CLUSTER_NAME: Es el nombre del clúster.

Consola

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la sección Metadatos, junto a Etiquetas, haz clic en Editar etiquetas.

  4. En el panel Etiquetas, junto a la etiqueta que deseas desconectar, haz clic en Borrar elemento.

  5. Haz clic en Guardar.

  6. En el cuadro de diálogo Confirmar, haz clic en Confirmar para desconectar la etiqueta.

    Una notificación confirma que se actualizaron tus etiquetas.

API

Para borrar las vinculaciones de etiquetas de un clúster, usa el método tagBindings.delete con el extremo regional o zonal en el que se encuentra tu clúster.

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

Reemplaza TAG_BINDING_NAME por el nombre completo de recurso del objeto tagBinding que deseas desconectar. Por ejemplo, tagBindings/container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/tagValues/TAG_VALUE_ID

Borra claves de etiquetas y valores de etiquetas

Antes de borrar las claves y los valores de las etiquetas, asegúrate de que estén desconectadas de todos los recursos. Luego, consulta Borra etiquetas para borrar las claves y los valores.

Etiquetas y condiciones de Identity and Access Management

Puedes usar etiquetas y condiciones de IAM para otorgar de forma condicional vinculaciones de roles a los usuarios en la jerarquía de tu proyecto. Cuando cambias o borras la etiqueta adjunta a un clúster, GKE puede quitar el acceso de usuarios a ese clúster si se aplicó una política de permisos de IAM con vinculaciones de roles condicionales.

La autorización para enumerar y crear clústeres de GKE se verifica a nivel de proyecto, no a nivel de clúster individual. Si usas vinculaciones de roles de IAM condicionales con etiquetas a nivel de clúster para restringir el acceso a clústeres específicos, esos usuarios pueden experimentar errores cuando intentan enumerar o crear clústeres en el proyecto. Para evitar estos errores, adjunta una etiqueta al proyecto superior y usa una vinculación de rol condicional para otorgar la lista o crear acceso. Para obtener información sobre los roles y los permisos, consulta la referencia de roles de IAM.

Para obtener más información sobre los otorgamientos de acceso condicional en IAM, consulta Etiquetas y condiciones de Identity and Access Management.

¿Qué sigue?