Configura la sincronización desde más de una fuente de información

En esta página, se explica cómo configurar más de una fuente de información raíz con un alcance de espacio de nombres mediante la creación de objetos RootSync y RepoSync.

Tener una fuente de información raíz te permite sincronizar configuraciones con permiso de clúster y con un alcance de espacio de nombres. Una fuente de información raíz puede usar credenciales a nivel de administrador para aplicar políticas en los espacios de nombres de la aplicación y anular los cambios locales que se desvían del estado que declaraste en los archivos de configuración. Por lo general, un administrador central rige las fuentes de información raíz.

Las fuentes de información con un alcance de espacio de nombres son opcionales y pueden contener archivos de configuración con un alcance de espacio de nombres que están sincronizados con un espacio de nombres particular en todos los clústeres. Puedes delegar la configuración y el control de una fuente de información con un alcance de espacio de nombres a usuarios no administrativos. 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 una fuente de información con un alcance de espacio de nombres. Para obtener más información sobre cómo hacerlo, consulta Evita el desvío de la configuración.

Antes de comenzar

  • Crea o asegúrate de tener acceso a una fuente de información no estructurada que pueda contener las opciones de configuración con las que se sincroniza el Sincronizador de configuración. El Sincronizador de configuración admite repositorios de Git, gráficos de Helm e imágenes de OCI como fuente de información. Las fuentes de información con un alcance de espacio de nombres deben usar el formato no estructurado.
  • Crea un clúster que cumpla con los requisitos del Sincronizador de configuración o asegúrate de tener acceso a uno que se encuentre en una plataforma y versión compatibles de la edición de Google Kubernetes Engine (GKE) Enterprise.

Limitaciones

Elige tu método de configuración preferido

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

Controla las fuentes en una fuente de información raíz

Controla las fuentes raíz en una fuente de información raíz

El Sincronizador de configuración admite la sincronización desde más de una fuente de información. El administrador central puede usar una fuente de información raíz para administrar todas las demás fuentes. Debido a que el Sincronizador de configuración administra los objetos RootSync, este método evita cualquier cambio local en la configuración de RootSync del clúster.

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

  1. Guarda uno de los siguientes manifiestos como root-sync.yaml. Usa la versión del manifiesto que corresponda al tipo de fuente de tus parámetros de configuración.

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_REPOSITORY: agrega la URL del repositorio de Git para usarlo como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • ROOT_REVISION: Agrega la revisión de Git (etiqueta o hash) desde la que se debe sincronizar. Este campo es opcional y el valor predeterminado es HEAD. A partir de la versión 1.17.0 del Sincronizador de configuración, también puedes especificar un nombre de rama en el campo revision. Cuando uses un hash en la versión 1.17.0 o posterior, debe ser un hash completo, no una forma abreviada.
    • ROOT_BRANCH: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado es master. A partir de la versión 1.17.0 del Sincronizador de configuración, se recomienda usar el campo revision para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos revision y branch, revision tiene prioridad sobre branch.
    • ROOT_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.
    • ROOT_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 Cloud Source Repositories.
      • gcenode: Usa una cuenta de servicio de Google para acceder a Cloud Source Repositories. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada 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.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, debes agregar la clave pública de Secret al proveedor de Git. Este campo es opcional.

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

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa Git como fuente.

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_IMAGE: URL de la imagen de OCI que se usa como repositorio raíz, por ejemplo, LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. De forma predeterminada, la imagen se extrae de la etiqueta latest, pero puedes extraer imágenes mediante TAG o DIGEST. Especifica TAG o DIGEST en el PACKAGE_NAME:
      • Para extraer antes del TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Para extraer antes del DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY: agrega la ruta de acceso en el repositorio 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.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si se establece este campo, tu proveedor de OCI debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

    Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa una imagen de OCI como fuente.

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_HELM_REPOSITORY: Es la URL del repositorio de Helm que se usará como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • HELM_CHART_NAME: Agrega el nombre de tu diagrama de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica un valor, se usa la versión más reciente.
    • HELM_RELEASE_NAME: Es el nombre de la versión de Helm. Este campo es opcional.
    • HELM_RELEASE_NAMESPACE: Es el espacio de nombres de destino para una versión. Solo establece un espacio de nombres para los recursos que contienen namespace: {{ .Release.Namespace }} en sus plantillas. Este campo es opcional. Si no se especifica ningún valor, se usa el espacio de nombres predeterminado config-management-system.
    • HELM_INCLUDE_CRDS: Se establece en true si deseas que la plantilla de Helm también genere una CustomResourceDefinition. Este campo es opcional. Si no se especifica ningún valor, el valor predeterminado es false y no se generará una CRD.
    • VALUE: valores para usar en lugar de valores predeterminados que acompañan al gráfico de Helm Dale formato a este campo de la misma manera que al archivo values.yaml del gráfico de Helm. Este campo es opcional.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • token: Usa un nombre de usuario y una contraseña para acceder a un repositorio de Helm privado.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_SECRET_NAME: Agrega el nombre de tu secreto si token es el ROOT_AUTH_TYPE. Este campo es opcional.

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Helm debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

    Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa Helm como fuente.

  2. Confirma los cambios en la fuente de información raíz:

     git add .
     git commit -m 'Setting up a new root source of truth.'
     git push
    
  3. Puedes repetir los pasos anteriores si necesitas configurar varios repositorios raíz. También puedes almacenar configuraciones de varios objetos RootSync en una fuente de información raíz sincronizada por otro objeto RootSync para administrar varios objetos RootSync de forma centralizada de manera GitOps.

