Administra los recursos de los equipos en tu flota

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

En esta guía, se da por sentado que ya conoces los conceptos de administración de equipos de flotas, como los permisos del equipo 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 flota.

Para ver un instructivo de extremo a extremo con configuraciones de muestra, consulta el instructivo de arrendamiento de la flota en el repositorio de muestras.

Para obtener una lista de los campos compatibles con Sincronizador de configuración en Terraform, consulta la documentación de referencia de Terraform para las funciones de la 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 diferentes necesidades. Por ejemplo, es posible que desees aplicar un NetworkPolicy a los espacios de nombres de tu equipo de backend, pero no a los de tu 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 un 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 estos parámetros de configuración predeterminados cuando se sincroniza desde la fuente de información creada en el paso anterior. Esta configuración de 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 de equipo y los espacios de nombres de frontend y backend para que Sincronizador de configuración pueda detectar y conciliar recursos en tus espacios de nombres.

Después de completar estos pasos, Sincronizador de configuración crea y aplica el NetworkPolicy según el NamespaceSelector a los espacios de nombres del equipo de backend. Si cambias o agregas recursos, Sincronizador de configuración detecta y aplica continuamente los cambios a tus archivos de configuración, permisos de equipo, espacios de nombres de la flota y miembros de la flota.

Precios

Las funciones de administración de equipos de flotas y del Sincronizador de configuración 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Install the Google Cloud CLI.

  7. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Crea una fuente de información (un repositorio de Git o una imagen de OCI) o accede a una en la que puedas almacenar tus archivos de configuración. En los ejemplos de esta guía, se usa un repositorio de Git.
  11. Roles obligatorios

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

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

    Adquiere credenciales del usuario

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

    gcloud auth application-default login
    

    Configura tu flota

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

    Para configurar tu flota, completa los siguientes pasos:

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

    2. En el archivo variables.tf, agrega el siguiente código:

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

    3. En el archivo main.tf, agrega el siguiente código:

      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 tardar unos minutos.

    Configura tu fuente de confianza

    En esta sección, agregarás archivos de configuración a una fuente de verdad. Necesitas un objeto NamespaceSelector para cada alcance del equipo que quieras 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 alcance de un equipo. Puedes agregar recursos adicionales del equipo a tu fuente de información confiable, como un NetworkPolicy. Cuando creas estos recursos, haces referencia a NamespaceSelector para que el Sincronizador de configuración pueda implementar y sincronizar esos recursos de forma dinámica en todos los espacios de nombres.

    Para configurar tu fuente de verdad, 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 tu 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.

      Todos los espacios de nombres que forman parte de un espacio de nombres de la flota tienen automáticamente la etiqueta fleet.gke.io/fleet-scope: SCOPE_NAME. El 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 los ejemplos de NamespaceSelector.

    3. Crea los objetos que quieras sincronizar en 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 parecerse 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

    Crea 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.

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

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

    2. En el archivo variables.tf, agrega el siguiente código:

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

    3. En el archivo main.tf, agrega el siguiente recurso para configurar los parámetros 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: (opcional) Es el número de versión del Sincronizador de configuración. Si se deja en blanco, el valor predeterminado es la versión más reciente.
      • REPO: Es la URL del repositorio que contiene tus 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 secreta.

      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. Si se deja en blanco, el valor predeterminado es la versión más reciente.
      • REPO: Es la URL del repositorio de imágenes de OCI que contiene 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 Sincronizador de configuración para que se sincronice desde un repositorio de Git y sincronice 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, crearás 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 un archivo variables.tf.

    2. En el archivo variables.tf, agrega el siguiente código:

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

    3. Crea un archivo cluster.tf que contenga los valores predeterminados que se usan en todos tus clústeres, como los IDs de tu proyecto y 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 el siguiente código:

      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: 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 de tu clúster, por ejemplo, us-east1.

      Puedes crear tantos clústeres como quieras. Como ejemplo, el siguiente archivo main.tf crea 3 clústeres en regiones diferentes:

      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 permisos del equipo y espacios de nombres de la flota

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

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

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

    2. En el archivo variables.tf, agrega el siguiente código:

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

    3. En el archivo main.tf, agrega el siguiente código:

      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: Un permiso de equipo adicional si creaste uno

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

        Por ejemplo, un recurso de Terraform con alcance de equipo que incluye un alcance para los equipos de frontend y backend podría parecerse al 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 la 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 la membresía. Puede ser igual que MEMBERSHIP_BINDING_NAME.
        • SCOPE_NAME: Es el selector de etiquetas que le asignaste a tu alcance del 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 creará 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 se parecería 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 desees 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 darle al espacio de nombres, por ejemplo, backend-a.
        • SCOPE_NAME: Es el selector de etiquetas que le asignaste a tu alcance de equipo cuando creaste un NamespaceSelector, por ejemplo, backend.
        • FLEET_NAMESPACE_ID: Es el ID del espacio de nombres. Puede ser igual que FLEET_NAMESPACE.

        Por ejemplo, si deseas que los equipos de frontend y backend tengan dos espacios de nombres cada uno, el recurso de espacio de nombres de la 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 alcances y espacios de nombres de la flota:

      terraform apply
      

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

    Puedes verificar que tus recursos se apliquen al clúster correcto con nomos status o visitando la pestaña Paquetes del Sincronizador de configuración en la consola de Google Cloud y cambiando el botón de opción Ver por a Clúster.

    Ir a Packages

    El Sincronizador de configuración sincroniza tus recursos en todos 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 agregues un recurso nuevo, siempre que incluyas la anotación NamespaceSelector correcta, Sincronizador de configuración reconciliará 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 configurar los valores predeterminados a nivel de la flota en la guía de instalación del Sincronizador de configuración.

    ¿Qué sigue?