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.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.
-
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.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 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_ID
pelo 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.yaml
e 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_ID
pelo 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.yaml
e 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.yaml
e 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.yaml
e 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.yaml
e 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
y
quando 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
y
quando 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 e Google 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 automaticamente e aplicado à 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