Configura el controlador de configuración

En esta página, se muestra cómo configurar el controlador de configuración.

El controlador de configuración proporciona un plano de control administrado basado en Kubernetes. Además, las instancias del controlador de configuración vienen preinstalados con el controlador de políticas, el Sincronizador de configuración y Config Connector. Si usas estos componentes, puedes aprovechar las herramientas y los flujos de trabajo de Kubernetes para administrar los recursos de Google Cloud y lograr la coherencia mediante un flujo de trabajo de GitOps. Para obtener más información, consulta la descripción general del controlador de configuración.

Si creas una instancia del controlador de configuración por primera vez, consulta la Guía de inicio rápido: Administra recursos con el controlador de configuración.

Limitaciones

  • Debido a que las instancias del controlador de configuración están completamente administradas, no puedes registrarlas con una flota.

Antes de comenzar

Antes de configurar el controlador de configuración, completa los siguientes pasos:

  1. Instala y, luego, inicializa la CLI de Google Cloud, que proporciona Google Cloud CLI que se usa en estas instrucciones. Si usas Cloud Shell, Google Cloud CLI ya está instalado.
  2. Debido a que kubectl no está instalado de forma predeterminada por Google Cloud CLI, instálalo:

    gcloud components install kubectl
    
  3. Configura el proyecto de Google Cloud en el que deseas alojar el controlador de configuración:

    gcloud config set project PROJECT_ID
    

    Reemplaza PROJECT_ID por el proyecto de Google Cloud que alojará el controlador de configuración.

  4. Habilita las APIs que necesitas:

    gcloud services enable krmapihosting.googleapis.com \
        anthos.googleapis.com  \
        cloudresourcemanager.googleapis.com \
        serviceusage.googleapis.com
    

Crea una instancia del controlador de configuración

Puedes crear una instancia del controlador de configuración respaldada por un clúster estándar o un clúster de Autopilot. Ambos tipos de clústeres son privados.

Selecciona un clúster estándar si quieres más opciones de personalización. Selecciona un clúster de Autopilot si quieres obtener una instalación más rápida, un ajuste de escala automático horizontal y vertical de Pods, y funciones de seguridad mejoradas como Container-Optimized OS, nodos de GKE protegidos, Workload Identity y inicio seguro.

  1. Crea una instancia de Config Controller:

    Standard

    Crea una instancia del controlador de configuración respaldada por un clúster de GKE estándar privado:

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION
    

    Reemplaza lo siguiente:

    • CONFIG_CONTROLLER_NAME: Es el nombre que deseas asignar a tu instancia de controlador de configuración.
    • LOCATION: Agrega una de las siguientes regiones:

      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-west2
      • northamerica-northeast1
      • northamerica-northeast2
      • europe-north1
      • europe-west1
      • europe-west3
      • europe-west6
      • australia-southeast1
      • australia-southeast2
      • asia-northeast1
      • asia-northeast2
      • asia-southeast1

      Esta es la región en la que se crea tu instancia del controlador de configuración. No se admiten otras regiones.

    Puedes configurar varios parámetros opcionales cuando creas una instancia estándar del controlador de configuración. Para ver la lista completa de opciones, consulta la documentación de gcloud anthos config controller create.

    Autopilot

    Para crear una instancia del controlador de configuración respaldada por un clúster privado de GKE Autopilot, ejecuta el siguiente comando:

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION \
        --full-management
    

    Reemplaza lo siguiente:

    • CONFIG_CONTROLLER_NAME: el nombre que deseas darle a tu controlador.
    • LOCATION: Agrega una de las siguientes regiones:

      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-west2
      • northamerica-northeast1
      • northamerica-northeast2
      • europe-north1
      • europe-west1
      • europe-west3
      • europe-west6
      • australia-southeast1
      • australia-southeast2
      • asia-northeast1
      • asia-northeast2
      • asia-southeast1

      No se admiten otras regiones.

    Esta operación puede tardar hasta 15 minutos en completarse. Si deseas observar lo que sucede durante la creación, puedes consultar el Explorador de registros en la consola de Google Cloud.

    Ir al Explorador de registros.

    Si experimentas errores durante la creación, consulta Soluciona problemas del Config Controller para obtener orientación sobre cómo resolver problemas comunes.

  2. Para verificar que se hayan creado las instancias del controlador de configuración, consulta la lista de instancias del controlador de configuración:

    gcloud anthos config controller list --location=LOCATION
    

    Deberías ver un valor de RUNNING en la columna de estado. Si el estado es CREATING, significa que todavía se está creando tu instancia del controlador de configuración, y debes seguir esperando. Si ves ERROR, tienes un problema que no puedes resolver por tu cuenta. Comunícate con la Asistencia de Google Cloud para obtener ayuda.

  3. Para comunicarte con el extremo del controlador de configuración, obtén las credenciales y la información del extremo adecuadas:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    

Usa tu instancia del controlador de configuración

Ahora que creaste una instancia del controlador de configuración, puedes comenzar a usar los componentes instalados y completar las siguientes tareas:

  • Usa Config Connector para crear recursos de Google Cloud. Si tienes recursos existentes de Google Cloud que deseas usar con el controlador de configuración, consulta Adquiere un recurso existente.

  • Usa el controlador de políticas para aplicar restricciones que impongan el cumplimiento de las normativas y los estándares de Kubernetes.

  • Después de configurar el Sincronizador de configuración, en la siguiente sección, sincroniza tu instancia del controlador de configuración con archivos de configuración (incluidas las restricciones del controlador de políticas y los recursos de Config Connector) que se almacenan en una fuente de información.

