Como sincronizar com um repo somente leitura

Neste guia de início rápido, mostramos como começar a usar o Config Sync em um novo cluster usando o repo foo-corp de exemplo (em inglês) para fazer o bootstrap de um cluster com um conjunto de configs. Neste guia de início rápido, você não precisa ter acesso de gravação ao repo. Imagine que uma equipe de conformidade em sua organização seja responsável por criar configs e que cada cluster precise se sincronizar com o repo.

Depois de concluir este guia de início rápido, siga um mais avançado sobre como escrever, testar e sincronizar configs.

Antes de começar

  1. Crie um cluster.

  2. Configure o comando kubectl para se autenticar no cluster e crie um RoleBinding para se tornar um administrador do cluster usando os comandos a seguir. Use o nome do cluster em que você vê [MY-CLUSTER] e use o endereço de e-mail da sua conta do Cloud Billing em que vê [USER-ACCOUNT]. Dependendo de como você configurou o comando gcloud no sistema local, talvez seja necessário adicionar os campos --project e --zone.

    gcloud container clusters get-credentials [MY-CLUSTER]
    
    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole cluster-admin --user [USER_ACCOUNT]
    
  3. Instale o comando nomos no sistema local.

  4. Instale o Config Sync Operator no cluster recém-criado.

Configurar o cluster

Crie um arquivo config-management.yaml e copie o arquivo YAML abaixo nele. Como o repositório é legível por todos, secretType é definido como none. Para ver uma explicação dos campos, consulte Configuração para o repositório Git.

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/csp-config-management/
    syncBranch: 1.0.0
    secretType: none
    policyDir: "foo-corp"

Aplique a configuração ao seu cluster:

kubectl apply -f config-management.yaml

Se o comando for bem-sucedido, o Kubernetes atualizará o Config Sync Operator no cluster para começar a sincronizar a configuração dele do repositório. Para verificar se o Config Sync Operator está em execução, liste todos os pods em execução no namespace config-management-system:

kubectl get pods -n config-management-system

Saída:

NAME                                   READY     STATUS    RESTARTS   AGE
git-importer-5f8bdb59bd-7nn5m          2/2       Running   0          2m
monitor-58c48fbc66-ggrmd               1/1       Running   0          2m
syncer-7bbfd7686b-dxb45                1/1       Running   0          2m

Examinar seu cluster e repositório

O repo foo-corp inclui configs nos diretórios cluster/ e namespaces/. Esses configs são aplicados assim que o Config Sync Operator é configurado para ler o repo.

Todos os objetos gerenciados pelo Config Sync têm o rótulo app.kubernetes.io/managed-by definido como configmanagement.gke.io.

Liste os namespaces gerenciados pelo Config Sync:

kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io

Saída:

NAME               STATUS   AGE
audit              Active   4m
shipping-dev       Active   4m
shipping-prod      Active   4m
shipping-staging   Active   4m

Examine os configs que causaram a criação desses namespaces, como namespaces/audit/namespace.yaml e namespaces/online/shipping-app-backend/shipping-dev/namespace.yaml.

Liste os ClusterRoles gerenciados pelo Config Sync:

kubectl get clusterroles -l app.kubernetes.io/managed-by=configmanagement.gke.io

Saída:

NAME               AGE
namespace-reader   6m52s
pod-creator        6m52s

Para analisar os configs do ClusterRole, declare:

  • cluster/namespace-reader-clusterrole.yaml
  • cluster/pod-creator-clusterrole.yaml

É possível examinar outros objetos, como Roles e PodSecurityPolicies, da mesma maneira.

Tentativa de modificar manualmente um objeto gerenciado

Se você modificar manualmente um objeto do Kubernetes gerenciado pelo Config Sync, a configuração desse objeto será automaticamente atualizada de acordo com o config do objeto no seu repo. Para fazer esse teste, exclua o namespace shipping-dev.

kubectl delete namespace shipping-dev

Se você verificar imediatamente, o namespace poderá estar ausente, mas dentro de alguns segundos ele existirá novamente. Exemplo:

kubectl get ns shipping-dev

Saída:

Error from server (NotFound): namespaces "shipping-dev" not found

Segundos depois:

kubectl get ns shipping-dev

Saída:

NAME           STATUS   AGE
shipping-dev   Active   3s

Como fazer a limpeza

Depois que você concluir os exercícios deste tópico, exclua o cluster usado nos testes para fazer a limpeza.

A seguir