Configura la sincronización desde repositorios de espacios de nombres

Cuando instalas el Sincronizador de configuración, debes configurar tu repositorio raíz. Después de configurar el repositorio raíz, tienes la opción de configurar los repositorios de espacio de nombres. Los repositorios de espacio de nombres te permiten realizar acciones como delegar la configuración y el control de los repositorios a los usuarios no administrativos. Para obtener más información sobre estos tipos de repositorios, consulta la sección Repositorios en la descripción general de Sincronizador de configuración.

Los repositorios de espacio de nombres requieren la API de RepoSync. Si instalaste el Sincronizador de configuración con Google Cloud Console o la CLI de Google Cloud y una versión de 1.7.0 o posterior, esta API ya está habilitada. Si instalaste el Sincronizador de configuración con kubectl y usas un objeto ConfigManagement a fin de configurar tu repositorio de Git, te recomendamos que migres tu objeto ConfigManagement para habilitar la API de RepoSync.

Si bien el Sincronizador de configuración detecta de forma automática los cambios de la fuente de información, puedes agregar una capa adicional de detección de desvío si agregas un webhook de admisión a los repositorios de espacio de nombres. Si deseas obtener detalles para hacerlo, consulta Evita el desvío de la configuración.

Antes de comenzar

  • Crea o asegúrate de tener acceso a un repositorio de Git no estructurado que pueda contener las opciones de configuración con las que se sincroniza el Sincronizador de configuración. Los repositorios de espacios de nombres deben usar el formato de repositorio no estructurado.
  • Crea o asegúrate de tener acceso a un clúster que se encuentre en una plataforma y versión compatibles de Anthos.
  • Crea o asegúrate de tener acceso a un clúster de GKE que cumpla con los requisitos del Sincronizador de configuración.

Limitaciones

  • NamespaceSelectors y (incluidas las anotaciones que apuntan a los selectores) solo funcionan en el repositorio raíz.

Elige tu método de configuración preferido

Elige entre uno de los dos métodos para configurar los repositorios de espacio de nombres:

Controla los repositorios de espacio de nombres en el repositorio raíz.

En este método, el administrador central administra la configuración de los repositorios de espacios de nombres directamente desde el repositorio raíz. Debido a que el Sincronizador de configuración administra los recursos del repositorio de espacios de nombres, este método evita cualquier cambio local en las definiciones del repositorio de espacios de nombres.

