Administra los recursos del equipo de toda tu flota

En esta página, se explica cómo usar el Sincronizador de configuración y Terraform para crear recursos con alcance de equipo de forma dinámica en una flota de clústeres. El Sincronizador de configuración amplía las capacidades de la administración de equipos de flotas para crear y administrar la configuración de la infraestructura y los clústeres en todas tus flotas.

En esta guía, se supone que ya conoces los conceptos de administración de equipos de flota, como los permisos y los espacios de nombres de la flota. Para obtener más información, consulta la descripción general de la administración de equipos de flotas.

Para obtener un instructivo de extremo a extremo con configuraciones de muestra, consulta el instructivo sobre usuarios de flotas en el repositorio de muestra.

Si deseas obtener una lista de los campos compatibles con el Sincronizador de configuración en Terraform, consulta la documentación de referencia de Terraform para las funciones de flota de GKE.

Ejemplo de flujo de trabajo

Eres administrador de la plataforma y deseas crear recursos de forma dinámica en una flota de clústeres en la que diferentes equipos tienen necesidades diferentes. Por ejemplo, es posible que desees aplicar un NetworkPolicy a los espacios de nombres de tu equipo de backend, pero no a los espacios de nombres del equipo de frontend. En esta situación, el procedimiento para crear recursos con alcance de equipo en un espacio de nombres es el siguiente:

  1. Elige o crea la flota en la que deseas administrar los recursos para los equipos.
  2. Configura tu fuente de información. La fuente de información contiene los objetos NamespaceSelector que usas para seleccionar espacios de nombres a nivel de la flota en los permisos de tu equipo y cualquier recurso (como NetworkPolicy) que desees sincronizar en estos espacios de nombres.
  3. Crea la configuración predeterminada a nivel de la flota para el Sincronizador de configuración. El Sincronizador de configuración usa esta configuración predeterminada cuando sincroniza desde la fuente de información creada en el paso anterior. Esta configuración del Sincronizador de configuración se aplica a cualquier clúster nuevo creado en la flota.

  4. Crea clústeres en tu flota.

  5. Crea los permisos y los espacios de nombres del equipo de frontend y backend para que el Sincronizador de configuración pueda detectar y conciliar los recursos en tus espacios de nombres.

Después de completar estos pasos, el Sincronizador de configuración crea y aplica el NetworkPolicy basado en NamespaceSelector a los espacios de nombres del equipo de backend. Si cambias o agregas algún recurso, el Sincronizador de configuración detecta y aplica de forma continua cualquier cambio a tus archivos de configuración, permisos del equipo, espacios de nombres de la flota y miembros de la flota.

Precios

Las funciones del Sincronizador de configuración y de administración de equipos de flota solo están disponibles para los usuarios que habilitaron GKE Enterprise. Para obtener más información sobre los precios de GKE Enterprise, consulta la página de precios de GKE.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  8. Crear o tener acceso a una fuente de información (ya sea un repositorio de Git o una imagen OCI) en la que puedas almacenar tus archivos de configuración En los ejemplos de esta guía, se usa un repositorio de Git.

Funciones obligatorias

Si quieres obtener los permisos que necesitas para crear recursos del equipo en tu flota, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Es posible que también puedas obtener los permisos necesarios a través de los roles personalizados o de otros roles predefinidos.

Adquiere credenciales de usuario

Para ejecutar los comandos de Terraform en esta guía en tu entorno local, ejecuta el siguiente comando para adquirir credenciales de usuario nuevas:

gcloud auth application-default login

Configura tu flota

En esta sección, crearás tu flota y habilitarás los servicios necesarios.

Para configurar tu flota, completa los siguientes pasos:

  1. Crear un directorio para los archivos de configuración de Terraform de la flota. A ese directorio, agrega un archivo main.tf y uno variables.tf.

  2. En el archivo variables.tf, agrega las siguientes variables:

    variable "project" {
      type = string
      description = "GCP project ID"
    }

  3. En el archivo main.tf, agrega los siguientes recursos:

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">= 5.16.0"
        }
      }
    }
    
    provider "google" {
      # project variable must be provided at runtime
      project = var.project
    }
    
    # Enable API services
    resource "google_project_service" "services" {
      for_each = toset([
        "gkehub.googleapis.com",
        "container.googleapis.com",
        "connectgateway.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "iam.googleapis.com",
        "anthos.googleapis.com",
        "anthosconfigmanagement.googleapis.com",
      ])
      service = each.value
      disable_on_destroy = false
    }
    
    # Declare a fleet in the project
    resource "google_gke_hub_fleet" "default" {
      display_name = "demo"
    
      depends_on = [google_project_service.services]
    }
  4. Exporta la variable PROJECT_ID:

    export TF_VAR_project=PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto en el que deseas crear tu flota.

  5. Inicializa Terraform en el directorio que creaste:

    terraform init
    
  6. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan
    
  7. Crea la flota, habilita las APIs y crea la cuenta de servicio:

    terraform apply
    

    A veces, la habilitación de todos los servicios puede demorar unos minutos.

Configura tu fuente de información

En esta sección, agregarás archivos de configuración a una fuente de información. Necesitas un objeto NamespaceSelector para cada permiso del equipo que desees usar. Por ejemplo, si tienes equipos de frontend y backend, debes crear un objeto NamespaceSelector para cada equipo. El objeto NamespaceSelector selecciona todos o algunos de los espacios de nombres dentro del permiso de un equipo. Puedes agregar recursos de equipo adicionales a tu fuente de información, como un NetworkPolicy. Cuando creas estos recursos, debes hacer referencia al NamespaceSelector para que el Sincronizador de configuración pueda implementar y sincronizar esos recursos de forma dinámica en los espacios de nombres.

Para configurar tu fuente de información, completa los siguientes pasos:

  1. En tu fuente de información, crea un directorio para los archivos de configuración desde los que deseas que se sincronice el Sincronizador de configuración.

  2. Para cada equipo, crea un objeto NamespaceSelector en el directorio de configuración:

    apiVersion: configmanagement.gke.io/v1
    kind: NamespaceSelector
    metadata:
       name: NAMESPACE_SELECTOR_NAME
    spec:
      mode: dynamic
      selector:
        matchLabels:
          fleet.gke.io/fleet-scope: SCOPE_NAME
    

    Reemplaza lo siguiente:

    • NAMESPACE_SELECTOR_NAME: Es el nombre del objeto NamespaceSelector, por ejemplo, backend-scope.
    • SCOPE_NAME: Es el nombre del permiso de tu equipo, por ejemplo, backend.

    Cualquier espacio de nombres que forme parte de un espacio de nombres de flota tendrá automáticamente la etiqueta fleet.gke.io/fleet-scope: SCOPE_NAME. NamespaceSelector selecciona todos los espacios de nombres de flota de un permiso de equipo que usan esa etiqueta. Para obtener más ejemplos sobre cómo incluir o excluir espacios de nombres, consulta ejemplos de NamespaceSelector.

  3. Crea los objetos que desees sincronizar entre los espacios de nombres.

    Para sincronizar un objeto solo con un equipo en particular, configura la siguiente anotación en los metadatos de ese objeto:

    annotations:
      configmanagement.gke.io/namespace-selector: NAMESPACE_SELECTOR_NAME
    

    Por ejemplo, un NetworkPolicy para el equipo de backend podría ser similar al siguiente:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: be-deny-all
      annotations:
        configmanagement.gke.io/namespace-selector: backend-scope # Actuate this resource in the namespaces with labels matched by the namespace selector
    spec:
      ingress:
      - from:
        - podSelector: {}
      podSelector:
        matchLabels: null

Crear valores predeterminados a nivel de la flota para el Sincronizador de configuración

En esta sección, crearás valores predeterminados a nivel de la flota para el Sincronizador de configuración, que aplica la misma configuración del Sincronizador de configuración a todos los clústeres creados en tu flota.

