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 es un servicio alojado para aprovisionar y organizar recursos de Anthos y Google Cloud. Ofrece un extremo de API que puede aprovisionar, activar y organizar recursos de Google Cloud como parte de Anthos Config Management. Para obtener más información sobre el controlador de configuración, consulta Descripción general del controlador de configuración.

Antes de comenzar

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

  1. Instala e inicializa Google Cloud CLI, que proporciona los comandos gcloud, kubectl y nomos que se usan en estas instrucciones. Si usas Cloud Shell, Google Cloud CLI viene preinstalada.

    Google Cloud CLI no instala kubectl de forma predeterminada. Para instalar kubectl, ejecuta el siguiente comando:

    gcloud components install kubectl
    
  2. Establece el proyecto de Google Cloud en el que se alojará Config Controller:

    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

    Reemplaza PROJECT_ID por el proyecto de Google Cloud en el que se alojará Config Controller.

  3. Si no tienes una red predeterminada en tu proyecto, crea una con la ejecución del siguiente comando:

    gcloud compute networks create default --subnet-mode=auto
    

    Como alternativa, puedes seleccionar una red diferente con la marca --network en el comando gcloud anthos config controller create cuando configuras el controlador de configuración.

Configura el controlador de configuración

Crea un controlador de configuración con los siguientes comandos de la CLI de gcloud:

  1. Habilita los servicios en tu proyecto para usar los comandos de la CLI de gcloud posteriores:

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com
    
  2. Crea el controlador de configuración. Esta operación puede tomar más de 15 minutos.

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

    Reemplaza lo siguiente:

    • CONFIG_CONTROLLER_NAME: Es el nombre que deseas darle a tu controlador.
    • LOCATION: agrega us-central1, us-east1, northamerica-northeast1, europe-north1, australia-southeast1 o asia-northeast1. No se admiten otras regiones.

    Puedes configurar parámetros opcionales como --man-block, que te permiten especificar un rango CIDR para permitir que las direcciones IP de esos rangos accedan al plano de control de Kubernetes a fin de obtener seguridad adicional. Para ver la lista completa de opciones, consulta la documentación de gcloud anthos config controller create.

  3. Una vez que se crea la instancia, aparece en la lista de instancias. Para ver la lista de instancias, ejecuta el siguiente comando:

    gcloud anthos config controller list --location=LOCATION
    
  4. Para aplicar manifiestos, autentícate con la instancia:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    
  5. Otorga permiso al controlador de configuración para que administre los recursos de Google Cloud en el proyecto:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/owner" \
        --project "${PROJECT_ID}"
    

Actualiza el controlador de configuración

Dado que el controlador de configuración es un servicio administrado, Google lo actualiza de manera automática. Para obtener detalles sobre las versiones incluidas de componentes y funciones nuevas, consulta las notas de la versión del controlador de configuración.

Administra recursos de Google Cloud con el controlador de configuración

Después de configurar el controlador de configuración, puedes aprovechar Config Connector para administrar muchos servicios y recursos de Google Cloud con las herramientas y las API de Kubernetes. Para obtener una lista completa de los recursos que puedes administrar, consulta Recursos de Config Connector.

En este ejemplo, se crea un repositorio en Cloud Source Repositories que puedes usar en la sección Configura GitOps.

  1. Crea un archivo llamado service.yaml y copia el siguiente archivo YAML en él:

    # service.yaml
    
    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sourcerepo.googleapis.com
      namespace: config-control
    
  2. Aplica el manifiesto y espera a que Cloud Source Repositories esté habilitado:

    kubectl apply -f service.yaml
    kubectl wait -f service.yaml --for=condition=Ready
    
  3. Crea un archivo llamado repo.yaml y copia el siguiente archivo YAML en él:

    # repo.yaml
    
    apiVersion: sourcerepo.cnrm.cloud.google.com/v1beta1
    kind: SourceRepoRepository
    metadata:
      name: REPO_NAME
      namespace: config-control
    

    Reemplaza REPO_NAME por el nombre que deseas asignar a los Cloud Source Repositories.

  4. Para crear el repositorio, aplica el manifiesto:

    kubectl apply -f repo.yaml
    

