Instalar el Sincronizador de configuración

Con el Sincronizador de configuración, puedes administrar los recursos de Kubernetes con archivos de configuración almacenados en una fuente de información. El Sincronizador de configuración admite repositorios de Git, imágenes de OCI y gráficos de Helm como fuente de información. En esta página, se muestra cómo habilitar y configurar el Sincronizador de configuración para que se sincronice desde tu repositorio raíz. El Sincronizador de configuración está disponible con la edición Enterprise de Google Kubernetes Engine (GKE).

Cuando instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, las APIs de RootSync y RepoSync están habilitadas de forma predeterminada. Este operador te proporciona funciones adicionales, como la sincronización de varios repositorios y la sincronización de configuraciones de Kustomize y Helm.

Antes de comenzar

Antes de instalar el Sincronizador de configuración, prepara tu entorno, asegúrate de cumplir con los requisitos del clúster y otorga los roles de usuario correctos.

Prepara el entorno local

Completa las siguientes tareas para preparar tu entorno local:

  1. Crea una fuente de información o asegúrate de tener acceso a ella. Aquí es donde agregas los parámetros de configuración que se sincronizan con el Sincronizador de configuración. Para obtener más información sobre cómo configurar tus archivos de configuración y tu fuente de información, consulta una de las siguientes guías:
  2. Instala e inicializa Google Cloud CLI, que proporciona los comandos gcloud y nomos. Si usas Cloud Shell, Google Cloud CLI viene preinstalada. Si ya instalaste Google Cloud CLI, ejecuta gcloud components update para obtener la versión más reciente.
  3. Habilita la API de GKE Enterprise.

    Habilita la API de GKE Enterprise

Requisitos del clúster

Para usar el Sincronizador de configuración, tu clúster debe cumplir con los siguientes requisitos:

  • Debe ser una plataforma y versión compatibles de la edición Enterprise de Google Kubernetes Engine (GKE).

  • (Opcional) Si usas clústeres de GKE, asegúrate de que la Workload Identity Federation for GKE esté habilitada. Los clústeres en modo Autopilot tienen la federación de identidades para cargas de trabajo para GKE habilitada de forma predeterminada.

  • Tiene los permisos de escritura de métricas correctos para que el Sincronizador de configuración pueda enviar métricas a Cloud Monitoring.

  • Si deseas actualizar automáticamente la versión del Sincronizador de configuración, asegúrate de que tu clúster de GKE esté inscrito en un canal de versiones. El Sincronizador de configuración considera que un clúster que no usa un canal de versiones de GKE usa el canal de versiones estable.

  • Si deseas usar un clúster de GKE privado, configura Cloud NAT para permitir la salida desde nodos de GKE privados. Para obtener más detalles, consulta Ejemplo de configuración de GKE. Como alternativa, puedes habilitar el Acceso privado a Google para conectarte al conjunto de direcciones IP externas que usan los servicios y las API de Google.

  • Si deseas usar una cuenta de servicio de IAM cuando otorgas acceso a Sincronizador de configuración a tu fuente de confianza, debes incluir el permiso de solo lectura en permisos de acceso para los nodos en el clúster de Cloud Source Repositories.

    Puedes agregar el permiso de solo lectura si incluyes cloud-source-repos-ro en la lista --scopes especificada en el momento de la creación del clúster o si usas el permiso cloud-platform en el momento de la creación del clúster. Por ejemplo:

    gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
    

    No puedes modificar los permisos de acceso luego de crear un grupo de nodos. Sin embargo, puedes crear un grupo de nodos nuevo con el permiso de acceso adecuado mientras usas el mismo clúster. El permiso gke-default predeterminado no incluye cloud-source-repos-ro.

  • Si tienes requisitos estrictos de firewall de VPC que bloquean el tráfico innecesario, debes crear reglas de firewall para permitir el siguiente tráfico en los clústeres públicos de GKE:

    • TCP: Permite la entrada y salida en los puertos 53 y 443.

    • UDP: Permite la salida en el puerto 53.

    Si no incluyes estas reglas, el Sincronizador de configuración no se sincroniza correctamente, y nomos status informa el siguiente error:

    Error: KNV2004: unable to sync repo Error in the git-sync container

    Puedes omitir estos pasos si usas un clúster de GKE privado.

  • El Sincronizador de configuración debe ejecutarse en un grupo de nodos amd64. Las imágenes de contenedores de componentes del backend del Sincronizador de configuración solo se compilan, distribuyen y prueban para la arquitectura de máquinas amd64. Si se programa un componente del Sincronizador de configuración en un nodo Arm, experimenta el error exec format y falla.

    Si tienes nodos Arm en tu clúster, agrega uno o más nodos amd64 a tu clúster y, si no usas un clúster de GKE, agrega un taint a tus nodos arm64 para evitar programar Pods en tus nodos arm64 sin tolerancia específica. Los nodos de Arm de GKE ya tienen una contaminación predeterminada, por lo que no es necesario que agregues una.

Si tu clúster es de Autopilot, también debes tener en cuenta que Autopilot ajusta los requisitos de recursos del contenedor para cumplir con las siguientes reglas:

Debido a estas reglas, para los clústeres de Autopilot, el Sincronizador de configuración realiza las siguientes acciones:

Prepara tu clúster

Después de crear un clúster adecuado, completa los siguientes pasos:

  1. Otorga las funciones de IAM necesarias al usuario que registra el clúster.

  2. Si planeas usar Google Cloud CLI para configurar el Sincronizador de configuración o usar clústeres fuera de Google Cloud, asegúrate de que tus clústeres de GKE o clústeres fuera de Google Cloud estén registrados en una flota ahora. Si planeas usar la consola de Google Cloud, puedes registrar clústeres de GKE cuando configures el Sincronizador de configuración.

Instalar el Sincronizador de configuración

En las siguientes secciones, le otorgarás acceso al Sincronizador de configuración a una de las siguientes fuentes de información:

Después de otorgar acceso, puedes configurar el Sincronizador de configuración.

Otorga acceso a Git

El Sincronizador de configuración necesita acceso de solo lectura a tu repositorio de Git para que pueda leer las configuraciones confirmadas en el repositorio y aplicarlas a tus clústeres.

Si el repositorio no requiere autenticación para el acceso de solo lectura, puedes continuar con la configuración del Sincronizador de configuración y usar none como el tipo de autenticación. Por ejemplo, si puedes explorar el repositorio mediante una interfaz web sin acceder a tu cuenta, o si puedes usar git clone para crear una clonación del repositorio de forma local sin proporcionar credenciales o usar credenciales guardadas, no es necesario que realices la autenticación. En este caso, no necesitas crear un Secret.

Sin embargo, la mayoría de los usuarios deben crear credenciales porque el acceso de lectura a su repositorio está restringido. Si se requieren credenciales, se almacenan en el Secret git-creds en cada clúster inscrito (a menos que uses una cuenta de servicio de Google). El Secret debe llamarse git-creds, ya que este es un valor fijo.

El Sincronizador de configuración admite los siguientes mecanismos de autenticación:

  • Par de claves SSH (ssh)
  • Archivo cookie (cookiefile)
  • Token (token)
  • Cuenta de servicio de Google (gcpserviceaccount)
  • Cuenta de servicio predeterminada de Compute Engine (gcenode)

El mecanismo que elijas dependerá de lo que admita tu repositorio. Por lo general, recomendamos usar un par de claves SSH. GitHub y Bitbucket son compatibles con un par de claves SSH. Sin embargo, si usas un repositorio en Cloud Source Repositories, te recomendamos que uses una cuenta de servicio de Google, ya que el proceso es más simple. Si tu organización aloja tu repositorio y no sabes qué métodos de autenticación se admiten, comunícate con tu administrador.