Controla los objetos con alcance de espacio de nombres en una fuente de información raíz

Una fuente de información raíz puede administrar las fuentes de información con alcance de espacio de nombres. Debido a que el Sincronizador de configuración administra las fuentes con alcance de espacio de nombres, este método evita cualquier cambio local en las definiciones de fuentes con alcance de espacio de nombres.

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

  1. En la fuente de información raíz, declara una configuración namespace:

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

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

  2. En la fuente de información raíz, crea uno de los siguientes objetos RepoSync en el mismo espacio de nombres. Usa el manifiesto que corresponda al tipo de fuente de tus configuraciones:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is 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
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • 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) desde la que se realizará la sincronización. Este campo es opcional y el valor predeterminado es HEAD. A partir de la versión 1.17.0 del Sincronizador de configuración, también puedes especificar un nombre de rama en el campo revision. Cuando uses un hash en la versión 1.17.0 o posterior, debe ser un hash completo, no una forma abreviada.
    • 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. A partir de la versión 1.17.0 del Sincronizador de configuración, se recomienda usar el campo revision para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos revision y branch, revision tiene prioridad sobre branch.
    • 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 la Workload Identity Federation for GKE no está habilitada 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 NAMESPACE_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.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

    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.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_IMAGE: Es la URL de la imagen de OCI que se usa como fuente de espacio de nombres, por ejemplo, LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. De forma predeterminada, la imagen se extrae de la etiqueta latest, pero puedes extraer imágenes mediante TAG o DIGEST. Especifica TAG o DIGEST en el PACKAGE_NAME:

      • Para extraer antes del TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Para extraer antes del DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: agrega la ruta de acceso en el repositorio 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
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si se establece este campo, tu proveedor de OCI debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_REPOSITORY: Es la URL del repositorio de Helm que se usará como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • HELM_CHART_NAME: Agrega el nombre de tu diagrama de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica un valor, se usa la versión más reciente.
    • HELM_RELEASE_NAME: Es el nombre de la versión de Helm. Este campo es opcional.
    • HELM_RELEASE_NAMESPACE: Es el espacio de nombres de destino para una versión. Solo establece un espacio de nombres para los recursos que contienen namespace: {{ .Release.Namespace }} en sus plantillas. Este campo es opcional. Si no se especifica ningún valor, se usa el espacio de nombres predeterminado config-management-system.
    • HELM_INCLUDE_CRDS: Se establece en true si deseas que la plantilla de Helm también genere una CustomResourceDefinition. Este campo es opcional. Si no se especifica ningún valor, el valor predeterminado es false y no se generará una CRD.
    • VALUE: valores para usar en lugar de valores predeterminados que acompañan al gráfico de Helm Dale formato a este campo de la misma manera que al archivo values.yaml del gráfico de Helm. Este campo es opcional.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • token: Usa un nombre de usuario y una contraseña para acceder a un repositorio de Helm privado.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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 de tu secreto si token es el ROOT_AUTH_TYPE. Este campo es opcional.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Helm debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

  3. Si usas gcpserviceaccount como el tipo de autenticación y no tienes habilitada la Workload Identity Federation for GKE, debes crear una vinculación de políticas de IAM entre la cuenta de servicio de Kubernetes de cada espacio de nombres y la cuenta de servicio de Google. Consulta Otorga acceso a Git para obtener instrucciones sobre cómo crear esta vinculación.

  4. En la fuente raíz, declara una configuración RoleBinding que otorgue a la cuenta de servicio SERVICE_ACCOUNT_NAME permiso para administrar objetos en el espacio de nombres. El Sincronizador de configuración crea de forma automática la cuenta de servicio SERVICE_ACCOUNT_NAME cuando la configuración del RepoSync se sincroniza con el clúster.

    Un RoleBinding puede hacer referencia a un Role en el mismo espacio de nombres. Como alternativa, un RoleBinding puede hacer referencia a un ClusterRole y vincular este ClusterRole al espacio de nombres del RoleBinding. Si bien debes cumplir con el principio de privilegio mínimo otorgando permisos detallados a un Role definido por el usuario, puedes definir un ClusterRole o usar roles para usuarios, y hacer referencia al mismo ClusterRole en varios RoleBindings en diferentes espacios de nombres.

    ClusterRoles predeterminados

    Puedes declarar un RoleBinding que haga referencia a un ClusterRole predeterminado, por ejemplo, admin o edit. Para obtener más información, consulta Funciones para el usuario.

    # 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: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • SERVICE_ACCOUNT_NAME: Agrega el nombre de la cuenta de servicio del conciliador. Si el nombre del RepoSync es repo-sync, SERVICE_ACCOUNT_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH. Por ejemplo, si el nombre del RepoSync es prod, entonces el SERVICE_ACCOUNT_NAME sería ns-reconciler-NAMESPACE-prod-4. El número entero 4 se usa como prod y contiene 4 caracteres.
    • CLUSTERROLE_NAME: Agrega el nombre del ClusterRole predeterminado.

    Roles definidos por el usuario

    Para declarar un ClusterRole o un Role, otorga una lista de permisos a cada recurso que administra el objeto RepoSync. Esto permite el uso de permisos detallados. Consulta Referencia a recursos para obtener más detalles.

    Por ejemplo, el siguiente ClusterRole o Role otorga permisos para gestionar objetos Deployment y ServiceAccount.

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    Para declarar un RoleBinding que haga referencia a ClusterRole o Role, crea el siguiente objeto. El RoleBinding otorga permisos adicionales para permitir que el Sincronizador de configuración administre recursos con alcance de espacio de nombres para un RepoSync determinado.

    # 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: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • ROLE_KIND: Establece ClusterRole o Role.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • SERVICE_ACCOUNT_NAME: Agrega el nombre de la cuenta de servicio del conciliador. Si el nombre del RepoSync es repo-sync, SERVICE_ACCOUNT_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH. Por ejemplo, si el nombre del RepoSync es prod, entonces el SERVICE_ACCOUNT_NAME sería ns-reconciler-NAMESPACE-prod-4. El número entero 4 se usa como prod y contiene 4 caracteres.
    • RECONCILER_ROLE: Agrega el nombre de ClusterRole o Role.
  5. Confirma los cambios en la fuente de información raíz:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  6. 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.
  7. Para verificar la configuración, usa kubectl get en uno de los objetos de la fuente de espacios de nombres. Por ejemplo:

    kubectl get rolebindings -n NAMESPACE
    
  8. Puedes repetir los pasos anteriores si necesitas configurar más de una fuente con alcance de espacio de nombres.