Para usar este método, completa las siguientes tareas:

  1. En el repositorio raíz, declara una configuración namespace:

    # ROOT_REPO/namespaces/NAMESPACE/namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: NAMESPACE
    

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

  2. En el repositorio raíz, crea un objeto RepoSync en el mismo espacio de nombres:

    # ROOT_REPO/namespaces/NAMESPACE/repo-sync.yaml
     # If you are using a Config Sync version earlier than 1.8.0,
     # use: apiVersion: configsync.gke.io/v1alpha1
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: repo-sync
      namespace: NAMESPACE
    spec:
      # Since this is for a namespace repository, the format should be unstructured
      sourceFormat: unstructured
      git:
       repo: NAMESPACE_REPOSITORY
       revision: NAMESPACE_REVISION
       branch: NAMESPACE_BRANCH
       dir: "NAMESPACE_DIRECTORY"
       auth: NAMESPACE_AUTH_TYPE
       gcpServiceAccountEmail: NAMESPACE_EMAIL
       secretRef:
         name: NAMESPACE_SECRET_NAME
       # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later.
       noSSLVerify: NAMESPACE_NO_SSL_VERIFY
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_REPOSITORY: agrega la URL del repositorio de Git para usarlo como repositorio de espacio de nombres. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS. Este campo es obligatorio.
    • NAMESPACE_REVISION: Agrega la revisión de Git (etiqueta o hash) que deseas consultar. Este campo es opcional y el valor predeterminado es HEAD.
    • NAMESPACE_BRANCH: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado es master.
    • NAMESPACE_DIRECTORY: agrega la ruta de acceso en el repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar. Este campo es opcional y el predeterminado es el directorio raíz (/) del repositorio.
    • NAMESPACE_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • ssh: Usa un par de claves SSH
      • cookiefile: Usa un objeto cookiefile
      • token: Usa un token
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories.
      • gcenode: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories. Selecciona esta opción solo si Workload Identity no está habilitado en tu clúster.

        Para obtener más información sobre estos tipos de autenticación, consulta Otorga al Sincronizador de configuración acceso de solo lectura a Git.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu AUTH_TYPE, agrega la dirección de correo electrónico de la cuenta de servicio de Google. Por ejemplo, acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME: Agrega el nombre que deseas darle a tu objeto Secret. Este campo es opcional.

    • NAMESPACE_NO_SSL_VERIFY: Para inhabilitar la verificación del certificado SSL, establece este campo en true. El valor predeterminado es false.

    Para obtener una explicación de los campos y una lista completa de los campos que puedes agregar al campo spec, consulta Campos de RepoSync.

    Puede haber, como máximo, un objeto RepoSync por espacio de nombres. Para aplicar esta restricción, el objeto name debe ser repo-sync. Todas las configuraciones que se encuentran en el directorio al que hace referencia RepoSync deben estar en el mismo espacio de nombres que el recurso RepoSync.

  3. En el repositorio raíz, declara una configuración RoleBinding que otorgue a la cuenta de servicio ns-reconciler-NAMESPACE permiso para administrar recursos en el espacio de nombres. El Sincronizador de configuración crea de forma automática la cuenta de servicio ns-reconciler-NAMESPACE cuando la configuración RepoSync se sincroniza con el clúster.

    Para declarar RoleBinding, crea el siguiente manifiesto:

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
     kind: RoleBinding
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: syncs-repo
       namespace: NAMESPACE
     subjects:
     - kind: ServiceAccount
       name: ns-reconciler-NAMESPACE
       namespace: config-management-system
     roleRef:
       kind: ClusterRole
       name: RECONCILER_ROLE
       apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • RECONCILER_ROLE: como administrador central, puedes configurar RECONCILER_ROLE para que se apliquen los tipos de configuración que se pueden sincronizar desde el repositorio de espacios de nombres. Puedes elegir una de las siguientes funciones:

      • Una ClusterRole predeterminada:

        • admin
        • edit

        Para obtener más información, consulta Funciones orientadas al usuario.

      • Un ClusterRole o Role definido por el usuario declarado en el repositorio raíz. Esta función admite permisos detallados.

  4. Confirme los cambios en el repositorio raíz:

     git add .
     git commit -m 'Setting up new namespace repository.'
     git push
    
  5. Si es necesario, crea un Secret según tu método de autenticación preferido. Si usaste none como el tipo de autenticación, puedes omitir este paso.

    El Secret debe cumplir con los siguientes requisitos:

    • Crea el Secret en el mismo espacio de nombres que RepoSync.
    • El nombre del Secret debe coincidir con el nombre de spec.git.secretRef que definiste en repo-sync.yaml.
    • Debes agregar la clave pública del Secret al proveedor de Git.
  6. Para verificar la configuración, usa kubectl get en uno de los objetos del repositorio de espacios de nombres. Por ejemplo:

    kubectl get rolebindings -n NAMESPACE
    

Controla los repositorios de espacios de nombres con la API de Kubernetes.

En este método, el administrador central solo declara el espacio de nombres en el repositorio raíz y delega la declaración del archivo RepoSync al operador de la aplicación.

Tareas del administrador central