Configura GitOps

Puedes hacer que la configuración del repositorio de Git se sincronice con el controlador de configuración mediante Config Sync. En el ejemplo de esta sección, se usan los repositorios de Cloud Source Repositories que creaste en la sección anterior.

  1. Crea un archivo llamado gitops-iam.yaml y copia el siguiente archivo YAML en él:

    # gitops-iam.yaml
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: config-sync-sa
      namespace: config-control
    spec:
      displayName: ConfigSync
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: config-sync-wi
      namespace: config-control
    spec:
      member: serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/root-reconciler]
      role: roles/iam.workloadIdentityUser
      resourceRef:
        apiVersion: iam.cnrm.cloud.google.com/v1beta1
        kind: IAMServiceAccount
        name: config-sync-sa
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: allow-configsync-sa-read-csr
      namespace: config-control
    spec:
      member: serviceAccount:config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
      role: roles/source.reader
      resourceRef:
        apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
        kind: Project
        external: projects/PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto en el que se ejecuta el controlador de configuración.

  2. Para permitir que el Sincronizador de configuración acceda al repositorio, aplica el manifiesto:

    kubectl apply -f gitops-iam.yaml
    
  3. Para que la configuración del repositorio se sincronice con el controlador de configuración mediante el Sincronizador de configuración, crea un archivo llamado config-management.yaml y pega el siguiente texto en él:

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      enableMultiRepo: true
      enableLegacyFields: true
      policyController:
        enabled: true
      clusterName: krmapihost-CONFIG_CONTROLLER_NAME
      git:
        policyDir: REPO_PATH
        secretType: gcpserviceaccount
        gcpServiceAccountEmail: config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
        syncBranch: REPO_BRANCH
        syncRepo: https://source.developers.google.com/p/PROJECT_ID/r/REPO_NAME
      sourceFormat: unstructured
    

    Reemplaza lo siguiente:

    • CONFIG_CONTROLLER_NAME: nombre de tu controlador de configuración.
    • REPO_PATH: ruta del directorio desde el que se realiza la sincronización (se relaciona con la raíz del repositorio Git). El valor predeterminado es /.
    • PROJECT_ID: ID del proyecto que contiene la cuenta de servicio y el repositorio Git.
    • REPO_BRANCH: rama del repositorio desde el que se realiza la sincronización. El valor predeterminado es master.
    • REPO_NAME: nombre del repositorio Git desde el que se extraerá la configuración y en el que se detectarán cambios.

      Para obtener más información sobre los campos de config-management.yaml, consulta Campos de ConfigManagement.

  4. Para crear la configuración del Sincronizador de configuración, aplica el manifiesto:

    kubectl apply -f config-management.yaml
    

    Es posible que recibas un error que no puede encontrar el CRD: Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "rootsyncs.configsync.gke.io" not found. Para resolver el error, ejecuta el siguiente comando a fin de esperar que las CRD de RootSync y RepoSync estén disponibles:

    until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; \
    do date; sleep 1; echo ""; done
    

Verifica el éxito

Puedes verificar la configuración inicial mediante los siguientes pasos:

  1. Verifica que todos los controladores estén configurados de forma correcta en el controlador de configuración:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    
  2. Verifica que el repositorio de Git esté sincronizado con el controlador de configuración mediante el Sincronizador de configuración mediante el comando nomos o el comando gcloud alpha anthos config sync repo:

    nomos status --contexts $(kubectl config current-context)
    
    # or
    
    gcloud alpha anthos config sync repo list --targets config-controller
    

Borra tu controlador de configuración

Si decides dejar de usar el controlador de configuración, debes limpiar todos los recursos creados. Debes quitar los recursos del controlador de configuración antes de borrar el controlador de configuración.

Si borras el controlador de configuración sin borrar primero los recursos aprovisionados, los recursos permanecen en un estado de abandono. Los recursos aún existen en Google Cloud (y generan cargos de facturación), pero no se administran desde una configuración declarativa.

Una vez que se hayan borrado todos los recursos, puedes borrar el controlador de configuración con la CLI de gcloud:

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?