Saiba como criar uma instância do Config Controller pré-instalada com o Config Connector, o Policy Controller e o Config Sync. Em seguida, saiba como utilizar a sua instância concluindo as seguintes tarefas:
- Use o Config Connector para criar e gerir um Google Cloud recurso.
- Crie uma restrição do Policy Controller para aplicar uma política e detetar uma violação de política antes da implementação.
- Configure o GitOps configurando o Config Sync para sincronizar a partir de um repositório de exemplo que contenha um recurso 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. 
- 
          Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada. 
- 
        Para inicializar a CLI gcloud, execute o seguinte 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.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith 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_IDwith 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.enablepermission. 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. 
- 
          Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada. 
- 
        Para inicializar a CLI gcloud, execute o seguinte 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.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith 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_IDwith 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.enablepermission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com 
- No terminal, crie uma instância do controlador de configuração do Autopilot: - gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-management- Esta operação pode demorar até 15 minutos a ser concluída. - O resultado é o seguinte: - Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.
- Verifique se a sua instância foi criada ao ver a lista de instâncias do Config Controller: - gcloud anthos config controller list --location=us-central1- O resultado é o seguinte: - NAME LOCATION STATE cc-example us-central1 RUNNING
- Defina uma variável de ambiente para o email 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 associação de políticas: - gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_ID- Substitua - PROJECT_IDpelo ID do seu projeto.- O resultado é semelhante ao seguinte: - 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
- Use o Config Connector para ativar a API Pub/Sub: - Com o seu editor de texto preferido, crie um ficheiro com o nome - enable-pubsub.yamle copie o seguinte YAML para o ficheiro:- # 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_IDpelo ID do seu projeto.
- Para ativar a API Pub/Sub, aplique o manifesto ao cluster: - kubectl apply -f enable-pubsub.yaml- A ativação desta API pode demorar vários minutos. 
 
- Use o Config Connector para criar um tópico Pub/Sub: - Crie um ficheiro com o nome - pubsub-topic.yamle copie o seguinte YAML para o ficheiro:- # 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 seu recurso em Google Cloud ao ver a lista de tópicos do Pub/Sub: - gcloud pubsub topics list- O resultado é semelhante ao seguinte: - --- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
- Crie um ficheiro com o nome - bucket-constraint.yamle copie o seguinte YAML para o ficheiro:- # 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- O resultado é o seguinte: - gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
- Demonstre que a restrição está a funcionar tentando usar o Config Connector para criar um recurso StorageBucket em - asia-southeast1:- Crie um ficheiro com o nome - asia-storage-bucket.yamle copie o seguinte YAML para o mesmo:- # 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 contentor do Cloud Storage: - kubectl apply -f asia-storage-bucket.yaml- O resultado é o seguinte: - 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 a partir do GitHub, configure o Cloud NAT. Tem de o fazer porque a sua instância do Config Controller é suportada por um cluster privado do GKE, e os nós do cluster privado não têm acesso à Internet de saída: - Crie um router NAT da nuvem. Precisa deste router para configurar o seu gateway NAT. - gcloud compute routers create cc-nat-router \ --network default \ --region us-central1- O resultado é semelhante ao seguinte: - Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
- Configure um gateway NAT no router que criou no passo 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- O resultado é o seguinte: - 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 exemplo, crie um ficheiro denominado - cc-rootsync.yamle copie o seguinte YAML para o mesmo:- # 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 de a instância estar a sincronizar a partir do repositório, o Config Sync cria o tópico Pub/Sub e aplica-o à instância do Config Controller. 
- Verifique se o Config Sync está a sincronizar o repositório Git com a sua instância do Config Controller: - nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example- O resultado é semelhante ao seguinte: - *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 não vir este resultado, aguarde alguns minutos e tente novamente. 
- Verifique se o Config Controller criou o seu recurso: - gcloud pubsub topics list- O resultado é semelhante ao seguinte: - 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- Neste resultado, pode ver o Pub/Sub que criou na secção Crie uma instância do Config Controller e o que criou sincronizando a sua instância com um repositório do GitHub. 
- Elimine o recurso do Config Connector - PubSubTopic:- kubectl delete -f pubsub-topic.yaml
- Elimine a restrição do Policy Controller: - kubectl delete -f bucket-constraint.yaml
- Elimine o router NAT: - gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1- Prima - yquando lhe for pedido.
- Elimine o recurso do Pub/Sub criado pelo Config Sync: - kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
- Elimine o recurso RootSync: - kubectl delete rootsync root-sync -n config-management-system
- Com o seu editor de texto preferido, elimine todos os ficheiros YAML que criou: - enable-pubsub.yaml
- pubsub-topic.yaml
- bucket-constraint.yaml
- asia-storage-bucket.yaml
- cc-rootsync.yaml
 
- Elimine a instância do Config Controller: - gcloud anthos config controller delete --location=us-central1 cc-example- Prima - yquando lhe for pedido.
- Saiba como configurar o Config Controller.
- Saiba mais sobre o Config Controller.
Crie uma instância do Config Controller
Conceda a autorização necessária ao controlador de configuração
Nesta secção, concede autorização ao Config Controller para gerir Google Cloud recursos:
Use a sua instância do Config Controller
As secções seguintes apresentam as formas como pode usar a sua instância do Config Controller.
Crie um Google Cloud recurso com o Config Connector
Com a sua instância do Config Controller, pode tirar partido do Config Connector para
gerir muitos Google Cloud serviços e recursos através de ferramentas e
APIs do Kubernetes. Nesta secção, usa o Config Controller para criar um recurso PubSubTopic.
Para criar um tópico Pub/Sub com o Config Connector, conclua os seguintes passos:
Aplique uma política com o Policy Controller
A sua instância do Config Controller permite-lhe usar o Policy Controller e as restrições do Policy Controller. Como parte da instalação do Policy Controller, o Config Controller instala automaticamente a biblioteca de modelos de restrições. Pode usar os modelos nesta biblioteca para aplicar uma variedade de controlos de segurança e conformidade comuns nas suas instâncias do Config Controller.
Nesta secção, cria uma restrição através do modelo de restrição GCPStorageLocationConstraintV1. Este modelo permite-lhe restringir a localização na qual pode criar contentores do Cloud Storage. A restrição que cria com este modelo
restringe a localização a us-central1. Pode usar esta restrição para garantir que os contentores estão a ser criados numa região que oferece o melhor preço e desempenho.
Para criar a restrição:
Configure o GitOps com o Config Sync
O Config Sync é um serviço GitOps que lhe permite sincronizar a sua instância do Config Controller com configurações, políticas eGoogle Cloud recursos armazenados num repositório Git, numa imagem OCI ou num repositório Helm. Uma vez que o Config Sync reconcilia continuamente o estado do Config Controller com as configurações na sua origem, pode ajudar a garantir que as suas instâncias têm uma configuração consistente.
Nesta secção, sincroniza a sua instância do Config Controller com um repositório público do GitHub. Este repositório contém
outro recurso PubSubTopic. Ao sincronizar a sua instância a partir deste repositório,
o recurso é criado e aplicado automaticamente à sua instância. Pode optar por criar os seus recursos através da sincronização de configuração (em vez de aplicar o recurso diretamente) se quiser usar um fluxo de trabalho GitOps.
Limpar
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID