Início rápido: faça a gestão de recursos com o Config Controller

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

  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. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. 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 the resourcemanager.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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. 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 the resourcemanager.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.

  12. Verify that billing is enabled for your Google Cloud project.

  13. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. Crie uma instância do Config Controller

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

    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:

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

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

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

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

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

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

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

    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:

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

      kubectl apply -f bucket-constraint.yaml
      

      O resultado é o seguinte:

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

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

    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.

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

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

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

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

    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

    Elimine os recursos individuais

    1. Elimine o recurso do Config Connector PubSubTopic:

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

      kubectl delete -f bucket-constraint.yaml
      
    3. Elimine o router NAT:

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

      Prima y quando lhe for pedido.

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

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

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

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

      Prima y quando lhe for pedido.

    O que se segue?