Para usar un repositorio en Cloud Source Repositories como el repositorio del Sincronizador de configuración, completa los siguientes pasos para recuperar la URL de Cloud Source Repositories:

  1. Enumera todos los repositorios:

    gcloud source repos list
    
  2. Copia la URL del repositorio que deseas usar desde el resultado: Por ejemplo:

    REPO_NAME  PROJECT_ID  URL
    my-repo    my-project  https://source.developers.google.com/p/my-project/r/my-repo-csr
    

    Debes usar esta URL cuando configures el Sincronizador de configuración en la siguiente sección. Si configuras el Sincronizador de configuración con la consola de Google Cloud, debes agregar la URL en el campo URL. Si configuras el Sincronizador de configuración con Google Cloud CLI, debes agregar la URL al campo syncRepo del archivo de configuración.

Par de claves SSH

Un par de claves SSH consta de dos archivos, una clave pública y una clave privada. Por lo general, la clave pública tiene una extensión .pub.

Para usar un par de claves SSH, completa los siguientes pasos:

  1. Crea un par de claves SSH para permitir que el Sincronizador de configuración se autentique en tu repositorio de Git. Este paso es necesario si necesitas autenticarte en el repositorio para clonarlo o leer de él. Omite este paso si un administrador de seguridad te proporciona un par de claves. Puedes usar un solo par de claves para todos los clústeres o un par de claves por clúster, según tus requisitos de seguridad y cumplimiento.

    El siguiente comando crea una clave RSA de 4096 bits. No se recomiendan valores más bajos:

    ssh-keygen -t rsa -b 4096 \
    -C "GIT_REPOSITORY_USERNAME" \
    -N '' \
    -f /path/to/KEYPAIR_FILENAME
    

    Reemplaza lo siguiente:

    • GIT_REPOSITORY_USERNAME: El nombre de usuario que deseas que el Sincronizador de configuración use para autenticarse en el repositorio.
    • /path/to/KEYPAIR_FILENAME: Una ruta de acceso al par de claves.

    Si usas un host del repositorio de Git de terceros, como GitHub, o deseas usar una cuenta de servicio con Cloud Source Repositories, te recomendamos que uses una cuenta distinta.

  2. Configura el repositorio para que reconozca la clave pública que acabas de crear. Consulta la documentación de tu proveedor de hosting de Git. Se incluyen instrucciones para algunos proveedores de hosting de Git populares para mayor comodidad:

  3. Agrega la clave privada a un Secret nuevo del clúster:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
    

    Reemplaza /path/to/KEYPAIR_PRIVATE_KEY_FILENAME por el nombre de la clave privada (la que no tiene el sufijo .pub).

  4. (Recomendado) Para configurar la verificación de hosts conocidos con la autenticación de SSH, puedes agregar la clave de hosts conocidos al campo data.known_hosts en el secreto git_creds. Para inhabilitar la verificación de known_hosts, puedes quitar el campo known_hosts del secreto. Para agregar la clave de hosts conocidos, ejecuta lo siguiente:

    kubectl edit secret git-creds \
     --namespace=config-management-system
    

    Luego, en data, agrega la entrada de hosts conocidos:

    known_hosts: KNOWN_HOSTS_KEY
    
  5. Borra la clave privada del disco local o protégela.

  6. Cuando configures el Sincronizador de configuración y agregues la URL de tu repositorio de Git, usa el protocolo SSH. Si usas un repositorio en Cloud Source Repositories, debes usar el siguiente formato cuando ingreses tu URL:

    ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
    

    Reemplaza lo siguiente:

    • EMAIL: Tu nombre de usuario de Google Cloud
    • PROJECT_ID: El ID del proyecto de Google Cloud en el que se encuentra el repositorio
    • REPO_NAME: Es el nombre del repositorio

Archivo cookie

El proceso de adquisición de un cookiefile depende de la configuración del repositorio. Para ver un ejemplo, consulta la sección sobre cómo generar credenciales estáticas en la documentación de Cloud Source Repositories. Por lo general, las credenciales se almacenan en el archivo .gitcookies en el directorio de tu página principal, o las puede proporcionar un administrador de seguridad.

Para usar un cookiefile, completa los siguientes pasos:

  1. Después de crear y obtener el cookiefile, agrégalo a un Secret nuevo en el clúster.

    Si no usas el proxy HTTPS, crea el Secret con el siguiente comando:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=cookie_file=/path/to/COOKIEFILE
    

    Si necesitas usar un proxy HTTPS, agrégalo al Secret junto con cookiefile mediante la ejecución del siguiente comando:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=cookie_file=/path/to/COOKIEFILE \
     --from-literal=https_proxy=HTTPS_PROXY_URL
    

    Reemplaza lo siguiente:

    • /path/to/COOKIEFILE: La ruta de acceso y el nombre de archivo adecuados
    • HTTPS_PROXY_URL: La URL del proxy HTTPS que usas cuando te comunicas con el repositorio de Git
  2. Protege el contenido de cookiefile, si aún lo necesitas usar de forma local. De lo contrario, bórralo.

Token

Si tu organización no permite el uso de claves SSH, se recomienda usar un token. Con el Sincronizador de configuración, puedes usar tokens de acceso personales (PAT) de GitHub, PAT o claves de implementación de GiLab, o la contraseña de la aplicación de Bitbucket como token.

Para crear un Secret con tu token, completa estos pasos:

  1. Crea un token mediante GitHub, GitLab, o Bitbucket.

  2. Después de crear y obtener el token, agrégalo a un Secreto nuevo en el clúster.

    Si no usas el proxy HTTPS, crea el Secret con el siguiente comando:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
      --namespace="config-management-system" \
      --from-literal=username=USERNAME \
      --from-literal=token=TOKEN
    

    Reemplaza lo siguiente:

    • USERNAME: El nombre de usuario que deseas usar
    • TOKEN: El token que creaste en el paso anterior

    Si necesitas usar un proxy HTTPS, agrégalo al Secret junto con username y token mediante la ejecución del siguiente comando:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-literal=username=USERNAME \
      --from-literal=token=TOKEN \
     --from-literal=https_proxy=HTTPS_PROXY_URL
    

    Reemplaza lo siguiente:

    • USERNAME: El nombre de usuario que deseas usar
    • TOKEN: El token que creaste en el paso anterior
    • HTTPS_PROXY_URL: La URL del proxy HTTPS que usas cuando te comunicas con el repositorio de Git
  3. Protege el token si lo necesitas de forma local. De lo contrario, bórralo.

Cuenta de servicio de Google

Si tu repositorio se encuentra en un repositorio de Cloud Source Repositories y tu clúster usa Workload Identity Federation for GKE o Workload Identity Federation for GKE de la flota, puedes otorgar al Sincronizador de configuración acceso a un repositorio en el mismo proyecto que tu clúster administrado con una cuenta de servicio de Google.

  1. Si no tienes una cuenta de servicio, crea una cuenta de servicio.

  2. Otorga el rol de IAM de lector de Cloud Source Repositories (roles/source.reader) a la cuenta de servicio de Google. Para obtener más información sobre los roles y permisos de Cloud Source Repositories, consulta Otorga permisos para ver repositorios.

    • Otorga permisos en todo el proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --role=roles/source.reader \
        --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • Otorga permisos específicos del repositorio cuando desees que las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

      gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
      
  3. Si configuras el Sincronizador de configuración con la consola de Google Cloud, selecciona Workload Identity Federation for GKE como el Tipo de autenticación y, luego, agrega el correo electrónico de la cuenta de servicio.

    Si configuras el Sincronizador de configuración con Google Cloud CLI, agrega gcpserviceaccount como secretType y, luego, agrega el correo electrónico de tu cuenta de servicio a gcpServiceAccountEmail.

  4. Después Configura el Sincronizador de configuración, crea unVinculación de políticas de IAM entre la cuenta de servicio de Kubernetes y la cuenta de servicio de Google. La cuenta de servicio de Kubernetes no se creará hasta que configures el Sincronizador de configuración por primera vez.

    Si usas clústeres que están registrados en una flota, solo tienes que crear la vinculación de política una vez por flota. Todos los clústeres registrados en una flota comparten el mismo grupo de Workload Identity Federation for GKE. Con el concepto de similitud de la flota, si agregas la política de IAM a tu cuenta de servicio de Kubernetes en un clúster, la cuenta de servicio de Kubernetes del mismo espacio de nombres en otros clústeres en la misma flota también obtiene la misma política de IAM.

    Esta vinculación permite que la cuenta de servicio del Sincronizador de configuración de Kubernetes funcione como la cuenta de servicio de Google:

    gcloud iam service-accounts add-iam-policy-binding \
        GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
        --project=PROJECT_ID
    

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto de la organización.
  • FLEET_HOST_PROJECT_ID: Si usas Workload Identity Federation for GKE de GKE, esto es lo mismo que PROJECT_ID. Si usas Workload Identity Federation for GKE de la flota para GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.
  • GSA_NAME: La cuenta de servicio personalizada de Google que deseas usar para conectarte a Artifact Registry. La cuenta de servicio debe tener el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader).
  • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador.
    • Para los repositorios raíz, si el nombre RootSync es root-sync, usa root-reconciler. De lo contrario, usa root-reconciler-ROOT_SYNC_NAME. Si instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, el Sincronizador de configuración crea de forma automática un objeto RootSync llamado root-sync.
  • REPOSITORY: es el nombre del repositorio,
  • POLICY_FILE es el archivo JSON o YAML con la política de Identity Access Management.

Cuenta de servicio predeterminada de Compute Engine

Si tu repositorio está en Cloud Source Repositories y tu clúster es de GKE con Workload Identity Federation for GKE inhabilitada, puedes usar gcenode como tu tipo de autenticación.

Si configuras el Sincronizador de configuración con la consola de Google Cloud, selecciona Google Cloud Repository como el Tipo de autenticación.

Si configuras el Sincronizador de configuración con Google Cloud CLI, agrega gcenode como secretType.

Si seleccionas Google Cloud Repository o gcenode, puedes usar la cuenta de servicio predeterminada de Compute Engine. Debes otorgar el rol de IAM de lector de Cloud Source Repositories (roles/source.reader) a la cuenta de servicio predeterminada de Compute Engine. Para obtener más información sobre los roles y permisos de Cloud Source Repositories, consulta Otorga permisos para ver repositorios.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --role=roles/source.reader \
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"

Reemplaza PROJECT_ID por el ID del proyecto de tu organización y PROJECT_NUMBER por el número de proyecto de tu organización.

Otorga acceso de solo lectura al Sincronizador de configuración a OCI

El Sincronizador de configuración necesita acceso de solo lectura a tu imagen de OCI almacenada en Artifact Registry para que pueda leer las configuraciones incluidas en la imagen y aplicarlas a tus clústeres.

Si la imagen no requiere autenticación para el acceso de solo lectura, puedes continuar con la configuración del Sincronizador de configuración y usar none como el tipo de autenticación. Por ejemplo, si tu imagen es pública y cualquier persona puede acceder a ella desde Internet, no necesitas autenticarte.

Sin embargo, la mayoría de los usuarios deben crear credenciales para acceder a imágenes restringidas. El Sincronizador de configuración admite los siguientes mecanismos de autenticación:

  • k8sserviceaccountCuenta de servicio de Kubernetes
  • Cuenta de servicio de Google (gcpserviceaccount)
  • Cuenta de servicio predeterminada de Compute Engine (gcenode)

Cuenta de servicio de Kubernetes

Si almacenas tu imagen de OCI en Artifact Registry y tu clúster usa Workload Identity Federation for GKE de GKE o Workload Identity Federation for GKE de la flota, puedes usar k8sserviceaccount como tu tipo de autenticación en la versión 1.17.2 y versiones posteriores. Se recomienda esta opción en lugar de gcpserviceaccount debido a su proceso de configuración simplificado.

  1. Otorga el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio de Kubernetes con el grupo de Workload Identity Federation for GKE. Para obtener más información sobre los roles y permisos de Artifact Registry, consulta Configura roles y permisos para Artifact Registry.

    • Otorga permisos en todo el proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

      gcloud projects add-iam-policy-binding PROJECT_ID \
            --role=roles/artifactregistry.reader \
            --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • Otorga permisos específicos del repositorio cuando desees que las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
         --project=PROJECT_ID
      

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto de la organización.
    • FLEET_HOST_PROJECT_ID: Si usas Workload Identity Federation for GKE de GKE, esto es lo mismo que PROJECT_ID. Si usas Workload Identity Federation for GKE de la flota para GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.
    • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador.
      • Para los repositorios raíz, si el nombre RootSync es root-sync, usa root-reconciler. De lo contrario, usa root-reconciler-ROOT_SYNC_NAME. Si instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, el Sincronizador de configuración crea de forma automática un objeto RootSync llamado root-sync.
    • REPOSITORY: el ID del repositorio.
    • LOCATION: la ubicación regional o multirregional del repositorio.

Cuenta de servicio de Google

Si almacenas tu imagen de OCI en Artifact Registry y tu clúster usa Workload Identity Federation for GKE o Workload Identity Federation for GKE de la flota, puedes usar gcpserviceaccount como tu tipo de autenticación. A partir de la versión 1.17.2, se recomienda usar k8sserviceaccount. Esta opción elimina los pasos adicionales para crear una cuenta de servicio de Google y la vinculación de políticas de IAM asociada.

  1. Si no tienes una cuenta de servicio, crea una cuenta de servicio.

  2. Otorga el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio de Google. Para obtener más información sobre los roles y permisos de Artifact Registry, consulta Configura roles y permisos para Artifact Registry.

    • Otorga permisos en todo el proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

      gcloud projects add-iam-policy-binding PROJECT_ID  \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • Otorga permisos específicos del repositorio cuando desees que las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
         --project=PROJECT_ID
      
  3. Para crear una vinculación de políticas de IAM entra la cuenta de servicio de Kubernetes y la cuenta de servicio de Google, ejecutando el siguiente comando:

    gcloud iam service-accounts add-iam-policy-binding
      GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
        --project=PROJECT_ID
    

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto de la organización.
  • FLEET_HOST_PROJECT_ID: Si usas Workload Identity Federation for GKE de GKE, esto es lo mismo que PROJECT_ID. Si usas Workload Identity Federation for GKE de la flota para GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.
  • GSA_NAME: La cuenta de servicio personalizada de Google que deseas usar para conectarte a Artifact Registry. La cuenta de servicio debe tener el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader).
  • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador.
    • Para los repositorios raíz, si el nombre RootSync es root-sync, usa root-reconciler. De lo contrario, usa root-reconciler-ROOT_SYNC_NAME. Si instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, el Sincronizador de configuración crea de forma automática un objeto RootSync llamado root-sync.
  • REPOSITORY: el ID del repositorio.
  • LOCATION: la ubicación regional o multirregional del repositorio.

Cuenta de servicio predeterminada de Compute Engine

Si almacenas tu gráfico de Helm en Artifact Registry y tu clúster es de GKE con Workload Identity Federation for GKE inhabilitada, puedes usar gcenode como tu tipo de autenticación. El Sincronizador de configuración usa la cuenta de servicio predeterminada de Compute Engine. Debes otorgar a la cuenta de servicio predeterminada de Compute Engine acceso de lectura a Artifact Registry.

  1. Ejecuta el siguiente comando para otorgar permiso de lectura a la cuenta de servicio de Compute Engine para Artifact Registry:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
       --role=roles/artifactregistry.reader
    

    Reemplaza PROJECT_ID por el ID del proyecto de tu organización y PROJECT_NUMBER por el número de proyecto de tu organización.

Otorga acceso de solo lectura al Sincronizador de configuración a Helm

El Sincronizador de configuración necesita acceso de solo lectura a tu repositorio de Helm para que pueda leer los gráficos de Helm en tu repositorio y, luego, instalarlos en tus clústeres.

Si el repositorio no requiere autenticación para el acceso de solo lectura, puedes continuar con la configuración del Sincronizador de configuración y usar none como el tipo de autenticación. Por ejemplo, si tu repositorio de Helm es público y cualquier persona puede acceder a él desde Internet, no necesitas autenticarte.

Sin embargo, la mayoría de los usuarios deben crear credenciales para acceder a los repositorios privados de Helm. El Sincronizador de configuración admite los siguientes mecanismos de autenticación:

  • Token (token)
  • k8sserviceaccountCuenta de servicio de Kubernetes
  • Cuenta de servicio de Google (gcpserviceaccount)
  • Cuenta de servicio predeterminada de Compute Engine (gcenode)

Token

Crea un Secret con un nombre de usuario y una contraseña del repositorio de Helm:

kubectl create secret generic SECRET_NAME \
    --namespace=config-management-system \
    --from-literal=username=USERNAME \
    --from-literal=password=PASSWORD

Reemplaza lo siguiente:

  • SECRET_NAME: el nombre que deseas darle a tu Secret.
  • USERNAME: Es el nombre de usuario del repositorio de Helm.
  • PASSWORD: La contraseña del repositorio de Helm

Cuando configures el operador de ConfigManagement, usarás el nombre de Secret que elegiste para spec.helm.secretRef.name.

Cuenta de servicio de Kubernetes

Si almacenas tu gráfico de Helm en Artifact Registry y tu clúster usa GKE Workload Identity Federation for GKE o Workload Identity Federation for GKE para la flota de GKE, puedes usar k8sserviceaccount como tu tipo de autenticación en la versión 1.17.2 y versiones posteriores. Se recomienda esta opción en lugar de gcpserviceaccount debido a su proceso de configuración simplificado.

  1. Otorga el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio de Kubernetes con el grupo de Workload Identity Federation for GKE. Para obtener más información sobre los roles y permisos de Artifact Registry, consulta Configura roles y permisos para Artifact Registry.

    • Otorga permisos en todo el proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

      gcloud projects add-iam-policy-binding PROJECT_ID \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • Otorga permisos específicos del repositorio cuando desees que las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
         --project=PROJECT_ID
      

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto de la organización.
    • FLEET_HOST_PROJECT_ID: Si usas Workload Identity Federation for GKE de GKE, esto es lo mismo que PROJECT_ID. Si usas Workload Identity Federation for GKE de la flota para GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.
    • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador.
      • Para los repositorios raíz, si el nombre RootSync es root-sync, usa root-reconciler. De lo contrario, usa root-reconciler-ROOT_SYNC_NAME.
    • REPOSITORY: el ID del repositorio.
    • LOCATION: la ubicación regional o multirregional del repositorio.

Cuenta de servicio de Google

Si almacenas tu gráfico de Helm en Artifact Registry y tu clúster usa GKE Workload Identity Federation for GKE o GKE Workload Identity Federation for GKE para la flota de GKE, puedes usar gcpserviceaccount como tu tipo de autenticación. A partir de la versión 1.17.2, se recomienda usar k8sserviceaccount. Esta opción elimina los pasos adicionales para crear una cuenta de servicio de Google y la vinculación de políticas de IAM asociada.

  1. Si no tienes una cuenta de servicio, crea una cuenta de servicio.

  2. Otorga el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio de Google. Para obtener más información sobre los roles y permisos de Artifact Registry, consulta Configura roles y permisos para Artifact Registry.

    • Otorga permisos en todo el proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

      gcloud projects add-iam-policy-binding PROJECT_ID  \
            --role=roles/artifactregistry.reader \
            --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • Otorga permisos específicos del repositorio cuando desees que las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
         --project=PROJECT_ID
      
  3. Para crear una vinculación de políticas de IAM entra la cuenta de servicio de Kubernetes y la cuenta de servicio de Google, ejecutando el siguiente comando:

    gcloud iam service-accounts add-iam-policy-binding
      GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
        --project=PROJECT_ID
    

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto de la organización.
  • FLEET_HOST_PROJECT_ID: Si usas Workload Identity Federation for GKE de GKE, esto es lo mismo que PROJECT_ID. Si usas Workload Identity Federation for GKE de la flota para GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.
  • GSA_NAME: La cuenta de servicio personalizada de Google que deseas usar para conectarte a Artifact Registry. La cuenta de servicio debe tener el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader).
  • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador.
    • Para los repositorios raíz, si el nombre RootSync es root-sync, usa root-reconciler. De lo contrario, usa root-reconciler-ROOT_SYNC_NAME.
  • REPOSITORY: el ID del repositorio.
  • LOCATION: la ubicación regional o multirregional del repositorio.

Cuenta de servicio predeterminada de Compute Engine

Si almacenas tu gráfico de Helm en Artifact Registry y tu clúster es de GKE con Workload Identity Federation for GKE inhabilitada, puedes usar gcenode como tu tipo de autenticación. El Sincronizador de configuración usa la cuenta de servicio predeterminada de Compute Engine. Debes otorgar a la cuenta de servicio predeterminada de Compute Engine acceso de lectura a Artifact Registry. Es posible que debas otorgar el permiso de acceso storage-ro para otorgar permiso de solo lectura para extraer imágenes.

  1. Otorga permiso de lectura a la cuenta de servicio de Compute Engine para Artifact Registry:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/artifactregistry.reader
    

    Reemplaza PROJECT_ID por el ID del proyecto de tu organización y PROJECT_NUMBER por el número de proyecto de tu organización.

Configura Sincronizador de configuración

En esta sección, definirás la configuración de tu repositorio raíz. Si realizas la sincronización con un repositorio de Git, puedes usar la consola de Google Cloud para que te guíe a través del proceso de instalación y automatizar algunos pasos.

Cuando instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, el Sincronizador de configuración crea de forma automática un objeto RootSync llamado root-sync. Puedes usar los comandos kubectl para modificar root-sync y agregar configuraciones adicionales del Sincronizador de configuración. Para obtener más información, consulta Configura el Sincronizador de configuración con los comandos kubectl.

Console

Instalar el Sincronizador de configuración

Para instalar el Sincronizador de configuración, todos los clústeres deben estar registrados en una flota. Cuando instalas el Sincronizador de configuración en la consola de Google Cloud, la selección de clústeres individuales los registra automáticamente en tu flota.

  1. En la consola de Google Cloud, ve a la página Configuración en la sección Funciones.

    Ir a Configuración

  2. Haz clic en Instalar el Sincronizador de configuración.
  3. Selecciona Actualizaciones automáticas (Versión preliminar) para permitir que el Sincronizador de configuración actualice las versiones automáticamente o selecciona Actualizaciones manuales para administrar la versión del Sincronizador de configuración por tu cuenta. Para obtener más información sobre cómo funcionan las actualizaciones automáticas, consulta Actualiza el Sincronizador de configuración.
  4. En Opciones de instalación, selecciona una de las siguientes opciones:
    • Instalar el Sincronizador de configuración en toda la flota (recomendado): El Sincronizador de configuración se instalará en todos los clústeres de la flota.
    • Instalar el Sincronizador de configuración en clústeres individuales: Todos los clústeres seleccionados se registrarán automáticamente en una flota. El Sincronizador de configuración se instalará en todos los clústeres de la flota.
  5. Si instalas el Sincronizador de configuración en clústeres individuales, en la tabla Clústeres disponibles, selecciona los clústeres en los que deseas instalar el Sincronizador de configuración.
  6. Haz clic en Instalar el Sincronizador de configuración. En la pestaña Configuración, después de unos minutos, deberías ver Habilitado en la columna Estado para los clústeres de tu flota.

Implementa un paquete

Después de registrar tus clústeres en una flota y de instalar el Sincronizador de configuración, puedes configurarlo para implementar un paquete en un clúster desde una fuente de información. Puedes implementar el mismo paquete en varios clústeres o implementar paquetes diferentes en clústeres distintos. Puedes editar un paquete después de implementarlo, excepto algunos parámetros de configuración, como el nombre del paquete y el tipo de sincronización. Para obtener más información, consulta Administra paquetes.

Para implementar un paquete, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve al panel de sincronización de configuración.

    Ve al panel del Sincronizador de configuración

  2. Haz clic en Implementar paquete.

  3. En la tabla Selecciona clústeres para la implementación de paquetes, selecciona el clúster en el que deseas implementar un paquete y, luego, haz clic en Continuar.

  4. Selecciona Paquete alojado en Git o Paquete alojado en OCI como tipo de fuente y, luego, haz clic en Continuar.

  5. En la sección Detalles del paquete, ingresa un Nombre del paquete, que identifica el objeto RootSync o RepoSync.

  6. En el campo Tipo de sincronización, elige Sincronización centrada en el clúster o Sincronización centrada en el espacio de nombres como el tipo de sincronización.

    La sincronización centrada en el clúster crea un objeto RootSync, y la sincronización centrada en el espacio de nombres crea un objeto RepoSync. Para obtener más información sobre estos objetos, consulta Arquitectura de Sincronizador de configuración.

  7. En la sección Fuente, completa lo siguiente:

    • Para las fuentes alojadas en un repositorio de Git, ingresa los siguientes campos:

      1. Ingresa la URL del repositorio de Git que usas como fuente de información en URL del repositorio.
      2. Opcional: Actualiza el campo Revisión para comprobar si no estás usando el HEAD predeterminado.
      3. Opcional: Actualiza el campo Ruta si no deseas sincronizar desde el repositorio raíz.
      4. Opcional: Actualiza el campo Branch si no usas la rama main predeterminada.
    • Para las fuentes alojadas en una imagen de OCI, ingresa los siguientes campos:

      1. Ingresa la URL de la imagen de OCI que usas como fuente de confianza como Imagen.
      2. Ingresa la ruta del directorio desde el que deseas sincronizar en relación con el directorio raíz como Directorio.
  8. (Opcional) Expande la sección Configuración avanzada para completar lo siguiente:

    1. Selecciona un Tipo de autenticación. El Sincronizador de configuración necesita acceso de solo lectura a tu fuente de información para leer los archivos de configuración en la fuente y aplicarlos a tus clústeres. A menos que tu fuente no requiera autenticación, como un repositorio público, asegúrate de otorgarle al Sincronizador de configuración acceso de solo lectura a tu repositorio de Git, imagen de OCI o gráfico de Helm (solo gcloud CLI). Elige el mismo tipo de autenticación que configuraste cuando instalaste el Sincronizador de configuración:

      • Ninguna: No usa autenticación.
      • SSH: Autentica mediante un par de claves SSH.
      • Cookiefile: Realiza la autenticación con un cookiefile.
      • Token: Autentica con un token de acceso o una contraseña.
      • Google Cloud Repository: Usa una cuenta de servicio de Google para acceder a un Cloud Source Repositories. Selecciona esta opción solo si la Workload Identity Federation for GKE no está habilitada en tu clúster.
      • Workload Identity: Usa una cuenta de servicio de Google para acceder a un repositorio de Cloud Source Repositories.
    2. Ingresa un número en segundos para establecer el tiempo de espera de sincronización, que determina cuánto tiempo espera el Sincronizador de configuración entre los intentos de extraer datos de la fuente de información.

    3. Ingresa una URL de proxy de Git para el proxy HTTPS que se usará durante la comunicación con la fuente de información.

    4. Elige Jerarquía para cambiar el Formato de origen.

      En la mayoría de los casos, se recomienda el valor predeterminado No estructurado, ya que te permite organizar tu fuente de información como quieras.

  9. Haz clic en Implementar paquete.

    Se te redireccionará a la página Paquetes del Sincronizador de configuración. Después de unos minutos, deberías ver Sincronizado en la columna Estado de sincronización del clúster que configuraste.

gcloud