Controla las fuentes con alcance de espacio de nombres en una fuente con alcance de espacio de nombres

El Sincronizador de configuración admite la sincronización desde más de una fuente de información con alcance de espacio de nombres por espacio de nombres. Las fuentes de información con alcance de espacio de nombres se pueden administrar en una fuente de información con alcance de espacio de nombres en el mismo espacio de nombres.

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

  1. En la fuente de verdad con alcance de espacio de nombres, crea uno de los siguientes objetos RepoSync en el mismo espacio de nombres. Usa el manifiesto que corresponda al tipo de fuente de tus configuraciones:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is 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
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • 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) desde la que se realizará la sincronización. Este campo es opcional y el valor predeterminado es HEAD. A partir de la versión 1.17.0 del Sincronizador de configuración, también puedes especificar un nombre de rama en el campo revision. Cuando uses un hash en la versión 1.17.0 o posterior, debe ser un hash completo, no una forma abreviada.
    • 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. A partir de la versión 1.17.0 del Sincronizador de configuración, se recomienda usar el campo revision para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos revision y branch, revision tiene prioridad sobre branch.
    • 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 la Workload Identity Federation for GKE no está habilitada 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 NAMESPACE_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.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

    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.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_IMAGE: Es la URL de la imagen de OCI que se usa como fuente de espacio de nombres, por ejemplo, LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. De forma predeterminada, la imagen se extrae de la etiqueta latest, pero puedes extraer imágenes mediante TAG o DIGEST. Especifica TAG o DIGEST en el PACKAGE_NAME:

      • Para extraer antes del TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Para extraer antes del DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: agrega la ruta de acceso en el repositorio 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
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si se establece este campo, tu proveedor de OCI debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_REPOSITORY: Es la URL del repositorio de Helm que se usará como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • HELM_CHART_NAME: Agrega el nombre de tu diagrama de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica un valor, se usa la versión más reciente.
    • HELM_RELEASE_NAME: Es el nombre de la versión de Helm. Este campo es opcional.
    • HELM_RELEASE_NAMESPACE: Es el espacio de nombres de destino para una versión. Solo establece un espacio de nombres para los recursos que contienen namespace: {{ .Release.Namespace }} en sus plantillas. Este campo es opcional. Si no se especifica ningún valor, se usa el espacio de nombres predeterminado config-management-system.
    • HELM_INCLUDE_CRDS: Se establece en true si deseas que la plantilla de Helm también genere una CustomResourceDefinition. Este campo es opcional. Si no se especifica ningún valor, el valor predeterminado es false y no se generará una CRD.
    • VALUE: valores para usar en lugar de valores predeterminados que acompañan al gráfico de Helm Dale formato a este campo de la misma manera que al archivo values.yaml del gráfico de Helm. Este campo es opcional.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • token: Usa un nombre de usuario y una contraseña para acceder a un repositorio de Helm privado.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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 de tu secreto si token es el ROOT_AUTH_TYPE. Este campo es opcional.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Helm debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

  2. Si usas gcpserviceaccount como el tipo de autenticación y no tienes habilitada la Workload Identity Federation for GKE, debes crear una vinculación de políticas de IAM entre la cuenta de servicio de Kubernetes de cada espacio de nombres y la cuenta de servicio de Google. Consulta Otorga acceso a Git para obtener instrucciones sobre cómo crear esta vinculación.

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

    Un RoleBinding puede hacer referencia a un Role en el mismo espacio de nombres. Como alternativa, un RoleBinding puede hacer referencia a un ClusterRole y vincular este ClusterRole al espacio de nombres del RoleBinding. Si bien debes cumplir con el principio de privilegio mínimo otorgando permisos detallados a un Role definido por el usuario, puedes definir un ClusterRole o usar roles para usuarios, y hacer referencia al mismo ClusterRole en varios RoleBindings en diferentes espacios de nombres.

    ClusterRoles predeterminados

    Puedes declarar un RoleBinding que haga referencia a un ClusterRole predeterminado, por ejemplo, admin o edit. Para obtener más información, consulta Funciones para el usuario.

    # 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: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • SERVICE_ACCOUNT_NAME: Agrega el nombre de la cuenta de servicio del conciliador. Si el nombre del RepoSync es repo-sync, SERVICE_ACCOUNT_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH. Por ejemplo, si el nombre del RepoSync es prod, entonces el SERVICE_ACCOUNT_NAME sería ns-reconciler-NAMESPACE-prod-4. El número entero 4 se usa como prod y contiene 4 caracteres.
    • CLUSTERROLE_NAME: Agrega el nombre del ClusterRole predeterminado.

    Roles definidos por el usuario

    Para declarar un ClusterRole o un Role, otorga una lista de permisos a cada recurso que administra el objeto RepoSync. Esto permite el uso de permisos detallados. Consulta Referencia a recursos para obtener más detalles.

    Por ejemplo, el siguiente ClusterRole o Role otorga permisos para gestionar objetos Deployment y ServiceAccount.

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    Para declarar un RoleBinding que haga referencia a ClusterRole o Role, crea el siguiente objeto. El RoleBinding otorga permisos adicionales para permitir que el Sincronizador de configuración administre recursos con alcance de espacio de nombres para un RepoSync determinado.

    # 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: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    Reemplaza lo siguiente:

    • ROLE_KIND: Establece ClusterRole o Role.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • SERVICE_ACCOUNT_NAME: Agrega el nombre de la cuenta de servicio del conciliador. Si el nombre del RepoSync es repo-sync, SERVICE_ACCOUNT_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH. Por ejemplo, si el nombre del RepoSync es prod, entonces el SERVICE_ACCOUNT_NAME sería ns-reconciler-NAMESPACE-prod-4. El número entero 4 se usa como prod y contiene 4 caracteres.
    • RECONCILER_ROLE: Agrega el nombre de ClusterRole o Role.
  4. Confirma los cambios en la fuente de información raíz:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     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 de la fuente de información con alcance de espacio de nombres. Por ejemplo:

    kubectl get rolebindings -n NAMESPACE
    
  7. Puedes repetir los pasos anteriores si necesitas configurar más de una fuente con alcance de espacio de nombres.

