Gestionar los recursos de los equipos de tu flota

En esta página se explica cómo usar Config Sync y Terraform para crear dinámicamente recursos con ámbito de equipo en una flota de clústeres. Config Sync amplía las funciones de gestión de equipos de flotas para crear y gestionar configuraciones de infraestructura y de clústeres en tus flotas.

En esta guía se da por hecho que ya conoces los conceptos de gestión de equipos de flotas, como los permisos de equipo y los espacios de nombres de flotas. Para obtener más información, consulta el resumen de la gestión de equipos de la flota.

Para ver un tutorial completo con configuraciones de ejemplo, consulta el tutorial sobre el alquiler de flotas en el repositorio de ejemplos.

Para ver una lista de los campos admitidos por Config Sync en Terraform, consulta la documentación de referencia de Terraform sobre las funciones de flotas de GKE.

Ejemplo de flujo de trabajo

Eres un administrador de la plataforma que quiere crear recursos de forma dinámica en una flota de clústeres en la que diferentes equipos tienen necesidades distintas. Por ejemplo, puede que quieras aplicar un NetworkPolicy a los espacios de nombres de tu equipo de backend, pero no a los de tu equipo de frontend. En este caso, el procedimiento para crear recursos con ámbito de equipo en un espacio de nombres es el siguiente:

  1. Elige o crea la flota en la que quieras gestionar los recursos de los equipos.
  2. Configura tu fuente de información veraz. La fuente de información contiene los objetos NamespaceSelector que usas para seleccionar espacios de nombres a nivel de flota en los ámbitos de tu equipo, así como los recursos (como un NetworkPolicy) que quieras sincronizar en estos espacios de nombres.

  3. Crea la configuración predeterminada a nivel de flota para Config Sync. Config Sync usa estos ajustes predeterminados al sincronizar desde la fuente de información creada en el paso anterior. Estos ajustes de Config Sync se aplican a los nuevos clústeres creados en la flota.

  4. Crea clústeres en tu flota.

  5. Crea los ámbitos y espacios de nombres de los equipos de frontend y backend para que Config Sync pueda detectar y conciliar los recursos de tus espacios de nombres.

Una vez que hayas completado estos pasos, Config Sync creará y aplicará el NetworkPolicy en función del NamespaceSelector a los espacios de nombres del equipo de backend. Si cambia o añade algún recurso, Config Sync detecta y aplica continuamente los cambios en los archivos de configuración, los ámbitos de equipo, los espacios de nombres de la flota y los miembros de la flota.

Precios

Las funciones de Config Sync y de gestión de equipos de flotas están disponibles en GKE. Para obtener más información sobre los precios, consulta la página de precios de GKE.

Antes de empezar

  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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  8. Para inicializar gcloud CLI, ejecuta el siguiente comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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 o ten acceso a una fuente fiable (un repositorio de Git o una imagen de OCI) donde 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 de equipo para tu flota, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

    Adquirir credenciales de usuario

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

    gcloud auth application-default login
    

    Configurar tu flota

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

    Para configurar tu flota, sigue estos pasos:

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

    2. En el archivo variables.tf, añade las siguientes variables:

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

    3. En el archivo main.tf, añade 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
      

      Sustituye PROJECT_ID por el ID del proyecto en el que quieras crear tu flota.

    5. Inicializa Terraform en el directorio que has creado:

      terraform init
      
    6. Comprueba que los cambios que propones con Terraform coinciden con el plan esperado:

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

      terraform apply
      

      A veces, puede tardar unos minutos en habilitar todos los servicios.

    Configurar la fuente de información veraz

    En esta sección, se añaden archivos de configuración a una fuente de información veraz. Necesitas un objeto NamespaceSelector para cada ámbito de equipo que quieras usar. Por ejemplo, si tienes los equipos Frontend y Backend, debes crear un NamespaceSelector objeto para cada equipo. El objeto NamespaceSelector selecciona todos o algunos de los espacios de nombres de un equipo. Puedes añadir recursos adicionales del equipo a tu fuente de información veraz, como un NetworkPolicy. Cuando creas estos recursos, haces referencia al NamespaceSelector para que Config Sync pueda desplegar y sincronizar esos recursos de forma dinámica en los espacios de nombres.

    Para configurar tu fuente de información veraz, sigue estos pasos:

    1. En tu fuente de información veraz, crea un directorio para los archivos de configuración que quieras que Config Sync sincronice.

    2. Cree un objeto NamespaceSelector para cada equipo 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
      

      Haz los cambios siguientes:

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

      Los espacios de nombres que forman parte de un espacio de nombres de flota tienen automáticamente la etiqueta fleet.gke.io/fleet-scope: SCOPE_NAME. El comando NamespaceSelector selecciona todos los espacios de nombres de flota de un permiso de equipo que usen esa etiqueta. Para ver más ejemplos sobre cómo incluir o excluir espacios de nombres, consulta los ejemplos de NamespaceSelector.

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

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

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

      Por ejemplo, un NetworkPolicy del 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 flota para Config Sync

    En esta sección, creará valores predeterminados a nivel de flota para Config Sync, lo que aplicará la misma configuración de Config Sync a todos los clústeres creados en su flota.

    Para crear una configuración predeterminada a nivel de flota para Config Sync, sigue estos pasos:

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

    2. En el archivo variables.tf, añade las siguientes variables:

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

    3. En el archivo main.tf, añade el siguiente recurso para configurar los ajustes de Config Sync:

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

      Haz los cambios siguientes:

      • VERSION: (opcional) el número de versión de Config Sync. Si se deja en blanco, se usará la versión más reciente.
      • REPO: la URL del repositorio que contiene los archivos de configuración.
      • BRANCH: la rama del repositorio, por ejemplo, main.
      • DIRECTORY: la ruta del repositorio de Git que representa el nivel superior del repositorio que quieres sincronizar.
      • SECRET: el tipo de autenticación secreta.

      Para ver la lista completa de ajustes admitidos en el bloque git de Config Sync, consulta la documentación de referencia de Terraform sobre 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"
           }
          }
          }
        }
      }
      

      Haz los cambios siguientes:

      • VERSION: el número de versión de Config Sync. Si se deja en blanco, se usará la versión más reciente.
      • REPO: la URL del repositorio de imágenes de OCI que contiene los archivos de configuración.
      • DIRECTORY: la ruta absoluta del directorio que contiene los recursos que quieres sincronizar. Déjalo en blanco para usar el directorio raíz.
      • SECRET: el tipo de autenticación secreta.

      Para ver la lista completa de ajustes admitidos en el bloque oci de Config Sync, consulta la documentación de referencia de Terraform sobre las funciones de GKE Hub.

      Por ejemplo, el siguiente archivo main.tf configura Config Sync para sincronizar datos 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 has creado:

      terraform init
      
    5. Comprueba que los cambios que propones con Terraform coinciden con el plan esperado:

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

      terraform apply
      

    Crear clústeres en tu flota

    En esta sección, creará una configuración de clúster compartida y, a continuación, creará clústeres en su flota.

    Para crear y registrar nuevos clústeres en tu flota, sigue estos pasos:

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

    2. En el archivo variables.tf, añade las siguientes variables:

      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 proyecto y de 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, añade 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"
      }
      

      Haz los cambios siguientes:

      • MODULE_NAME: el nombre que quieras dar al módulo del clúster. MODULE_NAME y CLUSTER_NAME pueden tener el mismo valor, por ejemplo, us-east-cluster.
      • CLUSTER_CONFIGURATION_FILEPATH: la ruta relativa al archivo cluster.tf que has creado.
      • 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: la ubicación de tu clúster, por ejemplo, us-east1.

      Puedes crear tantos clústeres como quieras. Por 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 has creado:

      terraform init
      
    6. Comprueba que los cambios que propones con Terraform coinciden con el plan esperado:

      terraform plan
      
    7. Crea los clústeres:

      terraform apply
      

    Configurar ámbitos de equipo y espacios de nombres de flota

    En esta sección, creará los ámbitos de su equipo y asociará sus clústeres a esos ámbitos. A continuación, cree los espacios de nombres de la flota que necesite (por ejemplo, uno para cada equipo) en cada ámbito y Config Sync creará los recursos en sus espacios de nombres.

    Para configurar los ámbitos y los espacios de nombres de los equipos, sigue estos pasos:

    1. Crea un directorio para los archivos de configuración de Terraform del ámbito del equipo y del espacio de nombres. Añade a ese directorio un archivo main.tf y un archivo variables.tf.

    2. En el archivo variables.tf, añade las siguientes variables:

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

    3. En el archivo main.tf, añade los siguientes recursos:

      1. Añade la información del proveedor:

        terraform {
          required_providers {
            google = {
              source = "hashicorp/google"
              version = ">=5.16.0"
             }
           }
         }
        
        provider "google" {
          project = var.project
        }
        
      2. Añade el recurso de ámbito de equipo:

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

        Haz los cambios siguientes:

        • SCOPE_NAME: el nombre de tu ámbito de equipo, por ejemplo, backend.
        • SCOPE_NAME_2: un ámbito de equipo adicional si has creado uno.

        Puedes añadir todos los ámbitos de equipo que necesites. Cuando se crea un espacio de nombres de flota en el clúster, se etiqueta automáticamente con fleet.gke.io/fleet-scope: SCOPE_NAME, lo que permite que Config Sync seleccione espacios de nombres en función de las etiquetas NamespaceSelector presentes al sincronizar recursos de Kubernetes.

        Por ejemplo, un recurso de Terraform de ámbito de equipo que incluya un ámbito para los equipos Frontend y Backend podría ser similar al siguiente:

        resource "google_gke_hub_scope" "scope" {
          provider = google
          for_each = toset([
            "backend",
            "frontend",
          ])
          scope_id = each.value
        }
      3. Añade un enlace de pertenencia a la flota para cada clúster que quieras aplicar a un ámbito 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]
        }
        

        Haz los cambios siguientes:

        • MEMBERSHIP_BINDING_NAME: el nombre de enlace de la membresía, por ejemplo, us-east-backend.
        • MEMBERSIP_BINDING_ID: el ID de vinculación de la suscripción. Puede ser la misma que la de MEMBERSHIP_BINDING_NAME.
        • SCOPE_NAME: el selector de etiquetas que asignaste a tu equipo cuando creaste un NamespaceSelector, por ejemplo, backend.
        • CLUSTER_NAME: el nombre del clúster que has creado al crear clústeres, por ejemplo, us-east-cluster.
        • CLUSTER_LOCATION: la ubicación del clúster, por ejemplo, us-east1.

        Debes definir un enlace de pertenencia a la flota para cada clúster. Si no defines un ámbito 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 MembershipBinding 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. Añade 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]
        }
        

        Haz los cambios siguientes:

        • FLEET_NAMESPACE: el nombre que quieras dar al espacio de nombres, por ejemplo, backend-a.
        • SCOPE_NAME: el selector de etiquetas que asignaste a tu equipo cuando creaste un NamespaceSelector, por ejemplo, backend.
        • FLEET_NAMESPACE_ID: el ID del espacio de nombres. Puede tener el mismo valor que FLEET_NAMESPACE.

        Por ejemplo, si quieres que los equipos Frontend y Backend tengan dos espacios de nombres cada uno, el recurso de espacio de nombres de tu flota podría ser similar 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 has creado:

      terraform init
      
    5. Comprueba que los cambios que propones con Terraform coinciden con el plan esperado:

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

      terraform apply
      

    Después de crear ámbitos de flota y espacios de nombres, Config Sync detecta esos nuevos espacios de nombres y sus ámbitos, selecciona recursos en los espacios de nombres de la flota y los reconcilia con los archivos de configuración.

    Para comprobar que los recursos se han aplicado al clúster correcto, puedes usar nomos status o ir a la pestaña Paquetes de Config Sync en la consola de Google Cloud y cambiar el botón de radio Ver por a Clúster.

    Ir a Paquetes

    Config Sync sincroniza tus recursos en los espacios de nombres en función de los ámbitos de tu equipo, según la configuración almacenada en tu fuente de información veraz. Cada vez que añadas un recurso nuevo, Config Sync reconciliará automáticamente ese recurso en los espacios de nombres de tu equipo, siempre que incluyas la anotación NamespaceSelector correcta.

    Si quieres aplicar la configuración de Config Sync a tus clústeres, consulta las instrucciones para configurar valores predeterminados a nivel de flota en la guía de instalación de Config Sync.

    Siguientes pasos