Administra recursos con Config Controller

Aprende a crear una instancia de Config Controller que viene preinstalado con Config Connector, el controlador de políticas y el Sincronizador de configuración. A continuación, completa las siguientes tareas para aprender a usar tu instancia:

  • Usa Config Connector para crear y administrar un recurso de Google Cloud.
  • Crea una restricción del controlador de políticas para aplicar una política y detectar un incumplimiento de política antes de que se implemente.
  • Configura GitOps mediante la configuración del Sincronizador de configuración para que se sincronice desde un repositorio de muestra que contenga un recurso de Google Cloud.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita las APIs de KRM, API de GKE, Resource Manager y Service Usage:

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  10. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  11. Habilita las APIs de KRM, API de GKE, Resource Manager y Service Usage:

    gcloud services enable krmapihosting.googleapis.com  container.googleapis.com  cloudresourcemanager.googleapis.com  serviceusage.googleapis.com

Crea una instancia del controlador de configuración

  1. En la terminal, crea una instancia del controlador de configuración de Autopilot:

    gcloud anthos config controller create cc-example \
        --location=us-central1 \
        --full-management
    

    Esta operación puede tardar hasta 15 minutos en completarse.

    Esta es la salida:

    Created instance [cc-example].
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for krmapihost-cc-example.
    
  2. Si deseas configurar kubectl para que se comunique con el extremo del controlador de configuración, obtén las credenciales de autenticación y la información del extremo requeridas:

    gcloud anthos config controller get-credentials cc-example \
        --location us-central1
    
  3. Para verificar que la instancia se haya creado, consulta la lista de instancias del controlador de configuración:

    gcloud anthos config controller list --location=us-central1
    

    Esta es la salida:

    NAME                 LOCATION                 STATE
    cc-example           us-central1              RUNNING
    

Otorga el permiso necesario del controlador de configuración

En esta sección, le otorgas permiso al 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 "roles/owner" \
        --project PROJECT_ID
    

    Reemplaza PROJECT_ID con el ID del proyecto.

    El resultado es similar al siguiente:

    Updated IAM policy for project [PROJECT_ID].
    auditConfigs:
    - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_READ
      - logType: DATA_WRITE
      service: gkehub.googleapis.com
    # Remainder of output omitted
    

Usa tu instancia del controlador de configuración

En las siguientes secciones, se presentan las formas en que puedes usar tu instancia del controlador de configuración.

Crea un recurso de Google Cloud con Config Connector

Con tu instancia del controlador de configuración, puedes aprovechar Config Connector para administrar muchos servicios y recursos de Google Cloud mediante las herramientas y las APIs de Kubernetes. En esta sección, usarás el controlador de configuración para crear un recurso PubSubTopic.

Para crear un tema de Pub/Sub con Config Connector, completa los siguientes pasos:

  1. Usa Config Connector para habilitar la API de Pub/Sub:

    1. Con tu editor de texto preferido, crea un archivo llamado enable-pubsub.yaml y copia el siguiente YAML en él:

      # enable-pubsub.yaml
      apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
      kind: Service
      metadata:
        name: pubsub.googleapis.com
        namespace: config-control
      spec:
        projectRef:
          external: projects/PROJECT_ID
      

      Reemplaza PROJECT_ID con el ID del proyecto.

    2. Para habilitar la API de Pub/Sub, aplica el manifiesto al clúster:

      kubectl apply -f enable-pubsub.yaml
      

      La habilitación de esta API puede tardar varios minutos.

  2. Usa Config Connector para crear un tema de Pub/Sub:

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

      # pubsub-topic.yaml
      apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
      kind: PubSubTopic
      metadata:
        annotations:
          cnrm.cloud.google.com/project-id: PROJECT_ID
        labels:
          label-one: "value-one"
        name: example-topic
        namespace: config-control
      
    2. Crea el tema de Pub/Sub:

      kubectl apply -f pubsub-topic.yaml
      
  3. Para verificar que el controlador de configuración haya creado tu recurso en Google Cloud, consulta la lista de temas de Pub/Sub:

    gcloud pubsub topics list
    

    El resultado es similar al siguiente:

    ---
    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

Aplica una política con Policy Controller

Tu instancia de Config Controller te permite usar las restricciones del controlador de políticas y del controlador de políticas. Como parte de la instalación del controlador de políticas, este último instala de forma automática la biblioteca de plantillas de restricciones. Puedes usar las plantillas de esta biblioteca para aplicar una variedad de controles comunes de seguridad y cumplimiento en tus instancias del controlador de configuración.

En esta sección, crearás una restricción con la plantilla de restricciones GCPStorageLocationConstraintV1. Esta plantilla te permite restringir la ubicación en la que puedes crear buckets de Cloud Storage. La restricción que creas con esta plantilla restringe la ubicación a us-central1. Recomendamos usar esta restricción para asegurarte de que tus buckets se creen en una región que ofrece el mejor precio y rendimiento.

