Administrar recursos de GKE mediante etiquetas

En este documento, 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.

Acerca de las etiquetas

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

Casos de uso de las 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 los 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 del proyecto o 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, la adjuntas a tus recursos de GKE como un par clave-valor. La forma en que adjuntas la etiqueta depende del recurso de destino:

  • Recursos del clúster: Para adjuntar etiquetas que no son de firewall directamente a un recurso del clúster de GKE, usa la API de Tags. Puedes adjuntar hasta 50 etiquetas que no sean de firewall a cada recurso del clúster. Las etiquetas adjuntas directamente a un recurso de clúster no se propagan a las VMs subyacentes de Compute Engine.
  • Nodos y grupos de nodos: Para adjuntar etiquetas a grupos de nodos de GKE (y propagarlas automáticamente a las VMs subyacentes de Compute Engine), usa la API de GKE. Puedes adjuntar etiquetas de firewall y etiquetas que no sean de firewall a los grupos de nodos con la API de GKE, hasta un máximo de cinco etiquetas en total (combinadas de firewall y que no sean de firewall) por grupo de nodos.

Para cada clave, puedes adjuntar un valor a un recurso. Por ejemplo, si adjuntaste env:dev a un clúster o grupo de nodos de GKE, no puedes adjuntar también env:prod o env:test.

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 (sin firewall)
  • Aplicar directamente a un recurso del clúster con la API de Tags (hasta 50 etiquetas que no sean de firewall)
  • Aplicar a los grupos de nodos y sus VMs de Compute Engine subyacentes con la API de GKE (hasta cinco etiquetas en total por grupo de nodos, combinadas con etiquetas de firewall)
  • 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 las 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 (hasta cinco etiquetas en total por grupo de nodos, combinadas con etiquetas que no son de firewall)
  • 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 de 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 de forma condicional reglas de firewall de VPC.
  • GKE adjunta los pares clave-valor en las VMs subyacentes de Compute Engine.

Para 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 de 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
  • Se aplica a los 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 la gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se indican en este documento.

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 Google Cloud consola, 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 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: la ubicación de Compute Engine. Para los clústeres zonales, especifica la zona de procesamiento.
  • 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 deGoogle 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.

    Recibirás una notificación que confirmará 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.

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
}

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 con la gcloud CLI, la Google Cloud consola o la API de Tags.

gcloud

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

gcloud 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. Para los clústeres zonales, especifica la zona de procesamiento.

  • 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

  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.

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%2LOCATION%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 con la gcloud CLI, laGoogle Cloud consola o la API de Tags. 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 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. Para los clústeres zonales, especifica la zona de procesamiento.

  • 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

  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.

    Recibirás una notificación que confirmará 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

Adjunta etiquetas a un grupo de nodos

Puedes adjuntar etiquetas de firewall y que no son de firewall a los grupos de nodos de GKE con la API de GKE. Cuando adjuntas etiquetas a un grupo de nodos, GKE propaga automáticamente esas etiquetas a las VMs subyacentes de Compute Engine en ese grupo de nodos.

  • Las etiquetas que no son de firewall en los grupos de nodos son compatibles con la versión 1.34 de GKE y versiones posteriores.
  • Las etiquetas que no son de firewall con ComputeClasses personalizadas son compatibles con la versión 1.35.0-gke.2398000 de GKE y versiones posteriores.

Cómo adjuntar etiquetas a un grupo de nodos Standard

Puedes adjuntar etiquetas cuando creas un grupo de nodos nuevo o actualizas uno existente con la marca --resource-manager-tags:

  • Para adjuntar etiquetas cuando crees un grupo de nodos nuevo, ejecuta el siguiente comando:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --resource-manager-tags=TAG1,TAG2,...
    
  • Para adjuntar o reemplazar etiquetas en un grupo de nodos existente, ejecuta el siguiente comando:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --resource-manager-tags=TAG1,TAG2,...
    

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Es el nombre del grupo de nodos.
  • CLUSTER_NAME: Es el nombre del clúster.
  • CLUSTER_LOCATION: Es la región o zona de Compute Engine del clúster.
  • TAG1,TAG2,...: Es una lista separada por comas de hasta cinco pares clave-valor para adjuntar. Cada par clave-valor puede usar IDs permanentes (por ejemplo, tagKeys/123456789012=tagValues/987654321098) o nombres con espacio de nombres (por ejemplo, example-project/env=dev,123456789012/team=sre).

Adjunta etiquetas a clústeres de Autopilot o grupos de nodos aprovisionados de forma automática

Para adjuntar etiquetas a los nodos de un clúster de Autopilot o a los grupos de nodos aprovisionados automáticamente nuevos en un clúster de Standard con el aprovisionamiento automático de nodos habilitado, usa la marca --autoprovisioning-resource-manager-tags:

gcloud container clusters update CLUSTER_NAME \
    --location=CLUSTER_LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Para quitar todas las etiquetas asociadas a un grupo de nodos con la API de GKE, pasa un valor vacío a la marca (por ejemplo, --resource-manager-tags="" o --autoprovisioning-resource-manager-tags=""). Para obtener más información sobre la sintaxis y la herencia de las etiquetas de grupos de nodos, consulta Aplica de forma selectiva las políticas de firewall de red en GKE.

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. Puedes usar políticas de denegación de IAM con etiquetas para lograr objetivos como proteger los clústeres críticos contra la eliminación.

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.

¿Qué sigue?