El administrador central completa las siguientes tareas:

  1. En el repositorio raíz, declara una configuración namespace:

    # ROOT_REPO/namespaces/NAMESPACE/namespace.yaml
     apiVersion: v1
     kind: Namespace
     metadata:
       name: NAMESPACE
    

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

  2. En el repositorio raíz, declara una configuración RoleBinding para otorgar permisos a los operadores de la aplicación. Usa la Prevención de elevación del RBAC para asegurarte de que el operador de la aplicación no pueda aplicar una vinculación de función con permisos que no otorga esta vinculación de función.

    Para declarar RoleBinding, crea el siguiente manifiesto:

    # ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml
     kind: RoleBinding
     # Add RBAC escalation prevention
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: operator
       namespace: NAMESPACE
     subjects:
     - kind: User
       name: USERNAME
       apiGroup: rbac.authorization.k8s.io
     roleRef:
       kind: ClusterRole
       name: OPERATOR_ROLE
       apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el espacio de nombres que creaste al repositorio raíz.
    • USERNAME: Agrega el nombre de usuario del operador de la aplicación.
    • OPERATOR_ROLE: Como administrador central, puedes configurar OPERATOR_ROLE para aplicar de forma forzosa los tipos de configuraciones que se pueden sincronizar desde el repositorio de espacios de nombres. Puedes elegir una de las siguientes funciones:

      • Una ClusterRole predeterminada:

        • admin
        • edit

        Para obtener más información, consulta Funciones orientadas al usuario.

      • Una ClusterRole o una Role definida por el usuario que se declara en el repositorio raíz. Esta función admite permisos detallados.

  3. Confirme los cambios en el repositorio raíz:

     git add .
     git commit -m 'Setting up new namespace repository.'
     git push
    

Tareas del operador de la aplicación

El operador de la aplicación completa las siguientes tareas:

  1. Declara una configuración RoleBinding que otorga el permiso ns-reconciler-NAMESPACE de la cuenta de servicio aprovisionado de forma automática para administrar los recursos en el espacio de nombres. El Sincronizador de configuración crea de forma automática la cuenta de servicio ns-reconciler-NAMESPACE cuando la configuración RepoSync se sincroniza con el clúster.

    Para declarar RoleBinding, crea el siguiente manifiesto:

    # sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: ns-reconciler-NAMESPACE
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el espacio de nombres que creaste al repositorio raíz.
    • RECONCILER_ROLE: Como operador de la aplicación, puedes configurar RECONCILER_ROLE para aplicar los tipos de configuración que se pueden sincronizar desde el repositorio de espacios de nombres. Solo puedes restringir aún más el conjunto de permisos que te otorgó el administrador central. Como resultado, esta función no puede ser más permisiva que la OPERATOR_ROLE que el administrador central declaró en la sección anterior.
  2. Aplica la configuración de RoleBinding:

    kubectl apply -f sync-rolebinding.yaml
    
  3. Si es necesario, crea un Secret según tu método de autenticación preferido. Si usaste none como el tipo de autenticación, puedes omitir este paso.

    El Secret debe cumplir con los siguientes requisitos:

    • Crea el Secret en el mismo espacio de nombres que RepoSync.
    • El nombre del Secret debe coincidir con el nombre de spec.git.secretRef que definiste en root-sync.yaml.
    • Debes agregar la clave pública del Secret al proveedor de Git.
  4. Declara una configuración de RepoSync:

    # repo-sync.yaml
    # If you are using a Config Sync version earlier than 1.8.0,
    # use: apiVersion: configsync.gke.io/v1alpha1
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: repo-sync
      namespace: NAMESPACE
    spec:
      # Since this is for a namespace repository, the format should be unstructured
      sourceFormat: unstructured
      git:
       repo: NAMESPACE_REPOSITORY
       revision: NAMESPACE_REVISION
       branch: NAMESPACE_BRANCH
       dir: "NAMESPACE_DIRECTORY"
       auth: NAMESPACE_AUTH_TYPE
       gcpServiceAccountEmail: NAMESPACE_EMAIL
       secretRef:
         name: NAMESPACE_SECRET_NAME
       # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later.
       noSSLVerify: REPO_SSL_VERIFY
    

    Reemplaza lo siguiente:

    • NAMESPACE_REPOSITORY: agrega la URL del repositorio de Git para usarlo como repositorio de espacio de nombres. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS. Este campo es obligatorio.
    • NAMESPACE_REVISION: Agrega la revisión de Git (etiqueta o hash) que deseas consultar. Este campo es opcional y el valor predeterminado es HEAD.
    • NAMESPACE_BRANCH: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado es master.
    • NAMESPACE_DIRECTORY: agrega la ruta de acceso en el repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar. Este campo es opcional y el predeterminado es el directorio raíz (/) del repositorio.
    • NAMESPACE_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • ssh: Usa un par de claves SSH
      • cookiefile: Usa un objeto cookiefile
      • token: Usa un token
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories.
      • gcenode: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories. Selecciona esta opción solo si Workload Identity no está habilitado en tu clúster.

        Para obtener más información sobre estos tipos de autenticación, consulta Otorga a Git acceso de solo lectura al Sincronizador de configuración.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu AUTH_TYPE, agrega la dirección de correo electrónico de la cuenta de servicio de Google. Por ejemplo, acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME: Agrega el nombre que deseas darle a tu objeto Secret. Este campo es opcional.

    • NAMESPACE_NO_SSL_VERIFY: Para inhabilitar la verificación del certificado SSL, establece este campo en true. El valor predeterminado es false.

    Para obtener una explicación de los campos y una lista completa de los campos que puedes agregar al campo spec, consulta Campos de RepoSync.

    Puede haber, como máximo, un objeto RepoSync por espacio de nombres. Para hacer esto, el name del objeto debe ser repo-sync. Todas las configuraciones que se encuentran en el directorio al que hace referencia RepoSync deben estar en el mismo espacio de nombres que el recurso RepoSync.

  5. Aplica la configuración de RepoSync:

    kubectl apply -f repo-sync.yaml
    
  6. Para verificar la configuración, usa kubectl get en uno de los objetos del repositorio de espacios de nombres. Por ejemplo:

    kubectl get rolebindings -n NAMESPACE
    