Para ver un ejemplo guiado en el que se muestre cómo completar estas tareas con el controlador de configuración, consulta la Guía de inicio rápido: Administra recursos con el controlador de configuración.

Configura tu instancia del controlador de configuración

En las siguientes secciones, se explica cómo configurar los componentes de tu instancia del controlador de configuración.

Configura Config Connector

No necesitas administrar ningún parámetro de configuración para la instalación de Config Connector. Sin embargo, debes otorgar permisos del controlador de configuración para administrar los recursos de Google Cloud:

  1. Establece una variable de entorno para el correo electrónico de tu cuenta de servicio:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    
  2. Crea la vinculación de la política:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "ROLE" \
        --project PROJECT_ID
    

    Reemplaza lo siguiente:

    Si la operación anterior falla, verifica si los controles están listos:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    

Después de otorgar estos permisos, puedes comenzar a crear recursos de Google Cloud.

Configurar Policy Controller

La configuración del controlador de políticas es opcional, pero puedes realizar cambios en la instalación predeterminada si es necesario.

Para configurar el controlador de políticas, edita los campos spec.policyController del objeto ConfigManagement llamado config-management. El controlador de configuración crea automáticamente este objeto ConfigManagement durante la instalación. Cuando edites el objeto ConfigManagement, no configures spec.policyController.enabled como false. Config Controller anula automáticamente este cambio. Para la supervisión, también debes permitir que el controlador de políticas envíe métricas.

Permite que el controlador de políticas envíe métricas mediante la ejecución de este comando:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[gatekeeper-system/gatekeeper-admin]" \
  --role=roles/monitoring.metricWriter

Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud del clúster.

Configura Sincronizador de configuración

Si deseas que tu instancia del controlador de configuración se sincronice desde los archivos de configuración almacenados en una fuente de información, debes configurar el Sincronizador de configuración.

Si deseas usar el Sincronizador de configuración a fin de crear recursos de Config Connector, asegúrate de haber otorgado permiso al controlador de configuración para administrar los recursos.

Para configurar el Sincronizador de configuración, crea y edita un objeto RootSync:

  1. Para sincronizar desde un repositorio externo (por ejemplo, GitHub), configura Cloud NAT con GKE. Debes hacerlo porque los nodos del clúster privado no tienen acceso saliente a Internet.

  2. Guarda uno de los siguientes manifiestos como root-sync.yaml. Usa la versión del manifiesto que corresponda al tipo de origen para tus archivos 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 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 el nombre de una rama en el campo revision. Cuando se usa un hash en la versión 1.17.0 o posterior, debe ser un hash completo y no una forma abreviada.
    • ROOT_BRANCH: Agrega la rama del repositorio desde la que se realizará 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 y, así, simplificarlo. 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 Workload Identity no está habilitado en tu clúster.

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

      Este campo es obligatorio.

    • 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 se configura este campo, debes agregar la clave pública del secreto 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 se configura este campo, tu proveedor de Git debe usar un certificado emitido por esta autoridad certificadora (CA). El secreto debe contener el certificado de la AC en una clave llamada cert. Este campo es opcional.

      Si quieres obtener más información sobre cómo configurar el objeto Secret para el certificado de CA, consulta Configura un operador para una autoridad certificadora.

    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
    

    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 Workload Identity no está habilitado 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

    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
    

    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 URLs 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 gráfico de Helm. Este campo es obligatorio.
    • HELM_CHART_VERSION: Es la versión del gráfico. Este campo es opcional. Si no se especifica ningún 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 configura 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: Son valores que se usarán en lugar de los valores predeterminados que acompañan al gráfico de Helm. Formatea este campo del mismo modo que el archivo helm chart's values.yaml. 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 privado de Helm.
      • gcenode: Usa la cuenta de servicio predeterminada de Compute Engine para acceder a una imagen en Artifact Registry. Selecciona esta opción solo si Workload Identity no está habilitado 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.

    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.

    Este manifiesto crea un objeto RootSync que usa Helm como fuente.

  3. Para crear la configuración del Sincronizador de configuración, crea un objeto RootSync mediante la aplicación del manifiesto:

    kubectl apply -f root-sync.yaml
    
  4. Para verificar que se hayan aplicado los cambios, observa el objeto RootSync:

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

Actualiza el controlador de configuración

Debido a que el controlador de configuración es un servicio administrado, Google lo actualiza automáticamente. Para obtener detalles sobre las funciones nuevas y saber qué versiones del Sincronizador de configuración, Controlador de políticas y Config Connector usan el controlador de configuración, consulta las notas de la versión del controlador de configuración.

Borra tu instancia del controlador de configuración

Si decides dejar de usar una instancia del controlador de configuración, limpia todos los recursos de Config Connector que creaste antes de borrar el clúster del controlador de configuración.

Si borras la instancia del controlador de configuración sin borrar primero los recursos aprovisionados, estos quedan en estado abandonado. Los recursos aún existen en Google Cloud (y generan cargos de facturación), pero no se administran mediante una configuración declarativa.

Después de borrar todos los recursos, borra el clúster del controlador de configuración:

gcloud anthos config controller delete \
    --location=LOCATION CONFIG_CONTROLLER_NAME

Consideraciones de producción

Cuando se dirige a la producción, primero debes revisar las consideraciones de alta disponibilidad para el controlador de configuración.

¿Qué sigue?