Guia de início rápido: gerenciar recursos com o Config Controller

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

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. 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

  1. 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.
    
  2. 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
    
  3. 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:

  1. 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)"
    
  2. 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:

  1. Use o Config Connector para ativar a API Pub/Sub:

    1. 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.

    2. 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.

  2. Use o Config Connector para criar um tópico do Pub/Sub:

    1. 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
      
    2. Crie o tópico do Pub/Sub:

      kubectl apply -f pubsub-topic.yaml
      
  3. 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:

  1. 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
    
  2. Crie a restrição:

    kubectl apply -f bucket-constraint.yaml
    

    A saída é esta:

    gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
    
  3. Para demonstrar que a restrição está funcionando, tente usar o Config Connector para criar um recurso StorageBucket em asia-southeast1:

    1. 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
      
    2. 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).

  1. 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:

    1. 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
      
    2. 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.
      
  2. 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
    
  3. 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.

  4. 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.

  5. 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

  1. Exclua o recurso PubSubTopic do Config Connector:

    kubectl delete -f pubsub-topic.yaml
    
  2. Exclua a restrição do Policy Controller:

    kubectl delete -f bucket-constraint.yaml
    
  3. Exclua o roteador NAT:

    gcloud compute routers delete cc-nat-router \
        --project=PROJECT_ID \
        --region=us-central1
    

    Pressione y quando for solicitado.

  4. Exclua o recurso do Pub/Sub criado pelo Config Sync:

    kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
    
  5. Exclua o recurso RootSync:

    kubectl delete rootsync root-sync -n config-management-system
    
  6. 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
  7. Exclua a instância do Config Controller:

    gcloud anthos config controller delete --location=us-central1 cc-example
    

    Pressione y quando for solicitado.

A seguir