Controla una fuente de información con la API de Kubernetes

En este método, el administrador central delega la declaración de otros objetos RootSync a otros administradores. Para los objetos RepoSync, el administrador central solo declara el espacio de nombres en la fuente de información raíz y delega la declaración del objeto RepoSync al operador de la aplicación.

Controla más de una fuente de información raíz

Otros administradores pueden controlar una fuente de información raíz completando las siguientes tareas:

  1. Guarda uno de los siguientes manifiestos como root-sync.yaml. Usa la versión del manifiesto que corresponda al tipo de fuente de tus parámetros de configuración.

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_REPOSITORY: agrega la URL del repositorio de Git para usarlo como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • ROOT_REVISION: Agrega la revisión de Git (etiqueta o hash) desde la que se debe sincronizar. Este campo es opcional y el valor predeterminado es HEAD. A partir de la versión 1.17.0 del Sincronizador de configuración, también puedes especificar un nombre de rama en el campo revision. Cuando uses un hash en la versión 1.17.0 o posterior, debe ser un hash completo, no una forma abreviada.
    • ROOT_BRANCH: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado es master. A partir de la versión 1.17.0 del Sincronizador de configuración, se recomienda usar el campo revision para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos revision y branch, revision tiene prioridad sobre branch.
    • ROOT_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.
    • ROOT_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 Cloud Source Repositories.
      • gcenode: Usa una cuenta de servicio de Google para acceder a Cloud Source Repositories. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada 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.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, debes agregar la clave pública de Secret al proveedor de Git. Este campo es opcional.

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

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa Git como fuente.

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_IMAGE: URL de la imagen de OCI que se usa como repositorio raíz, por ejemplo, LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. De forma predeterminada, la imagen se extrae de la etiqueta latest, pero puedes extraer imágenes mediante TAG o DIGEST. Especifica TAG o DIGEST en el PACKAGE_NAME:
      • Para extraer antes del TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Para extraer antes del DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY: agrega la ruta de acceso en el repositorio 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.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si se establece este campo, tu proveedor de OCI debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

    Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa una imagen de OCI como fuente.

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • ROOT_SYNC_NAME: Agrega el nombre de tu objeto RootSync.
    • ROOT_FORMAT: agrega unstructured para usar un repositorio no estructurado o agrega hierarchy a fin de usar un repositorio jerárquico. Estos valores distinguen entre mayúsculas y minúsculas. Este campo es opcional y el valor predeterminado es hierarchy. Te recomendamos que agregues unstructured, ya que este formato te permite organizar la configuración de la manera que te resulte más conveniente.
    • ROOT_HELM_REPOSITORY: Es la URL del repositorio de Helm que se usará como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • HELM_CHART_NAME: Agrega el nombre de tu diagrama de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica un valor, se usa la versión más reciente.
    • HELM_RELEASE_NAME: Es el nombre de la versión de Helm. Este campo es opcional.
    • HELM_RELEASE_NAMESPACE: Es el espacio de nombres de destino para una versión. Solo establece un espacio de nombres para los recursos que contienen namespace: {{ .Release.Namespace }} en sus plantillas. Este campo es opcional. Si no se especifica ningún valor, se usa el espacio de nombres predeterminado config-management-system.
    • HELM_INCLUDE_CRDS: Se establece en true si deseas que la plantilla de Helm también genere una CustomResourceDefinition. Este campo es opcional. Si no se especifica ningún valor, el valor predeterminado es false y no se generará una CRD.
    • VALUE: valores para usar en lugar de valores predeterminados que acompañan al gráfico de Helm Dale formato a este campo de la misma manera que al archivo values.yaml del gráfico de Helm. Este campo es opcional.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • token: Usa un nombre de usuario y una contraseña para acceder a un repositorio de Helm privado.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • ROOT_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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

    • ROOT_SECRET_NAME: Agrega el nombre de tu secreto si token es el ROOT_AUTH_TYPE. Este campo es opcional.

    • ROOT_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Helm debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

    Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Mediante este manifiesto, se crea un objeto RootSync que usa Helm como fuente.

  2. Aplica los cambios:

    kubectl apply -f root-sync.yaml
    
  3. Puedes repetir los pasos anteriores si necesitas configurar más de una fuente de información raíz.