Verifica el estado de sincronización del repositorio de espacio de nombres

Puedes usar el comando nomos status para inspeccionar el estado de sincronización del repositorio de espacio de nombres:

nomos status

Deberías ver un resultado similar al siguiente:

my_managed_cluster-1
  --------------------
  <root>   git@github.com:foo-corp/acme/admin@main
  SYNCED   f52a11e4
  --------------------
  bookstore  git@github.com:foo-corp/acme/bookstore@v1
  SYNCED     34d1a8c8

En este resultado de ejemplo, el repositorio del espacio de nombres se configura para un espacio de nombres llamado bookstore.

Verifica la instalación de RepoSync

Cuando creas un objeto RepoSync, el Sincronizador de configuración crea un conciliador llamado ns-reconciler-NAMESPACE, en el que NAMESPACE es el espacio de nombres en el que creaste el objeto RepoSync.

Para verificar que el objeto RepoSync funcione correctamente, verifica el estado de la implementación de ns-reconciler-NAMESPACE:

kubectl get -n config-management-system deployment/ns-reconciler-NAMESPACE

Reemplaza NAMESPACE por el espacio de nombres en el que creaste el repositorio de espacio de nombres.

Para conocer más formas de explorar el estado del objeto RepoSync, consulta la sección Explora los objetos RootSync y RepoSync.

Quita un repositorio de espacio de nombres

Selecciona la pestaña Método del repositorio raíz o Método de la API de Kubernetes para ver las instrucciones relevantes.

Método del repositorio raíz

Si usaste el método Control de repositorios de espacios de nombres en el repositorio raíz, un administrador central puede seguir los dos pasos siguientes para quitar un repositorio de espacios de nombres:

  1. Para administrar o borrar los recursos administrados por el objeto RepoSync, sigue las instrucciones para solucionar problemas.

  2. Quita el objeto RepoSync del repositorio de Git.

Método de la API de Kubernetes

Si usaste el método Controla repositorios de espacios de nombres con la API de Kubernetes, los operadores de aplicaciones pueden seguir estos dos pasos para quitar un repositorio de espacio de nombres:

  1. Para administrar o borrar los recursos administrados por el objeto RepoSync, sigue las instrucciones para solucionar problemas.

  2. Borra el objeto RepoSync mediante la ejecución del siguiente comando:

    kubectl delete -f repo-sync.yaml
    

¿Qué sigue?