Configurar o Config Controller

Esta página mostra como configurar o Config Controller. O Config Controller é um serviço hospedado que oferece um endpoint de API que pode provisionar, atuar e orquestrar recursos do Google Cloud como parte do Anthos Config Management. Para saber mais sobre o Config Controller, consulte Visão geral do Config Controller.

Antes de começar

Antes de configurar o Config Controller, você precisa concluir as seguintes etapas:

  1. Instale e inicialize a Google Cloud CLI, que fornece os comandos gcloud, kubectl e nomos usados nestas instruções. Se você usa o Cloud Shell, a Google Cloud CLI já vem pré-instalada.

    O kubectl não é instalado por padrão pela Google Cloud CLI. Para instalar o kubectl, execute o seguinte comando:

    gcloud components install kubectl
    
  2. Defina o projeto do Google Cloud em que o Config Controller será hospedado:

    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

    Substitua PROJECT_ID pelo projeto do Google Cloud em que o Config Controller será hospedado.

  3. Se você não tiver uma rede padrão no seu projeto, crie uma executando o seguinte comando:

    gcloud compute networks create default --subnet-mode=auto
    

    Como alternativa, é possível selecionar uma rede diferente usando a sinalização --network no comando gcloud anthos config controller create ao configurar o Config Controller.

Configurar o Config Controller

Crie um Config Controller com os seguintes comandos da CLI gcloud:

  1. Ative os serviços no projeto para usar os comandos subsequentes da CLI gcloud:

    gcloud services enable krmapihosting.googleapis.com \
        container.googleapis.com \
        cloudresourcemanager.googleapis.com
    
  2. Crie seu controlador de configuração. Essa operação pode levar mais de 15 minutos.

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION
    

    Substitua:

    • CONFIG_CONTROLLER_NAME: o nome que você quer dar ao controlador.
    • LOCATION: adicione uma das seguintes regiões:

      • us-central1
      • us-east1
      • northamerica-northeast1
      • northamerica-northeast2
      • europe-north1
      • europe-west1
      • europe-west3
      • australia-southeast1
      • australia-southeast2
      • asia-northeast1
      • asia-northeast2

      Nenhuma outra região é compatível.

    É possível definir parâmetros opcionais, como --man-block, que permite especificar um intervalo CIDR para permitir que endereços IP nesses intervalos acessem o plano de controle do Kubernetes para maior segurança. Para ver a lista completa de opções, consulte a documentação do gcloud anthos config controller create.

  3. Depois que sua instância for criada, ela aparecerá na lista de instâncias. Para ver a lista de instâncias, execute o seguinte comando:

    gcloud anthos config controller list --location=LOCATION
    
  4. Para aplicar manifestos, faça a autenticação com a instância:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    
  5. Conceda permissão ao Config Controller para gerenciar os recursos do Google Cloud no projeto:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "roles/owner" \
        --project "${PROJECT_ID}"
    

Fazer upgrade do Config Controller

Como o Config Controller é um serviço gerenciado, ele é atualizado automaticamente pelo Google. Para detalhes sobre as versões incluídas de componentes e novos recursos, consulte as notas da versão do Config Controller.

Gerenciar recursos do Google Cloud com o Config Controller

Depois de configurar o Config Controller, é possível usar o Config Connector para gerenciar muitos serviços e recursos do Google Cloud usando ferramentas e APIs do Kubernetes. Para uma lista completa dos recursos que é possível gerenciar, consulte Recursos do Config Connector.

Neste exemplo, você cria um repositório no Cloud Source Repositories que pode ser usado na seção Configurar o GitOps.

  1. Crie um arquivo chamado service.yaml e copie o arquivo YAML a seguir nele.

    # service.yaml
    
    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sourcerepo.googleapis.com
      namespace: config-control
    
  2. Aplique o manifesto e aguarde para ativar o Cloud Source Repositories:

    kubectl apply -f service.yaml
    kubectl wait -f service.yaml --for=condition=Ready
    
  3. Crie um arquivo chamado repo.yaml e copie o arquivo YAML a seguir nele.

    # repo.yaml
    
    apiVersion: sourcerepo.cnrm.cloud.google.com/v1beta1
    kind: SourceRepoRepository
    metadata:
      name: REPO_NAME
      namespace: config-control
    

    Substitua REPO_NAME pelo nome que você quer dar para o Cloud Source Repositories.

  4. Para criar o repositório, aplique o manifesto:

    kubectl apply -f repo.yaml
    