Si deseas crear una configuración predeterminada a nivel de la flota para el Sincronizador de configuración, completa los siguientes pasos:

  1. Crear un directorio para los archivos de Terraform de configuración predeterminados de la flota. A ese directorio, agrega un archivo main.tf y uno variables.tf.

  2. En el archivo variables.tf, agrega las siguientes variables:

    variable "project" {
      type = string
      description = "GCP project ID"
    }

  3. En el archivo main.tf, agrega el siguiente recurso para establecer los parámetros de configuración del Sincronizador de configuración:

    git

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">=5.16.0"
         }
       }
     }
    
    provider "google" {
      project = var.project
    }
    
    resource "google_gke_hub_feature" "feature" {
      name = "configmanagement"
      location = "global"
      provider = google
      fleet_default_member_config {
        configmanagement {
        version = "VERSION"
     config_sync {
       source_format = "unstructured"
       git {
         sync_repo = "REPO"
         sync_branch = "BRANCH"
         policy_dir = "DIRECTORY"
         secret_type = "SECRET"
            }
          }
        }
      }
    }
    

    Reemplaza lo siguiente:

    • VERSION: Es el número de versión del Sincronizador de configuración (opcional). Se debe configurar en la versión 1.17.0 o posterior. Si se deja en blanco, el valor predeterminado es la última versión.
    • REPO: Es la URL al repositorio que contiene los archivos de configuración.
    • BRANCH: Es la rama del repositorio, por ejemplo main.
    • DIRECTORY: Es la ruta de acceso dentro del repositorio de Git que representa el nivel superior del repositorio que deseas sincronizar.
    • SECRET: Es el tipo de autenticación del secreto.

    Para obtener una lista completa de los parámetros de configuración compatibles con el bloque git del Sincronizador de configuración, consulta la documentación de referencia de Terraform para las funciones de GKE Hub.

    OCI

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">=5.16.0"
         }
       }
     }
    
    provider "google" {
      project = var.project
    }
    
    resource "google_gke_hub_feature" "feature" {
      name = "configmanagement"
      location = "global"
      provider = google
      fleet_default_member_config {
        configmanagement {
        version = "VERSION"
        config_sync {
        source_format = "unstructured"
        oci {
         sync_repo = "REPO"
         policy_dir = "DIRECTORY"
         secret_type = "SECRET"
         }
        }
        }
      }
    }
    

    Reemplaza lo siguiente:

    • VERSION: Es el número de versión del Sincronizador de configuración. Se debe configurar en la versión 1.17.0 o posterior. Si se deja en blanco, el valor predeterminado es la última versión.
    • REPO: Es la URL al repositorio de imágenes de OCI que contiene los archivos de configuración.
    • DIRECTORY: Es la ruta de acceso absoluta del directorio que contiene los recursos que deseas sincronizar. Déjalo en blanco para usar el directorio raíz.
    • SECRET: Es el tipo de autenticación del secreto.

    Para obtener una lista completa de los parámetros de configuración compatibles con el bloque oci del Sincronizador de configuración, consulta la documentación de referencia de Terraform para las funciones de GKE Hub.

    A modo de ejemplo, el siguiente archivo main.tf configura el Sincronizador de configuración para que se sincronice desde un repositorio de Git y sincroniza todos los objetos presentes en el directorio config:

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">= 5.16.0"
        }
      }
    }
    
    provider "google" {
      project = var.project
    }
    
    resource "google_gke_hub_feature" "feature" {
      name = "configmanagement"
      location = "global"
      provider = google
      fleet_default_member_config {
        configmanagement {
          # version = "1.17.0" # Use the default latest version; if specifying a version, it must be at or after 1.17.0
          config_sync {
            source_format = "unstructured"
            git {
              sync_repo = "https://github.com/GoogleCloudPlatform/anthos-config-management-samples"
              sync_branch = "main"
              policy_dir = "fleet-tenancy/config"
              secret_type = "none"
            }
          }
        }
      }
    }
  4. Inicializa Terraform en el directorio que creaste:

    terraform init
    
  5. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan
    
  6. Crea las configuraciones predeterminadas de los miembros de la flota:

    terraform apply
    

Crea clústeres en tu flota

En esta sección, crearás una configuración de clúster compartido y, luego, clústeres en tu flota.

