Obtén información para crear una instancia de Config Controller que venga preinstalada con Config Connector, Policy Controller y Sincronizador de configuración. A continuación, aprende a utilizar tu instancia completando las siguientes tareas:
- Usa Config Connector para crear y administrar un recurso Google Cloud .
- Crea una restricción de Policy Controller para aplicar una política y detectar un incumplimiento de política antes de que se implemente.
- Configura GitOps configurando el Sincronizador de configuración para que se sincronice desde un repositorio de muestra que contenga un recurso Google Cloud .
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, Resource Manager, and Service Usage APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, Resource Manager, and Service Usage APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com En la terminal, crea una instancia de Autopilot Config Controller:
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.
Para verificar que se haya creado tu instancia, consulta la lista de instancias de Config Controller:
gcloud anthos config controller list --location=us-central1
Esta es la salida:
NAME LOCATION STATE cc-example us-central1 RUNNING
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 Config Connector para habilitar la API de Pub/Sub:
Con tu editor de texto preferido, crea un archivo llamado
enable-pubsub.yaml
y copia el siguiente archivo 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.
Usa Config Connector para crear un tema de Pub/Sub:
Crea un archivo llamado
pubsub-topic.yaml
y copia el siguiente archivo 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 que Config Controller haya creado tu recurso en Google Cloud. Para ello, consulta la 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
Crea un archivo llamado
bucket-constraint.yaml
y copia el siguiente archivo 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`
Demuestra que la restricción funciona intentando usar Config Connector para crear un recurso StorageBucket en
asia-southeast1
:Crea un archivo llamado
asia-storage-bucket.yaml
y copia el siguiente archivo 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
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"]
Para sincronizar desde GitHub, configura Cloud NAT. Debes hacerlo porque tu instancia de Config Controller está respaldada por un clúster de GKE privado, y los nodos de clúster privados no tienen acceso saliente a Internet:
Crea un router de Cloud NAT. Necesitas este router para configurar tu puerta de enlace 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 de Config Controller de modo que se sincronice desde un repositorio de muestra, crea un archivo llamado
cc-rootsync.yaml
y copia el siguiente código 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 tu instancia se sincronice desde el repositorio, el Sincronizador de configuración creará el tema de Pub/Sub y lo aplicará a tu instancia de Config Controller.
Verifica que Sincronizador de configuración esté sincronizando el repositorio de Git con tu instancia de Config Controller:
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 tema de Pub/Sub que creaste en la sección Crea una instancia de Config Controller y el que creaste cuando sincronizaste tu instancia con un repositorio de GitHub.
Borra el recurso
PubSubTopic
de Config Connector:kubectl delete -f pubsub-topic.yaml
Borra la restricción de Policy Controller:
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 creado por 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.- Obtén más información para configurar Config Controller.
- Obtén más información sobre Config Controller.
Crea una instancia de Config Controller
Otorga el permiso necesario a Config Controller
En esta sección, otorgarás permiso al Controlador de configuración para administrar recursos de Google Cloud:
Usa tu instancia de Config Controller
En las siguientes secciones, se presentan las formas en que puedes usar tu instancia de Config Controller.
Crea un recurso Google Cloud con Config Connector
Con tu instancia de Config Controller, puedes aprovechar Config Connector para administrar muchos Google Cloud servicios y recursos con las herramientas y las APIs de Kubernetes. En esta sección, usarás Config Controller para crear un recurso PubSubTopic
.
Para crear un tema de Pub/Sub con Config Connector, completa los siguientes pasos:
Aplica una política con Policy Controller
Tu instancia de Config Controller te permite usar Policy Controller y restricciones de Policy Controller. Como parte de la instalación de Policy Controller, Config Controller 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 de Config Controller.
En esta sección, crearás una restricción con la plantilla de restricción 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
. Es posible que desees usar 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, haz lo siguiente:
Configura GitOps con el Sincronizador de configuración
El Sincronizador de configuración es un servicio de GitOps que te permite sincronizar tu instancia de Config Controller con configuraciones, políticas y recursos deGoogle Cloud almacenados en un repositorio de Git, una imagen de OCI o un repositorio de Helm. Debido a que el Sincronizador de configuración concilia de forma continua el estado del Config Controller 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 Config Controller 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 aplica automáticamente a tu instancia. Puedes optar por crear tus recursos con Sincronizador de configuración (en lugar de aplicar el recurso directamente) si deseas usar un flujo de trabajo de GitOps.
Limpia
Para evitar que se apliquen cargos a tu Google Cloud cuenta 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
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID