Saiba como criar uma instância do Config Controller que vem pré-instalada com o Config Connector, o Policy Controller e o Config Sync. Em seguida, aprenda a usar sua instância concluindo as seguintes tarefas:
- Use o Config Connector para criar e gerenciar um recurso do Google Cloud.
- Crie uma restrição do Policy Controller para aplicar uma política e detectar uma violação antes de ela ser implantada.
- Configure o GitOps para que o Config Sync seja sincronizado a partir de um repositório de amostra que contenha um recurso do Google Cloud.
Antes de começar
- 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
Criar uma instância do Config Controller
No terminal, crie uma instância do Autopilot Config Controller:
gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-management
Essa operação pode levar até 15 minutos para ser concluída.
A saída é esta:
Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.
Para configurar a comunicação
kubectl
com o endpoint do Config Controller, receba as credenciais de autenticação e as informações do endpoint necessárias:gcloud anthos config controller get-credentials cc-example \ --location us-central1
Verifique se a instância foi criada visualizando a lista de instâncias do Config Controller:
gcloud anthos config controller list --location=us-central1
A saída é esta:
NAME LOCATION STATE cc-example us-central1 RUNNING
Conceder a permissão necessária ao Config Controller
Nesta seção, você concede permissão ao Config Controller para gerenciar os recursos do Google Cloud:
Defina uma variável de ambiente para o e-mail da sua conta de serviço:
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
Crie a vinculação de política:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_ID
Substitua
PROJECT_ID
pela ID do seu projeto.O resultado será assim:
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
Usar a instância do Config Controller
As seções a seguir apresentam as maneiras de usar a instância do Config Controller.
Criar um recurso do Google Cloud usando o Config Connector
Com sua instância do Config Controller, é possível aproveitar o Config Connector para
gerenciar muitos serviços e recursos do Google Cloud usando ferramentas e APIs
do Kubernetes. Nesta seção, você usa o Config Controller para criar um
recurso PubSubTopic
.
Para criar um tópico do Pub/Sub usando o Config Connector, conclua as seguintes etapas:
Use o Config Connector para ativar a API Pub/Sub:
Usando seu editor de texto preferido, crie um arquivo chamado
enable-pubsub.yaml
e copie o YAML a seguir nele:# 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
Substitua
PROJECT_ID
pela ID do seu projeto.Para ativar a API Pub/Sub, aplique o manifesto ao cluster:
kubectl apply -f enable-pubsub.yaml
A ativação dessa API pode levar vários minutos.
Use o Config Connector para criar um tópico do Pub/Sub:
Crie um arquivo chamado
pubsub-topic.yaml
e copie o YAML a seguir nele:# 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
Crie o tópico do Pub/Sub:
kubectl apply -f pubsub-topic.yaml
Verifique se o Config Controller criou o recurso no Google Cloud visualizando a lista de tópicos do Pub/Sub:
gcloud pubsub topics list
O resultado será assim:
--- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
Aplicar uma política com o Policy Controller
Sua instância do Config Controller permite usar o Policy Controller e suas restrições. Como parte da instalação do Policy Controller, o Config Controller instala automaticamente a biblioteca de modelos de restrição. É possível usar os modelos nesta biblioteca para aplicar uma variedade de controles comuns de segurança e conformidade às instâncias do Config Controller.
Nesta seção, você cria uma restrição usando o
modelo de restrição
GCPStorageLocationConstraintV1
. Com esse modelo, é possível restringir o local em que é possível criar buckets do Cloud Storage. A restrição que você cria usando esse modelo
restringe o local a us-central1
. É possível usar essa restrição
para garantir que seus buckets estejam sendo criados em uma região que oferece o melhor preço
e desempenho.
Para criar a restrição, faça o seguinte:
Crie um arquivo chamado
bucket-constraint.yaml
e copie o YAML a seguir nele:# 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
Crie a restrição:
kubectl apply -f bucket-constraint.yaml
A saída é esta:
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
Para demonstrar que a restrição está funcionando, tente usar o Config Connector para criar um recurso StorageBucket em
asia-southeast1
:Crie um arquivo chamado
asia-storage-bucket.yaml
e copie o YAML a seguir nele:# 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
Tente criar o bucket do Cloud Storage:
kubectl apply -f asia-storage-bucket.yaml
A saída é esta:
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"]
Configurar o GitOps com o Config Sync
O Config Sync é um serviço do GitOps que permite sincronizar a instância do Config Controller com configurações, políticas e recursos do Google Cloud armazenados em um repositório Git, imagem OCI ou repositório Helm. Como o Config Sync reconcilia continuamente o estado do Config Controller com as configurações na origem, é possível garantir que as instâncias tenham uma configuração consistente.
Nesta seção, você vai sincronizar sua instância do Config Controller a um
repositório público do GitHub. Esse repositório contém
outro recurso PubSubTopic
. Ao sincronizar sua instância desse repositório,
o recurso é criado e aplicado automaticamente à instância. Se você quiser usar um fluxo de trabalho do GitOps,
crie seus recursos com o Config Sync (em vez de
aplicar o recurso diretamente).
Para sincronizar com o GitHub, configure o Cloud NAT. Você precisa fazer isso porque sua instância do Config Controller é apoiada por um cluster particular da edição Google Kubernetes Engine (GKE) Enterprise e os nós de cluster particulares não têm acesso de saída à Internet:
Crie um Cloud NAT router. Você precisa desse roteador para configurar o gateway NAT.
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1
O resultado será assim:
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
Configure um gateway NAT no roteador criado na etapa 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
A saída é esta:
Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
Para configurar a instância do Config Controller para sincronizar a partir de um repositório de amostra, crie um arquivo chamado
cc-rootsync.yaml
e copie o seguinte YAML nele:# 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
Aplique a configuração:
kubectl apply -f cc-rootsync.yaml
Depois que a instância é sincronizada no repositório, o Config Sync cria o tópico do Pub/Sub e o aplica à instância do Config Controller.
Verifique se o Config Sync está sincronizando o repositório Git com a instância do Config Controller:
nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
O resultado será assim:
*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
Se você não vir essa saída, aguarde alguns minutos e tente novamente.
Verifique se o Config Controller criou o recurso:
gcloud pubsub topics list
O resultado será assim:
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
Nesta saída, você pode ver o Pub/Sub criado na seção Criar uma instância do Config Controller e o criado ao sincronizar sua instância com um repositório do GitHub.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
Exclua o recurso
PubSubTopic
do Config Connector:kubectl delete -f pubsub-topic.yaml
Exclua a restrição do Policy Controller:
kubectl delete -f bucket-constraint.yaml
Exclua o roteador NAT:
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1
Pressione
y
quando for solicitado.Exclua o recurso do Pub/Sub criado pelo Config Sync:
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
Exclua o recurso RootSync:
kubectl delete rootsync root-sync -n config-management-system
Usando seu editor de texto preferido, exclua todos os arquivos YAML que você criou:
enable-pubsub.yaml
pubsub-topic.yaml
bucket-constraint.yaml
asia-storage-bucket.yaml
cc-rootsync.yaml
Exclua a instância do Config Controller:
gcloud anthos config controller delete --location=us-central1 cc-example
Pressione
y
quando for solicitado.
A seguir
- Saiba como configurar o Config Controller.
- Saiba mais sobre o Config Controller.