Para crear y registrar clústeres nuevos en tu flota, completa los siguientes pasos:

  1. Crea un directorio para los archivos de Terraform de configuración del clúster. A ese directorio, agrega un archivo main.tf y uno variables.tf.

  2. En el archivo variables.tf, agrega las siguientes variables:

    variable "project" {
      type = string
      description = "GCP project ID"
    }

  3. Crea un archivo cluster.tf que contenga los valores predeterminados usados en todos tus clústeres, como los ID del proyecto y de la flota:

    variable "location" {
      type = string
    }
    
    variable "cluster_name" {
      type = string
    }
    
    data "google_project" "project" {
      provider = google
    }
    
    resource "google_container_cluster" "cluster" {
     provider = google
     name               = var.cluster_name
     location           = var.location
     initial_node_count = 3
     project = data.google_project.project.project_id
     fleet {
       project = data.google_project.project.project_id
     }
     workload_identity_config {
       workload_pool = "${data.google_project.project.project_id}.svc.id.goog"
     }
     deletion_protection = false
    }
    
  4. En el archivo main.tf, agrega los siguientes recursos:

    terraform {
      required_providers {
        google = {
        source = "hashicorp/google"
        version = ">=5.16.0"
        }
      }
    }
    
    provider "google" {
      project = var.project
    }
    
    module "MODULE_NAME" {
      source = "CLUSTER_CONFIGURATION_FILEPATH"
      cluster_name = "CLUSTER_NAME"
      location="CLUSTER_LOCATION"
    }
    

    Reemplaza lo siguiente:

    • MODULE_NAME: Es el nombre que deseas darle al módulo del clúster. MODULE_NAME y CLUSTER_NAME pueden tener el mismo valor, por ejemplo, us-east-cluster.
    • CLUSTER_CONFIGURATION_FILEPATH: Es la ruta de acceso relativa al archivo cluster.tf que creaste.
    • CLUSTER_NAME: es el nombre de tu clúster. MODULE_NAME y CLUSTER_NAME pueden tener el mismo valor, por ejemplo, us-east-cluster.
    • CLUSTER_LOCATION: Es la ubicación del clúster, por ejemplo, us-east1.

    Puedes crear tantos clústeres como desees. A modo de ejemplo, el siguiente archivo main.tf crea 3 clústeres en diferentes regiones:

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">= 5.16.0"
        }
      }
    }
    
    provider "google" {
      project = var.project
    }
    
    module "us-west-cluster" {
      source = "./cluster"
      cluster_name = "us-west-cluster"
      location="us-west1-a"
    }
    
    module "us-east-cluster" {
      source = "./cluster"
      cluster_name = "us-east-cluster"
      location="us-east1-b"
    }
    
    module "us-central-cluster" {
      source = "./cluster"
      cluster_name = "us-central-cluster"
      location="us-central1-c"
    }
  5. Inicializa Terraform en el directorio que creaste:

    terraform init
    
  6. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan
    
  7. Crea los clústeres:

    terraform apply
    

Configura los permisos del equipo y los espacios de nombres de la flota

En esta sección, crearás los permisos del equipo y asociarás los clústeres con esos permisos. Luego, creas los espacios de nombres de flota que necesitas, por ejemplo, uno para cada equipo en cada permiso, y el Sincronizador de configuración crea los recursos en tus espacios de nombres.

Para configurar los permisos y los espacios de nombres del equipo, completa los siguientes pasos:

  1. Crear un directorio para los archivos de Terraform de configuración del espacio de nombres y el permiso del equipo. A ese directorio, agrega un archivo main.tf y uno variables.tf.

  2. En el archivo variables.tf, agrega las siguientes variables:

    variable "project" {
      type = string
      description = "GCP project ID"
    }
    

  3. En el archivo main.tf, agrega los siguientes recursos:

    1. Agrega la información del proveedor:

      terraform {
        required_providers {
          google = {
            source = "hashicorp/google"
            version = ">=5.16.0"
           }
         }
       }
      
      provider "google" {
        project = var.project
      }
      
    2. Agrega el recurso de permiso del equipo:

      resource "google_gke_hub_scope" "scope" {
        provider = google
        for_each = toset([
          "SCOPE_NAME",
          "SCOPE_NAME_2",
        ])
        scope_id = each.value
      }
      

      Reemplaza lo siguiente:

      • SCOPE_NAME: Es el nombre del permiso de tu equipo, por ejemplo, backend.
      • SCOPE_NAME_2: Es un permiso de equipo adicional, si creaste uno.

      Puedes agregar tantos permisos de equipo como necesites. Cuando se crea un espacio de nombres de flota en el clúster, el espacio de nombres se etiqueta automáticamente con fleet.gke.io/fleet-scope: SCOPE_NAME, lo que permite que el Sincronizador de configuración seleccione espacios de nombres en función de las etiquetas NamespaceSelector presentes cuando se sincronizan los recursos de Kubernetes.

      A modo de ejemplo, un recurso de Terraform de permiso de equipo que incluye un permiso para el equipo de frontend y backend podría parecerse a lo siguiente:

      resource "google_gke_hub_scope" "scope" {
        provider = google
        for_each = toset([
          "backend",
          "frontend",
        ])
        scope_id = each.value
      }
    3. Agrega una vinculación de membresía de flota para cada clúster que desees aplicar a un permiso de equipo:

      resource "google_gke_hub_membership_binding" "membership-binding" {
        provider = google
        for_each = {
          MEMBERSHIP_BINDING_NAME = {
            membership_binding_id = "MEMBERSHIP_BINDING_ID"
            scope = google_gke_hub_scope.scope["SCOPE_NAME"].name
            membership_id = "CLUSTER_NAME"
            location = "CLUSTER_LOCATION"
          }
          MEMBERSHIP_BINDING_NAME_2 = {
            membership_binding_id = "MEMBERSHIP_BINDING_ID_2"
            scope = google_gke_hub_scope.scope["SCOPE_NAME_2"].name
            membership_id = "CLUSTER_NAME_2"
            location = "CLUSTER_LOCATION_2"
          }
        }
        membership_binding_id = each.value.membership_binding_id
        scope = each.value.scope
        membership_id = each.value.membership_id
        location = each.value.location
      
        depends_on = [google_gke_hub_scope.scope]
      }
      

      Reemplaza lo siguiente:

      • MEMBERSHIP_BINDING_NAME: Es el nombre de la vinculación de membresía, por ejemplo, us-east-backend.
      • MEMBERSIP_BINDING_ID: Es el ID de vinculación de membresía. Puede ser el mismo que el de MEMBERSHIP_BINDING_NAME.
      • SCOPE_NAME: Es el selector de etiquetas que le otorgaste al permiso de equipo cuando creaste un NamespaceSelector, por ejemplo, backend.
      • CLUSTER_NAME: Es el nombre del clúster que creaste cuando creaste clústeres, por ejemplo, us-east-cluster.
      • CLUSTER_LOCATION: Es la ubicación del clúster, por ejemplo, us-east1.

      Debes definir una vinculación de membresía de flota para cada clúster. Si no defines un permiso de equipo para un clúster, ese clúster no se crea para ese espacio de nombres. Por ejemplo, si tienes tres clústeres en las regiones us-east1, us-west1 y us-central1, pero el clúster us-central1 es solo para el equipo de Frontend, tu recurso de vinculación de membresía sería similar al siguiente:

      resource "google_gke_hub_membership_binding" "membership-binding" {
        provider = google
        for_each = {
          us-east-backend = {
            membership_binding_id = "us-east-backend"
            scope = google_gke_hub_scope.scope["backend"].name
            membership_id = "us-east-cluster"
            location = "us-east1"
          }
          us-west-backend = {
            membership_binding_id = "us-west-backend"
            scope = google_gke_hub_scope.scope["backend"].name
            membership_id = "us-west-cluster"
            location = "us-west1"
          }
          us-east-frontend = {
            membership_binding_id = "us-east-frontend"
            scope = google_gke_hub_scope.scope["frontend"].name
            membership_id = "us-east-cluster"
            location = "us-east1"
          }
          us-west-frontend = {
            membership_binding_id = "us-west-frontend"
            scope = google_gke_hub_scope.scope["frontend"].name
            membership_id = "us-west-cluster"
            location = "us-west1"
          }
          us-central-frontend = {
            membership_binding_id = "us-central-frontend"
            scope = google_gke_hub_scope.scope["frontend"].name
            membership_id = "us-central-cluster"
            location = "us-central1"
          }
        }
      
        membership_binding_id = each.value.membership_binding_id
        scope = each.value.scope
        membership_id = each.value.membership_id
        location = each.value.location
      
        depends_on = [google_gke_hub_scope.scope]
      }
    4. Agrega los espacios de nombres que quieras definir para tus equipos:

      resource "google_gke_hub_namespace" "fleet_namespace" {
        provider = google
      
        for_each = {
          FLEET_NAMESPACE = {
            scope_id = "SCOPE_NAME"
            scope_namespace_id = "FLEET_NAMESPACE_ID"
            scope = google_gke_hub_scope.scope["SCOPE_NAME"].name
          }
          FLEET_NAMESPACE_2 = {
            scope_id = "SCOPE_NAME"
            scope_namespace_id = "FLEET_NAMESPACE_ID_2"
            scope = google_gke_hub_scope.scope["SCOPE_NAME"].name
          }
      
      }
      
        scope_namespace_id = each.value.scope_namespace_id
        scope_id = each.value.scope_id
        scope = each.value.scope
      
        depends_on = [google_gke_hub_scope.scope]
      }
      

      Reemplaza lo siguiente:

      • FLEET_NAMESPACE: Es el nombre que deseas asignar al espacio de nombres, por ejemplo, backend-a.
      • SCOPE_NAME: Es el selector de etiquetas que le otorgaste al permiso de equipo cuando creaste un NamespaceSelector, por ejemplo, backend.
      • FLEET_NAMESPACE_ID: Es el ID del espacio de nombres. Puede ser el mismo valor que FLEET_NAMESPACE.

      Por ejemplo, si quieres que tanto el equipo de frontend como el de backend tengan dos espacios de nombres cada uno, el recurso de espacio de nombres de tu flota podría parecerse al siguiente:

      resource "google_gke_hub_namespace" "fleet_namespace" {
        provider = google
      
        for_each = {
          bookstore = {
            scope_id = "backend"
            scope_namespace_id = "bookstore"
            scope = google_gke_hub_scope.scope["backend"].name
          }
          shoestore = {
            scope_id = "backend"
            scope_namespace_id = "shoestore"
            scope = google_gke_hub_scope.scope["backend"].name
          }
          frontend_a = {
            scope_id = "frontend"
            scope_namespace_id = "frontend-a"
            scope = google_gke_hub_scope.scope["frontend"].name
          }
          frontend_b = {
            scope_id = "frontend"
            scope_namespace_id = "frontend-b"
            scope = google_gke_hub_scope.scope["frontend"].name
          }
        }
      
        scope_namespace_id = each.value.scope_namespace_id
        scope_id = each.value.scope_id
        scope = each.value.scope
      
        depends_on = [google_gke_hub_scope.scope]
      }
  4. Inicializa Terraform en el directorio que creaste:

    terraform init
    
  5. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan
    
  6. Crea los permisos y los espacios de nombres de la flota:

    terraform apply
    

Después de crear permisos y espacios de nombres de la flota, el Sincronizador de configuración detecta esos espacios de nombres nuevos y sus permisos, selecciona los recursos en ellos y los concilia con los archivos de configuración.

Para verificar que tus recursos se apliquen al clúster correcto, usa nomos status o visita la pestaña Paquetes del Sincronizador de configuración en la consola de Google Cloud y cambia el botón de selección Ver por a Clúster.

Ir a Paquetes

El Sincronizador de configuración sincroniza tus recursos en los espacios de nombres según los permisos de tu equipo de acuerdo con la configuración almacenada en tu fuente de información. Cada vez que agregas un recurso nuevo, siempre que incluyas la anotación NamespaceSelector correcta, el Sincronizador de configuración concilia automáticamente ese recurso en los espacios de nombres de tu equipo.

Si deseas aplicar la configuración del Sincronizador de configuración a tus clústeres existentes, consulta las instrucciones para Configura los valores predeterminados a nivel de la flota en la guía de instalación del Sincronizador de configuración.

¿Qué sigue?