Controla las fuentes de información con alcance de espacio de nombres

Tareas del administrador central

El administrador central completa las siguientes tareas:

  1. En la fuente de información raíz, declara una configuración namespace para las fuentes con alcance de espacio de nombres.

    # 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 la fuente de información raíz, declara una configuración RoleBinding para otorgar permisos a los operadores de la aplicación. Usa la Prevención de derivació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 en la fuente de información 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 la fuente con alcance de espacio de nombres. Puedes elegir una de las siguientes funciones:

      • Una ClusterRole predeterminada:

        • admin
        • edit

        Para obtener más información, consulta Funciones para el usuario.

      • Un ClusterRole o Role definido por el usuario que se declara en la fuente de información raíz. Esta función admite permisos detallados.

  3. Confirma los cambios en la fuente de información raíz:

     git add .
     git commit -m 'Setting up new namespace-scoped source of truth.'
     git push
    

Tareas del operador de la aplicación

El operador de la aplicación puede controlar las fuentes con alcance de espacio de nombres completando las siguientes tareas:

  1. Declara una configuración RoleBinding que otorga el permiso SERVICE_ACCOUNT_NAME 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 SERVICE_ACCOUNT_NAME 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: SERVICE_ACCOUNT_NAME
      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 en la fuente de información raíz.
    • SERVICE_ACCOUNT_NAME: Agrega el nombre de la cuenta de servicio del conciliador. Si el nombre del RepoSync es repo-sync, SERVICE_ACCOUNT_NAME es ns-reconciler-NAMESPACE. De lo contrario, es ns-reconciler-NAMESPACE-REPO_SYNC_NAME.
    • RECONCILER_ROLE: Como operador de la aplicación, puedes configurar RECONCILER_ROLE para aplicar los tipos de configuración que se pueden sincronizar desde la fuente con alcance de espacio 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:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is 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
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • 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) desde la que se realizará la sincronización. Este campo es opcional y el valor predeterminado es HEAD. A partir de la versión 1.17.0 del Sincronizador de configuración, también puedes especificar un nombre de rama en el campo revision. Cuando uses un hash en la versión 1.17.0 o posterior, debe ser un hash completo, no una forma abreviada.
    • 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. A partir de la versión 1.17.0 del Sincronizador de configuración, se recomienda usar el campo revision para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos revision y branch, revision tiene prioridad sobre branch.
    • 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 la Workload Identity Federation for GKE no está habilitada 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 NAMESPACE_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.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

    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.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_IMAGE: Es la URL de la imagen de OCI que se usa como fuente de espacio de nombres, por ejemplo, LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. De forma predeterminada, la imagen se extrae de la etiqueta latest, pero puedes extraer imágenes mediante TAG o DIGEST. Especifica TAG o DIGEST en el PACKAGE_NAME:

      • Para extraer antes del TAG: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • Para extraer antes del DIGEST: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: agrega la ruta de acceso en el repositorio 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
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si se establece este campo, tu proveedor de OCI debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    Reemplaza lo siguiente:

    • REPO_SYNC_NAME: Agrega el nombre de tu objeto RepoSync. El nombre debe ser único en el espacio de nombres.
    • NAMESPACE: Agrega el nombre de tu espacio de nombres.
    • NAMESPACE_REPOSITORY: Es la URL del repositorio de Helm que se usará como repositorio raíz. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Este campo es obligatorio.
    • HELM_CHART_NAME: Agrega el nombre de tu diagrama de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica un valor, se usa la versión más reciente.
    • HELM_RELEASE_NAME: Es el nombre de la versión de Helm. Este campo es opcional.
    • HELM_RELEASE_NAMESPACE: Es el espacio de nombres de destino para una versión. Solo establece un espacio de nombres para los recursos que contienen namespace: {{ .Release.Namespace }} en sus plantillas. Este campo es opcional. Si no se especifica ningún valor, se usa el espacio de nombres predeterminado config-management-system.
    • HELM_INCLUDE_CRDS: Se establece en true si deseas que la plantilla de Helm también genere una CustomResourceDefinition. Este campo es opcional. Si no se especifica ningún valor, el valor predeterminado es false y no se generará una CRD.
    • VALUE: valores para usar en lugar de valores predeterminados que acompañan al gráfico de Helm Dale formato a este campo de la misma manera que al archivo values.yaml del gráfico de Helm. Este campo es opcional.
    • ROOT_AUTH_TYPE: Agrega uno de los siguientes tipos de autenticación:

      • none: No usa autenticación
      • token: Usa un nombre de usuario y una contraseña para acceder a un repositorio de Helm privado.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • gcpserviceaccount: Usa una cuenta de servicio de Google para acceder a una imagen.

      Este campo es obligatorio.

    • NAMESPACE_EMAIL: Si agregaste gcpserviceaccount como tu ROOT_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 de tu secreto si token es el ROOT_AUTH_TYPE. Este campo es opcional.

    • NAMESPACE_CA_CERT_SECRET_NAME: agrega el nombre del secreto. Si este campo está configurado, tu proveedor de Helm debe usar un certificado emitido por esta autoridad certificadora (AC). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Para obtener más información sobre cómo configurar el objeto secreto para el certificado de la AC, consulta Cómo configurar la AC.

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

  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 de la fuente con alcance de espacio de nombres. Por ejemplo:

    kubectl get rolebindings -n NAMESPACE
    
  7. Puedes repetir los pasos anteriores si necesitas configurar varias fuentes de información con alcance de espacio de nombres.

