Administra recursos con el controlador de configuración
Aprende a crear una instancia del controlador de configuración que viene preinstalada 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:
- Usar 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 contiene un recurso de Google Cloud.
Antes de comenzar
- 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.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea o selecciona un proyecto de Google Cloud.
-
Crea un proyecto de Google Cloud:
gcloud projects create PROJECT_ID
-
Selecciona el proyecto de Google Cloud que creaste:
gcloud config set project PROJECT_ID
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
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 - Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea o selecciona un proyecto de Google Cloud.
-
Crea un proyecto de Google Cloud:
gcloud projects create PROJECT_ID
-
Selecciona el proyecto de Google Cloud que creaste:
gcloud config set project PROJECT_ID
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
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
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.
Si deseas configurar
kubectl
para que se comunique con el extremo del controlador de configuración, obtén las credenciales de autenticación necesarias y la información del extremo:gcloud anthos config controller get-credentials cc-example \ --location us-central1
Verifica la instancia para crear la instancia mediante 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 del controlador de configuración
En esta sección, otorgarás permiso al controlador de configuración para administrar los recursos de Google Cloud:
Configura 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)"
Crea la vinculación de 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 a este:
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 de 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 la instancia del controlador de configuración, puedes aprovechar Config Connector para administrar muchos servicios y recursos de Google Cloud mediante las herramientas y API 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:
Usa Config Connector para habilitar la API de Pub/Sub:
Con el editor de texto que prefieras, 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.Para habilitar la API de Pub/Sub, aplica el manifiesto a tu clúster:
kubectl apply -f enable-pubsub.yaml
Habilitar esta API puede tardar varios minutos.
Use Config Connector para crear un tema de Pub/Sub:
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
Crea el tema de Pub/Sub:
kubectl apply -f pubsub-topic.yaml
Verifica la configuración del controlador de configuración para ver tu lista de temas de Pub/Sub:
gcloud pubsub topics list
El resultado es similar a este:
--- 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 el controlador de políticas
La instancia del controlador de configuración te permite usar las restricciones del controlador de políticas y el controlador de políticas. Como parte de la instalación del controlador de políticas, el controlador de configuración instala automáticamente 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 mediante 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 que uses esta restricción
para asegurarte de que tus buckets se creen en una región que ofrezca el mejor precio
y rendimiento.
Para crear la restricción, sigue estos pasos:
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
Crea la restricción:
kubectl apply -f bucket-constraint.yaml
Esta es la salida:
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
A fin de demostrar que la restricción funciona, intenta usar Config Connector para crear un recurso de StorageBucket en
asia-southeast1
: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
Intente 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 los parámetros de configuración, las políticas y los 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 del controlador de configuración con un repositorio público de GitHub. Este repositorio contiene otro recurso PubSubTopic
. Cuando se sincroniza la instancia desde este repositorio, el recurso se crea y se aplica a tu instancia de forma automática. Puedes optar por crear tus recursos con el Sincronizador de configuración (en lugar de aplicar el recurso directamente) si deseas usar un flujo de trabajo de GitOps.
Para sincronizar desde GitHub, configura Cloud NAT. Debes hacerlo porque tu instancia del controlador de configuración está respaldada por un clúster de GKE privado y los nodos del clúster privado no tienen acceso a Internet saliente:
Crear un router de Cloud NAT Necesitas este router para configurar la puerta de enlace de NAT.
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1
El resultado es similar a este:
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
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.
Para 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
Aplica la configuración:
kubectl apply -f cc-rootsync.yaml
Una vez que la 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.
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 a este:
*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.
Verifica que el controlador de configuración haya creado tu recurso:
gcloud pubsub topics list
El resultado es similar a este:
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 controlador de configuración y el que creaste cuando sincronizaste tu instancia con un repositorio de GitHub.
Realiza una limpieza
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 Cloud:
gcloud projects delete PROJECT_ID
Borra los recursos individuales
Borra el recurso
PubSubTopic
del Config Connector:kubectl delete -f pubsub-topic.yaml
Borra la restricción del controlador de políticas:
kubectl delete -f bucket-constraint.yaml
Borra el router NAT:
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1
Presiona
y
cuando se te solicite.Borra el recurso de Pub/Sub que creó el Sincronizador de configuración:
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
Borra el recurso RootSync:
kubectl delete rootsync root-sync -n config-management-system
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
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?
- Aprende a configurar el Controlador de configuración.
- Obtén más información sobre el Controlador de configuración.