Para crear la restricción, haz lo siguiente:

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

    # bucket-constraint.yaml
    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GCPStorageLocationConstraintV1
    metadata:
      name: storage-only-in-us-central1
    spec:
      match:
        kinds:
        - apiGroups:
          - storage.cnrm.cloud.google.com
          kinds:
          - StorageBucket
      parameters:
        locations:
        - us-central1
    
  2. Crea la restricción:

    kubectl apply -f bucket-constraint.yaml
    

    Esta es la salida:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. Demuestra que la restricción funciona cuando intentas usar Config Connector para crear un recurso StorageBucket en asia-southeast1:

    1. Crea un archivo llamado asia-storage-bucket.yaml y copia el siguiente YAML en él:

      # asia-storage-bucket.yaml
      apiVersion: storage.cnrm.cloud.google.com/v1beta1
      kind: StorageBucket
      metadata:
        name: bucket-in-disallowed-location
        namespace: config-control
      spec:
        location: asia-southeast1
      
    2. Intenta crear el bucket de Cloud Storage:

      kubectl apply -f asia-storage-bucket.yaml
      

      Esta es la salida:

      Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
      

Configura GitOps con el Sincronizador de configuración

El Sincronizador de configuración es un servicio de GitOps que te permite sincronizar tu instancia del controlador de configuración con archivos de configuración, políticas y recursos de Google Cloud almacenados en un repositorio de Git, una imagen OCI o un repositorio de Helm. Debido a que el Sincronizador de configuración concilia continuamente el estado del controlador de configuración con los archivos de configuración de tu fuente, puedes ayudar a garantizar que tus instancias tengan una configuración coherente.

En esta sección, sincronizarás tu instancia de controlador de configuración con un repositorio público de GitHub. Este repositorio contiene otro recurso PubSubTopic. Cuando sincronizas tu instancia desde este repositorio, el recurso se crea y se aplica de forma automática a tu instancia. Puedes elegir crear tus recursos mediante el Sincronizador de configuración (en lugar de aplicar el recurso directamente) si deseas usar un flujo de trabajo de GitOps.

  1. Para sincronizar desde GitHub, configura Cloud NAT. Debes hacerlo porque tu instancia del controlador de configuración está respaldada por un clúster privado de Google Kubernetes Engine (GKE) Enterprise, y los nodos del clúster privado no tienen acceso saliente a Internet:

    1. Crea un router de Cloud NAT. Necesitas este router para configurar la puerta de enlace NAT.

      gcloud compute routers create cc-nat-router \
          --network default \
          --region us-central1
      

      El resultado es similar al siguiente:

      Creating router [cc-nat-router]...done.
      NAME           REGION       NETWORK
      cc-nat-router  us-central1  default
      
    2. Configura una puerta de enlace NAT en el router que creaste en el paso anterior:

      gcloud compute routers nats create cc-nat-config \
          --router-region us-central1 \
          --router cc-nat-router \
          --nat-all-subnet-ip-ranges \
          --auto-allocate-nat-external-ips
      

      Esta es la salida:

      Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
      
  2. Si deseas configurar tu instancia del controlador de configuración para que se sincronice desde un repositorio de muestra, crea un archivo llamado cc-rootsync.yaml y copia el siguiente YAML en él:

    # cc-rootsync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        branch: main
        dir: config-controller-quickstart
        auth: none
    
  3. Aplica la configuración:

    kubectl apply -f cc-rootsync.yaml
    

    Después de que tu instancia se sincroniza desde el repositorio, el Sincronizador de configuración crea el tema de Pub/Sub y lo aplica a tu instancia del controlador de configuración.

  4. Verifica que el Sincronizador de configuración esté sincronizando el repositorio de Git con tu instancia del controlador de configuración:

    nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
    

    El resultado es similar al siguiente:

    *gke_PROJECT_ID_us-central1_krmapihost-cc-example
    --------------------
    <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main
    SYNCED @ 2023-01-10 18:31:02 +0000 UTC   715b4295d3eac07b057cce2543275c1ee104cad8
    Managed resources:
       NAMESPACE        NAME                                                               STATUS   SOURCEHASH
       config-control   pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync  Current   715b429
       config-control   service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com   Current   715b429
    

    Si no ves este resultado, espera unos minutos y vuelve a intentarlo.

  5. Verifica que el controlador de configuración haya creado tu recurso:

    gcloud pubsub topics list
    

    El resultado es similar al siguiente:

    name: projects/PROJECT_ID/topics/start-instance-event
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/sample-topic
    ---
    labels:
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync
    ---
    labels:
      label-one: value-one
      managed-by-cnrm: 'true'
    name: projects/PROJECT_ID/topics/example-topic
    

    En este resultado, puedes ver el Pub/Sub que creaste en la sección Crea una instancia de Config Controller y el que creaste mediante la sincronización de tu instancia con un repositorio de GitHub.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

  1. Borra el recurso PubSubTopic de Config Connector:

    kubectl delete -f pubsub-topic.yaml
    
  2. Borra la restricción del controlador de políticas:

    kubectl delete -f bucket-constraint.yaml
    
  3. Borra el router NAT:

    gcloud compute routers delete cc-nat-router \
        --project=PROJECT_ID \
        --region=us-central1
    

    Presiona y cuando se te solicite.

  4. Borra el recurso de Pub/Sub que creó el Sincronizador de configuración:

    kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
    
  5. Borra el recurso RootSync:

    kubectl delete rootsync root-sync -n config-management-system
    
  6. Con tu editor de texto preferido, borra todos los archivos YAML que creaste:

    • enable-pubsub.yaml
    • pubsub-topic.yaml
    • bucket-constraint.yaml
    • asia-storage-bucket.yaml
    • cc-rootsync.yaml
  7. Borra la instancia del controlador de configuración:

    gcloud anthos config controller delete --location=us-central1 cc-example
    

    Presiona y cuando se te solicite.

¿Qué sigue?