Verifica el estado de sincronización de la fuente de confianza

Puedes usar el comando nomos status para inspeccionar el estado de sincronización de la fuente de información:

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, la fuente con alcance de espacio de nombres, en este caso un repositorio de Git, se configura para un espacio de nombres llamado bookstore.

Verifica la instalación de RootSync

Cuando creas un objeto RootSync, el Sincronizador de configuración crea un conciliador con el prefijo root-reconciler. Un conciliador es un Pod que se implementa como una implementación. Sincroniza los manifiestos de una fuente de información a un clúster.

Para verificar que el objeto RootSync funcione de forma correcta, verifica el estado del Deployment del conciliador raíz:

kubectl get -n config-management-system deployment \
    -l configsync.gke.io/sync-name=ROOT_SYNC_NAME

Reemplaza ROOT_SYNC_NAME por el nombre de RootSync.

Deberías ver un resultado similar al siguiente:

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
root-reconciler   1/1     1            1           3h42m

Para conocer más formas de explorar el estado de tu objeto RootSync, consulta Supervisa los objetos RootSync y RepoSync.

Verifica la instalación de RepoSync

Cuando creas un objeto RepoSync, el Sincronizador de configuración crea un conciliador con el prefijo 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 de forma correcta, verifica el estado del Deployment del conciliador de espacio de nombres:

kubectl get -n config-management-system deployment \
  -l configsync.gke.io/sync-name=REPO_SYNC_NAME \
  -l configsync.gke.io/sync-namespace=NAMESPACE

Reemplaza REPO_SYNC_NAME por el nombre de RepoSync y reemplaza NAMESPACE por el espacio de nombres en el que creaste tu fuente de información con alcance 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.

Cómo quitar una fuente de información

Selecciona la pestaña Método de control central o Método de la API de Kubernetes para ver las instrucciones relevantes.

Método de control central

Si usaste el método Controla fuentes de información en una fuente de información raíz, un administrador central puede seguir los dos pasos siguientes para quitar una fuente de información:

  1. Decide si deseas borrar o conservar los recursos que se administran a través de tus objetos RootSync y RepoSync.

    • Para borrar todos los recursos que administran tus objetos RootSync o RepoSync, sincroniza tu objeto RootSync o RepoSync con una fuente vacía. Por ejemplo, un repositorio de GitHub sin configuraciones. Si tu objeto RootSync o RepoSync contiene otro objeto RootSync o RepoSync, el RootSync o RepoSync interno primero debe sincronizarse con un repositorio de Git vacío.

    • Si habilitaste el webhook y quieres conservar tus recursos, inhabilita la prevención de desvíos para recursos abandonados. Si no habilitaste el webhook, no tienes que realizar ningún paso adicional para conservar tus recursos.

  2. Quita el objeto RootSync o RepoSync de la fuente de información.

Método de la API de Kubernetes

Si usaste el método Controla fuentes de verdad con alcance de espacio de nombres con la API de Kubernetes, los operadores de aplicaciones pueden seguir estos pasos para quitar una fuente de información con alcance de espacio de nombres:

  1. Decide si deseas borrar o conservar los recursos que se administran a través de tus objetos RootSync y RepoSync.

    • Para borrar todos los recursos que administran tus objetos RootSync o RepoSync, sincroniza tu objeto RootSync o RepoSync con una fuente vacía. Por ejemplo, un repositorio de GitHub sin configuraciones. Si tu objeto RootSync o RepoSync contiene otro objeto RootSync o RepoSync, el RootSync o RepoSync interno primero debe sincronizarse con un repositorio de Git vacío.

    • Si habilitaste el webhook y quieres conservar tus recursos, inhabilita la prevención de desvíos para recursos abandonados. Si no habilitaste el webhook, no tienes que realizar ningún paso adicional para conservar tus recursos.

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

    kubectl delete -f FILE_NAME
    

    Reemplaza FILE_NAME por el nombre de tu archivo de configuración de RootSync o RepoSync. Por ejemplo, root-sync.yaml

¿Qué sigue?