Antes de continuar, asegúrate de registrar tus clústeres en una flota.

  1. Habilita la función de flota ConfigManagement:

    gcloud beta container fleet config-management enable
    
  2. Para preparar la configuración, crea un nuevo manifiesto apply-spec.yaml o usa un manifiesto existente. El uso de un manifiesto existente te permite configurar tu clúster con la misma configuración que usa otro clúster.

    Crear manifiesto nuevo

    Para configurar el Sincronizador de configuración con una configuración nueva para tu clúster, crea un archivo llamado apply-spec.yaml y copia el siguiente archivo YAML en él.

    Puedes configurar todos los campos spec.configSync opcionales que necesites cuando crees tu manifiesto y, luego, usar comandos kubectl para la configuración. También puedes configurar el campo spec.configSync.enabled como true y omitir los campos opcionales. Luego, puedes usar los comandos kubectl para crear objetos RootSync adicionales o RepoSyncs que puedes administrar por completo con los comandos kubectl más adelante.

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # upgrades: UPGRADE_SETTING
      configSync:
        # Set to true to install and enable Config Sync
        enabled: true
        # If you don't have a source of truth yet, omit the
        # following fields. You can configure them later.
        sourceType: SOURCE_TYPE
        sourceFormat: FORMAT
        syncRepo: REPO
        syncRev: REVISION
        syncBranch: BRANCH
        secretType: SECRET_TYPE
        gcpServiceAccountEmail: EMAIL
        metricsGcpServiceAccountEmail: METRICS_EMAIL
        policyDir: DIRECTORY
        preventDrift: PREVENT_DRIFT
    

    Reemplaza lo siguiente:

    • (Versión preliminar) UPGRADE_SETTING: Quita el comentario del campo y configúralo como auto para que el Sincronizador de configuración se actualice automáticamente. Establece en manual para actualizar el Sincronizador de configuración de forma manual. El valor predeterminado es manual. Esta marca solo es compatible con GKE en clústeres de Google Cloud. Para usar este campo, es posible que debas actualizar gcloud CLI ejecutando gcloud components update.

    • SOURCE_TYPE: Agrega git para sincronizar desde un repositorio de Git, oci para sincronizar desde una imagen de OCI o helm para sincronizar desde un gráfico de Helm. Si no se especifica ningún valor, el valor predeterminado es git.

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

    • REPO: Agrega la URL de la fuente de información. Las URLs de los repositorios de Git y Helm usan el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples. Si planeas usar SSH como tu secretType, ingresa la URL con el protocolo SSH. Este campo es obligatorio y, si no ingresas un protocolo, la URL se trata como una URL HTTPS.

      Las URLs de OCI usan el siguiente formato: 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
    • REVISION: Es la revisión de Git (etiqueta o hash) desde la que se realiza 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 syncRev. Cuando uses un hash en la versión 1.17.0 o posterior, este debe ser un hash completo y no una forma abreviada.

    • BRANCH: 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 syncRev para especificar un nombre de rama para simplificar el proceso. Si se especifican los campos syncRev y syncBranch, syncRev tiene prioridad sobre syncBranch.

    • SECRET_TYPE: Uno de los siguientes secretTypes:

      git

      • 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. Si seleccionas este tipo de autenticación, debes crear una vinculación de política de IAM después de que termines de configurar el Sincronizador de configuración. Para obtener más detalles, consulta la pestaña Cuenta de servicio de Google de la sección Otorga acceso de solo lectura al Sincronizador de configuración a Git.
      • 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.

      oci

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

      helm

      • token: Usa un token
      • 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.
    • EMAIL: Si agregaste gcpserviceaccount como secretType, agrega la dirección de correo electrónico de la cuenta de servicio de Google. Por ejemplo, acm@PROJECT_ID.iam.gserviceaccount.com

    • METRICS_EMAIL: Es el correo electrónico de la cuenta de servicio de Google Cloud (GSA) que se usa para exportar las métricas del Sincronizador de configuración a Cloud Monitoring. La GSA debe tener el rol de IAM de escritor de métricas de Monitoring (roles/monitoring.metricWriter). La ServiceAccount de Kubernetes default en el espacio de nombres config-management-monitoring debe estar vinculada a la GSA.

    • DIRECTORY: ruta del directorio desde el que se realiza la sincronización en relación con la raíz del repositorio de Git. Se incluyen todos los subdirectorios del directorio que especificas y se sincronizan con el clúster. El valor predeterminado es el directorio raíz del repositorio.

    • PREVENT_DRIFT: Si se configura como true, habilita el webhook de admisión del Sincronizador de configuración para evitar los desvíos mediante el rechazo de cambios conflictivos que se envían a clústeres activos. La configuración predeterminada es false. El Sincronizador de configuración siempre soluciona los desvíos, sin importar el valor de este campo.

    Para obtener una lista completa de los campos que puedes agregar al campo spec, consulta Campos de gcloud.

    Usar el manifiesto existente

    Para configurar tu clúster con la misma configuración que usa otro clúster, recupera la configuración de un clúster registrado:

    gcloud alpha container fleet config-management fetch-for-apply \
        --membership=MEMBERSHIP_NAME \
        --project=PROJECT_ID \
        > CONFIG_YAML_PATH
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME: El nombre de la membresía del clúster registrado que tiene la configuración del Sincronizador de configuración que deseas usar
    • PROJECT_ID: El ID de tu proyecto
    • CONFIG_YAML_PATH: Es la ruta de acceso al archivo apply-spec.yaml que contiene la configuración recuperada del clúster.
  3. Aplica el archivo apply-spec.yaml. Si usas un manifiesto existente, debes aplicar el archivo al clúster que deseas establecer con la configuración que recuperaste en el comando anterior:

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML_PATH \
        --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME: El nombre de la membresía de la flota que elegiste cuando registraste tu clúster, puedes encontrar el nombre con gcloud container fleet memberships list.
    • CONFIG_YAML_PATH: La ruta de acceso a tu archivo apply-spec.yaml.
    • PROJECT_ID: el ID de tu proyecto

Terraform

Para cada clúster en el que deseas configurar el Sincronizador de configuración, aplica un bloque de recursos google_gkehub_feature_membership que contenga un bloque configmanagement y config_sync:

git

resource "google_container_cluster" "cluster" {
 name = "EXISTING_CLUSTER_NAME"
 location = "EXISTING_CLUSTER_LOCATION"
}

resource "google_gke_hub_membership" "membership" {
 membership_id = "MEMBERSHIP_ID"
 endpoint {
   gke_cluster {
     resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
   }
 }
}

resource "google_gke_hub_feature" "feature" {
 name = "configmanagement"
 location = "global"
}

resource "google_gke_hub_feature_membership" "feature_member" {
 location = "global"
 feature = google_gke_hub_feature.feature.name
 membership = google_gke_hub_membership.membership.membership_id
 configmanagement {
   version = "VERSION"
   config_sync {
     # The field `enabled` was introduced in Terraform version 5.41.0, and
     # needs to be set to `true` explicitly to install Config Sync.
     enabled = true
     git {
       sync_repo = "REPO"
       sync_branch = "BRANCH"
       policy_dir = "DIRECTORY"
       secret_type = "SECRET"
     }
   }
 }
}

Reemplaza lo siguiente:

  • EXISTING_CLUSTER_NAME: Es el nombre del clúster existente.
  • EXISTING_CLUSTER_LOCATION: Es la ubicación de tu clúster existente.
  • MEMBERSHIP_ID: Es el ID de vinculación de la membresía.
  • VERSION: (Opcional) El número de versión del Sincronizador de configuración. Debe establecerse en la versión 1.17.0 o una posterior. Si se deja en blanco, el valor predeterminado es la versión más reciente.
  • REPO: Es la URL del repositorio que contiene tus archivos de configuración.
  • BRANCH: Es la rama del repositorio, por ejemplo, main.
  • DIRECTORY: La ruta de acceso dentro del repositorio de Git que representa el nivel superior del repositorio que deseas sincronizar.
  • SECRET: Es el tipo de autenticación secreta.

oci

resource "google_container_cluster" "cluster" {
 name = "EXISTING_CLUSTER_NAME"
 location = "EXISTING_CLUSTER_LOCATION"
}

resource "google_gke_hub_membership" "membership" {
 membership_id = "MEMBERSHIP_ID"
 endpoint {
   gke_cluster {
     resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
   }
 }
}

resource "google_gke_hub_feature" "feature" {
 name = "configmanagement"
 location = "global"
}

resource "google_gke_hub_feature_membership" "feature_member" {
 location = "global"
 feature = google_gke_hub_feature.feature.name
 membership = google_gke_hub_membership.membership.membership_id
 configmanagement {
   version = "VERSION"
   config_sync {
     # The field `enabled` was introduced in Terraform version 5.41.0, and
     # needs to be set to `true` explicitly to install Config Sync.
     enabled = true
     oci {
       sync_repo = "REPO"
       policy_dir = "DIRECTORY"
       secret_type = "SECRET"
     }
   }
 }
}

Reemplaza lo siguiente:

  • EXISTING_CLUSTER_NAME: Es el nombre del clúster existente.
  • EXISTING_CLUSTER_LOCATION: Es la ubicación de tu clúster existente.
  • MEMBERSHIP_ID: Es el ID de vinculación de la membresía.
  • VERSION: (Opcional) El número de versión del Sincronizador de configuración. Si se deja en blanco, el valor predeterminado es la versión más reciente.
  • REPO: Es la URL del repositorio de imágenes de OCI que contiene tus archivos de configuración.
  • DIRECTORY: Es la ruta de acceso absoluta del directorio que contiene los recursos que deseas sincronizar. Déjalo en blanco para usar el directorio raíz.
  • SECRET: Es el tipo de autenticación secreta.

Repite este proceso para cada clúster que quieras sincronizar.

Una vez que hayas terminado de configurar tu repositorio raíz, puedes elegir configurar la sincronización desde varios repositorios, incluidos otros repositorios raíz y de espacios de nombres. Estos repositorios de espacios de nombres son útiles si deseas un repositorio que contenga archivos de configuración con alcance de espacio de nombres sincronizados con un espacio de nombres en particular en todos los clústeres.

Configura los valores predeterminados a nivel de la flota

Si habilitaste la edición empresarial de Google Kubernetes Engine (GKE), puedes habilitar y configurar el Sincronizador de configuración como una configuración predeterminada a nivel de la flota para tus clústeres. Esto significa que cada clúster nuevo de GKE en Google Cloud creado en la flota tendrá habilitado el Sincronizador de configuración en el clúster con la configuración que especifiques. Puedes obtener más información sobre la configuración predeterminada de la flota en Administra funciones a nivel de la flota.

Si solo usas la consola de Google Cloud, puedes habilitar el Sincronizador de configuración de forma predeterminada en tus clústeres y establecer la versión del Sincronizador de configuración para tu flota. Si usas gcloud CLI o Terraform, puedes habilitar el Sincronizador de configuración de forma predeterminada en tus clústeres, establecer la versión del Sincronizador de configuración para tu flota y configurar la conexión a tu repositorio de Git o al repositorio de imágenes de OCI.

Para configurar los valores predeterminados a nivel de la flota para el Sincronizador de configuración, completa los siguientes pasos:

gcloud

Ejecuta el comando enable para la función y pasa el archivo de configuración apply-spec.yaml que creaste cuando configuraste el Sincronizador de configuración en un clúster individual:

gcloud beta container fleet config-management enable \
    --fleet-default-member-config=apply-spec.yaml

Puedes usar este comando para actualizar la configuración predeterminada de tu flota en cualquier momento. Si actualizas la configuración predeterminada de la flota, debes volver a sincronizar los clústeres existentes con la configuración predeterminada.

Console

  1. En la consola de Google Cloud, ve a la página Administrador de funciones.

    Ir a Administrador de funciones

  2. En el panel Sincronizador de configuración, haz clic en Configurar.

  3. Revisa la configuración a nivel de la flota. Todos los clústeres nuevos que crees en la flota heredarán esta configuración.

  4. Opcional: Para cambiar la configuración predeterminada, haz clic en Personalizar la configuración de la flota. En el cuadro de diálogo que aparece, haz lo siguiente:

  5. Selecciona Actualizaciones automáticas (Versión preliminar) para que el Sincronizador de configuración actualice las versiones automáticamente o selecciona Actualizaciones manuales para administrar la versión del Sincronizador de configuración por tu cuenta. Para obtener más información sobre cómo funcionan las actualizaciones automáticas, consulta Actualiza el Sincronizador de configuración.

  6. Si seleccionaste Actualizaciones manuales, en la lista Versión, selecciona la versión del Sincronizador de configuración que deseas usar.

  7. Haz clic en Guardar cambios.

  8. Haz clic en Configurar.

  9. En el cuadro de diálogo de confirmación Configurar la configuración de la flota, haz clic en Confirmar. Si no habilitaste el Sincronizador de configuración anteriormente, haz clic en Confirmar para habilitar la API de anthosconfigmanagement.googleapis.com.

Terraform

  1. Crea un directorio para los archivos de Terraform de configuración predeterminada de la flota. En ese directorio, agrega un archivo main.tf con el siguiente recurso que configure la configuración del Sincronizador de configuración:

    git

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto host de la flota.
    • VERSION: (Opcional) El número de versión del Sincronizador de configuración. Si se deja en blanco, el valor predeterminado es la versión más reciente.
    • REPO: Es la URL del repositorio que contiene tus archivos de configuración.
    • BRANCH: Es la rama del repositorio, por ejemplo, main.
    • DIRECTORY: La ruta de acceso dentro del repositorio de Git que representa el nivel superior del repositorio que deseas sincronizar.
    • SECRET: Es el tipo de autenticación secreta.

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

    OCI

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID del proyecto host de la flota.
    • VERSION: El número de versión del Sincronizador de configuración. Debe establecerse en la versión 1.17.0 o una posterior. Si se deja en blanco, el valor predeterminado es la versión más reciente.
    • REPO: Es la URL del repositorio de imágenes de OCI que contiene archivos de configuración.
    • DIRECTORY: Es la ruta de acceso absoluta del directorio que contiene los recursos que deseas sincronizar. Déjalo en blanco para usar el directorio raíz.
    • SECRET: Es el tipo de autenticación secreta.

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

  2. Inicializa Terraform en el directorio que creaste:

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

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

    terraform apply
    

Para actualizar los clústeres existentes para que usen la configuración predeterminada del Sincronizador de configuración, puedes usar la consola de Google Cloud o gcloud CLI para sincronizar los clústeres de la flota seleccionados con los valores predeterminados de la flota. Como alternativa, puedes configurar cada clúster de forma manual con la misma configuración mediante Terraform. Para ello, sigue las instrucciones para configurar el Sincronizador de configuración. Si usaste Terraform anteriormente para especificar los valores predeterminados de la flota, usa el mismo bloque configmanagement y config_sync que usaste para establecer los valores predeterminados para configurar los clústeres que elegiste.

Para sincronizar la configuración predeterminada del Sincronizador de configuración en toda tu flota, sigue estos pasos:

gcloud

  1. Sincroniza una membresía existente con la configuración predeterminada de la flota:

    gcloud beta container fleet config-management apply \
        --origin=FLEET \
        --membership=MEMBERSHIP_NAME
    

    Reemplaza MEMBERSHIP_NAME por el nombre de la membresía de la flota del clúster que deseas sincronizar con la configuración predeterminada de la flota.

  2. Confirma que las configuraciones de membresía estén sincronizadas con la configuración predeterminada de la flota:

    gcloud beta container fleet config-management status
    

    El resultado de este comando debe mostrarse como Yes para el estado Synced_to_Fleet_Default de la membresía que sincronizaste.

Console

  1. Ve al Administrador de funciones

    Ve a Administrador de funciones: Sincronizador de configuración

  2. En la tabla de clústeres, selecciona los clústeres que deseas sincronizar con la configuración de la flota.

  3. Haz clic en Sincronizar con la configuración de la flota.

Para inhabilitar la configuración predeterminada del Sincronizador de configuración en toda tu flota, sigue estos pasos:

  1. Para inhabilitar la configuración predeterminada de la flota, ejecuta el siguiente comando:

    gcloud beta container fleet config-management disable --fleet-default-member-config
    
  2. Confirma que la configuración predeterminada de la flota esté inhabilitada:

    gcloud beta container fleet config-management status
    

La configuración predeterminada del Sincronizador de configuración se aplica a todos los clústeres que selecciones. Aunque la consola de Google Cloud solo muestra un subconjunto de parámetros de configuración, como la versión del Sincronizador de configuración, todos los parámetros de configuración a nivel de la flota se sincronizan con los clústeres. Por ejemplo, si configuras el Sincronizador de configuración para que se sincronice con un repositorio de Git con Terraform o gcloud CLI, ese parámetro de configuración se sincroniza con tus clústeres, pero no se muestra en la consola de Google Cloud.

Verifique la instalación

Después de instalar y configurar el Sincronizador de configuración, puedes verificar que la instalación se haya completado correctamente.

Console

Completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Configuración en la sección Funciones.

    Ir a Configuración

  2. En la pestaña Paquetes, verifica la columna Estado de sincronización en la tabla del clúster. Si la instalación del Sincronizador de configuración se realiza correctamente, tendrá el estado Instalado. Una fuente de información configurada correctamente tiene el estado Sincronizada.

gcloud

Ejecuta el siguiente comando:

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

Reemplaza PROJECT_ID por el ID del proyecto.

Si la instalación se realiza correctamente, tendrá el estado SYNCED. A partir de la versión 1.18.0 del Sincronizador de configuración, el resultado también muestra qué versión del Sincronizador de configuración está instalada y la configuración de actualización del Sincronizador de configuración.

Si ves un error después de ejecutar el comando anterior, asegúrate de haber creado el Secret git-creds. Si creaste el Secret, vuelve a ejecutar el siguiente comando:

gcloud beta container fleet config-management apply

También puedes usar el comando nomos status para verificar si el Sincronizador de configuración se instaló correctamente. Una instalación válida sin problemas tiene el estado PENDING o SYNCED. Una instalación no válida o incompleta tiene el estado NOT INSTALLED o NOT CONFIGURED. La salida también incluye cualquier error informado.

Controles de acceso basado en roles (RBAC) y permisos

El Sincronizador de configuración incluye cargas de trabajo con muchos privilegios. En la siguiente tabla, se enumeran los permisos de estas cargas de trabajo:

Componente Espacio de nombres Cuenta de servicio Permisos Descripción
Operador de ConfigManagement config-management-system config-management-operator cluster-admin El operador de Config Management instala los otros componentes de esta tabla. Algunos de esos componentes requieren permisos de administrador de clúster, por lo que el operador de Config Management también los requiere.
Sincronizador de configuración config-management-system Consulta Permisos de Sincronizador de configuración para conocer los permisos necesarios.

Solicitudes de recursos

En la siguiente sección, se enumeran las solicitudes de recursos del Sincronizador de configuración.

En la siguiente tabla, se enumeran los requisitos de los recursos de Kubernetes para los componentes del Sincronizador de configuración. Si deseas obtener más información, consulta Administra los recursos para contenedores en la documentación de Kubernetes.

No se crean todos los componentes que se enumeran. Las siguientes condiciones hacen que se programe cada componente:

  • config-management-operator se instala cuando se habilita el Sincronizador de configuración.
  • reconciler-manager se instala cuando se habilita el Sincronizador de configuración.
  • admission-webhook se instala cuando se habilita la prevención de desvíos.
  • Se instala un reconciler para cada RootSync y RepoSync.
  • otel-collector se instala cuando se habilita el Sincronizador de configuración.

Para obtener más información sobre estos componentes, consulta Arquitectura del Sincronizador de configuración.

1.18

Nombre de la implementación Solicitud de CPU (m) por réplica Solicitud de memoria (Mi) por réplica
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler (uno por RootSync y RepoSync) Consulta Implementación del agente de conciliación para obtener más detalles.

1 El webhook de admisión tiene dos réplicas, por lo que, cuando se calcula el total de solicitudes de recursos, debes duplicar el valor si usas el webhook de admisión. El webhook de admisión está inhabilitado de forma predeterminada.

1.17

Nombre de la implementación Solicitud de CPU (m) por réplica Solicitud de memoria (Mi) por réplica
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler (uno por RootSync y RepoSync) Consulta Implementación del agente de conciliación para obtener más detalles.

1 El webhook de admisión tiene dos réplicas, por lo que, cuando se calcula el total de solicitudes de recursos, debes duplicar el valor si usas el webhook de admisión. El webhook de admisión está inhabilitado de forma predeterminada.

1.16

Nombre de la implementación Solicitud de CPU (m) por réplica Solicitud de memoria (Mi) por réplica
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler (uno por RootSync y RepoSync) Consulta Implementación del agente de conciliación para obtener más detalles.

1 El webhook de admisión tiene dos réplicas, por lo que, cuando se calcula el total de solicitudes de recursos, debes duplicar el valor si usas el webhook de admisión. El webhook de admisión está inhabilitado de forma predeterminada.

Implementación del conciliador

Para cada objeto RootSync y RepoSync, el Sincronizador de configuración crea una implementación de conciliador independiente para controlar la sincronización. La implementación del agente de conciliación consiste en varios contenedores. Para obtener más información sobre estos contenedores, consulta Contenedores del conciliador.

En el Sincronizador de configuración versión 1.17.0 y posteriores, las solicitudes de recursos predeterminadas para los agentes de conciliación son diferentes para los clústeres Standard y Autopilot. Todos los demás tipos de clústeres usan los valores predeterminados de Standard.

Clústeres estándar

1.18

Nombre del contenedor Solicitud de CPU (m) Solicitud de memoria (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller (Opcional) 10 100
git-sync 10 16
gcenode-askpass-sidecar (Opcional) 10 20
helm-sync 75 128
oci-sync 25 32

1.17

Nombre del contenedor Solicitud de CPU (m) Solicitud de memoria (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller (Opcional) 10 100
git-sync 10 16
gcenode-askpass-sidecar (Opcional) 10 20
helm-sync 75 128
oci-sync 25 32

1.16

Nombre del contenedor Solicitud de CPU (m) Solicitud de memoria (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller (Opcional) 10 100
git-sync 10 200
gcenode-askpass-sidecar (Opcional) 10 20
helm-sync 50 256
oci-sync 10 200

Clústeres de Autopilot

1.18

Nombre del contenedor Solicitud y límite de CPU (m) Solicitud y límite de memoria (Mi)
reconciler 700 512
otel-agent 10 64
hydration-controller (Opcional) 200 256
git-sync 20 32
gcenode-askpass-sidecar (Opcional) 50 64
helm-sync 250 384
oci-sync 50 64

1.17

Nombre del contenedor Solicitud y límite de CPU (m) Solicitud y límite de memoria (Mi)
reconciler 700 512
otel-agent 10 64
hydration-controller (Opcional) 200 256
git-sync 20 32
gcenode-askpass-sidecar (Opcional) 50 64
helm-sync 150 256
oci-sync 50 64

1.16

En las versiones del Sincronizador de configuración anteriores a la 1.17.0, las solicitudes de recursos son las mismas para Estándar y Autopilot.

Para obtener información sobre cómo anular las solicitudes y los límites de recursos predeterminados, consulta anulaciones de recursos.

Versiones de Helm y Kustomize en paquetes

El Sincronizador de configuración aprovecha los ejecutables de Helm y Kustomize para procesar las opciones de configuración internas. En la siguiente tabla, se proporciona una lista de las versiones del Sincronizador de configuración que admiten la función de procesamiento, junto con las versiones de Helm y Kustomize empaquetadas.

Versiones del Sincronizador de configuración Versión de Helm Versión de Kustomize
1.18.0 v3.14.3 v5.3.0
1.17.1 y 1.17.3 v3.13.3 v5.3.0
1.16.3 y 1.17.0 v3.13.1 v5.1.1
1.16.1 y 1.16.2 v3.12.3 v5.1.1
1.16.0 v3.12.2 v5.1.1
1.15.3 v3.12.2 v5.1.0
1.15.1 a 1.15.2 v3.11.3 v5.0.3
1.15.0 v3.11.3 v5.0.1
1.11.0 a 1.14.3 v3.6.3 v4.5.2

Para obtener información sobre cómo renderizar Helm a través de Kustomize, consulta Configura Kubernetes con Kustomize. Para obtener información sobre el uso de la API de Helm, consulta Sincroniza gráficos de Helm desde Artifact Registry.

¿Qué sigue?