Configure o GitOps

É possível sincronizar configurações no seu repositório Git com o Config Controller usando o Config Sync. No exemplo desta seção, você usará o Cloud Source Repositories criado na seção anterior.

  1. Crie um arquivo chamado gitops-iam.yaml e copie o arquivo YAML a seguir nele.

    # gitops-iam.yaml
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: config-sync-sa
      namespace: config-control
    spec:
      displayName: ConfigSync
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: config-sync-wi
      namespace: config-control
    spec:
      member: serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/root-reconciler]
      role: roles/iam.workloadIdentityUser
      resourceRef:
        apiVersion: iam.cnrm.cloud.google.com/v1beta1
        kind: IAMServiceAccount
        name: config-sync-sa
    
    ---
    
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: allow-configsync-sa-read-csr
      namespace: config-control
    spec:
      member: serviceAccount:config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
      role: roles/source.reader
      resourceRef:
        apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
        kind: Project
        external: projects/PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto em que o Config Controller está em execução.

  2. Para conceder acesso ao repositório para o Config Sync, aplique o manifesto:

    kubectl apply -f gitops-iam.yaml
    
  3. O Config Controller ativa automaticamente as APIs RootSync e RepoSync do Config Sync. Essas APIs dão acesso a outros recursos do Config Sync, como sincronização de vários repositórios e renderização automática de configurações do Kustomize e do Helm.

    Se você quiser configurar o Config Sync, crie um objeto RootSync. Para criar esse objeto, crie um arquivo chamado root-sync.yaml e copie o seguinte texto nele:

    # root-sync.yaml
    
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: https://source.developers.google.com/p/PROJECT_ID/r/REPO_NAME
        branch: REPO_BRANCH
        dir: REPO_PATH
        auth: gcpserviceaccount
        gcpServiceAccountEmail: config-sync-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a conta de serviço e o repositório Git.
    • REPO_NAME: o nome do repositório Git para extrair a configuração e observar as alterações.
    • REPO_BRANCH: a ramificação do repositório com que sincronizar. O valor padrão é master.
    • REPO_PATH: o caminho do diretório de onde sincronizar em relação à raiz do repositório Git. O valor padrão é /.

    Para saber mais sobre os campos em root-sync.yaml, consulte Campos RootSync e RepoSync.

  4. Para criar a configuração do Config Sync, aplique o manifesto e aguarde a criação dele:

    kubectl apply -f root-sync.yaml
    kubectl wait --for condition=established --timeout=10s crd/rootsyncs.configsync.gke.io
    

Verificar o resultado

Siga estas etapas para verificar a configuração inicial:

  1. Verifique se todos os controladores foram configurados com sucesso no Config Controller:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    
  2. Verifique se o repositório Git está sincronizado com o Config Controller com o Config Sync usando o comando nomos ou o comando gcloud alpha anthos config sync repo:

    nomos status --contexts $(kubectl config current-context)
    
    # or
    
    gcloud alpha anthos config sync repo list --targets config-controller
    

Excluir o Config Controller

Se você decidir parar de usar o Config Controller, limpe todos os recursos criados. Primeiro, você precisa remover recursos do Config Controller antes de excluir o próprio Config Controller.

Excluir o controlador de configuração sem primeiro excluir os recursos provisionados deixa os recursos em um estado abandonado. Os recursos ainda existem no Google Cloud (e geram cobranças de faturamento), mas não são gerenciados pela configuração declarativa.

Depois que todos os recursos forem excluídos, será possível excluir o Config Controller usando a CLI gcloud:

gcloud anthos config controller delete --location=LOCATION CONFIG_CONTROLLER_NAME

Considerações de produção

Na produção, confira as considerações de alta disponibilidade para o Config Controller.

A seguir