Instalar o Config Connector no modo com namespace


Nesta página, explicamos como instalar o Config Connector no modo com namespace.

A instalação no modo com namespace é uma extensão do Config Connector e instalação. O modo com namespace é compatível com o gerenciamento de vários projetos, cada um com as próprias identidades do Google Cloud.

Antes de começar

Antes de configurar o Config Connector para ser executado no modo com namespace, instale o Config Connector.

Configure o Config Connector para ser executado no modo com namespace

Para ativar o modo com namespace, siga estas etapas:

  1. Copie o seguinte manifesto do YAML para um arquivo chamado configconnector.yaml:

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnector
    metadata:
      # the name is restricted to ensure that there is only ConfigConnector resource installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
      mode: namespaced
      stateIntoSpec: Absent
    
  2. Aplique a configuração ao cluster com kubectl apply:

    kubectl apply -f configconnector.yaml
    

Configurar o Config Connector para gerenciar recursos nos namespaces

Nas seções a seguir, o projeto do Google Cloud em que você instala o Config Connector é conhecido como projeto host ou HOST_PROJECT_ID. Os outros projetos em que você gerencia recursos são conhecidos como projetos gerenciados ou MANAGED_PROJECT_ID. Eles podem ser os mesmos projetos se você pretender usar o Config Connector apenas para criar recursos do Google Cloud no mesmo projeto do seu cluster.

Como criar um namespace

É possível ignorar essa etapa se você tiver um namespace para organizar os recursos do Google Cloud.

Use kubectl para criar um novo namespace executando o seguinte comando:

kubectl create namespace NAMESPACE

Substitua NAMESPACE por um namespace.

Como criar uma identidade

Crie uma conta de serviço de gerenciamento de identidade e acesso (IAM, na sigla em inglês) e vincule a conta de serviço do IAM e a conta de serviço do Config Connector do Kubernetes.

  1. Criar uma conta de serviço do IAM Se você tiver uma conta de serviço atual, poderá usá-la em vez de criar uma nova. Use gcloud para criar a conta de serviço executando o seguinte comando:

    gcloud iam service-accounts create NAMESPACE_GSA --project HOST_PROJECT_ID
    

    Substitua:

    • NAMESPACE_GSA pelo nome da conta de serviço do Google (GSA), vinculada ao namespace;
    • HOST_PROJECT_ID pelo ID do projeto host.

    Para saber mais sobre como criar contas de serviço, consulte Como criar e gerenciar contas de serviço.

  2. Conceda à conta de serviço do IAM permissões elevadas no projeto gerenciado.

    gcloud projects add-iam-policy-binding MANAGED_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/owner"
    

    Substitua:

    • MANAGED_PROJECT_ID pelo ID do projeto gerenciado;
    • NAMESPACE_GSA pelo nome da conta de serviço do Google, vinculada ao namespace;
    • HOST_PROJECT_ID pelo ID do projeto host.
  3. Crie uma vinculação de política do IAM entre a conta de serviço do IAM e a conta de serviço do Config Connector do Kubernetes. Para vincular as contas de serviço, execute o seguinte comando gcloud:

    gcloud iam service-accounts add-iam-policy-binding \
    NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:HOST_PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-NAMESPACE]" \
        --role="roles/iam.workloadIdentityUser" \
        --project HOST_PROJECT_ID
    

    Substitua:

    • HOST_PROJECT_ID pelo ID do projeto host;
    • NAMESPACE_GSA pelo nome da conta de serviço do Google, vinculada ao namespace;
    • NAMESPACE pelo namespace.
  4. Conceda à conta de serviço do IAM permissões para publicar métricas do Prometheus na Observabilidade do Google Cloud no projeto host.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    

    Substitua:

    • HOST_PROJECT_ID pelo ID do projeto host;
    • NAMESPACE_GSA pelo nome da conta de serviço do Google, vinculada ao namespace;

Como criar um ConfigConnectorContext

Para criar recursos do Google Cloud, configure o Config Connector para monitorar o namespace. Para isso, adicione um objeto ConfigConnectorContext no namespace que você quer usar.

Para criar um ConfigConnectorContext, conclua as etapas a seguir.

  1. Copie o seguinte manifesto do YAML para um arquivo chamado configconnectorcontext.yaml:

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnectorContext
    metadata:
      # you can only have one ConfigConnectorContext per namespace
      name: configconnectorcontext.core.cnrm.cloud.google.com
      namespace: NAMESPACE
    spec:
      googleServiceAccount: "NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com"
      stateIntoSpec: Absent
    

    Substitua:

    • NAMESPACE pelo nome do namespace;
    • NAMESPACE_GSA pelo nome da conta de serviço do Google, vinculada ao namespace;
    • HOST_PROJECT_ID pelo ID do projeto host.
  2. Aplique o arquivo ao cluster com kubectl:

    kubectl apply -f configconnectorcontext.yaml
    
  3. Verifique se o operador do Config Connector criou uma conta de serviço do Kubernetes para o namespace com kubectl. Para isso, execute o seguinte comando:

    kubectl get serviceaccount/cnrm-controller-manager-NAMESPACE  -n cnrm-system
    

    Substitua NAMESPACE pelo nome do namespace.

  4. Verifique se o pod do controlador do Config Connector está em execução para seu namespace com kubectl. Para isso, execute o seguinte comando:

    kubectl wait -n cnrm-system \
        --for=condition=Ready pod \
        -l cnrm.cloud.google.com/component=cnrm-controller-manager \
        -l cnrm.cloud.google.com/scoped-namespace=NAMESPACE
    

    Substitua NAMESPACE pelo nome do namespace.

    Se o controlador do Config Connector estiver em execução, a saída será semelhante a:

    cnrm-controller-manager-abcdefghijk-0 condition met.
    

Configurar o Config Connector para não gerenciar mais recursos no namespace

Para configurar o Config Connector para não gerenciar mais o namespace, remova todos os recursos do Config Connector no namespace e exclua o ConfigConnectorContext no namespace.

Remover os recursos do Config Connector do namespace

Para finalizar a remoção de ConfigConnectorContext, remova todos os recursos do Config Connector do namespace.

  1. Para descobrir todos os recursos do Config Connector no namespace, liste todos os recursos para cada definição de recurso personalizado do Config Connector.

    kubectl get gcp -n NAMESPACE
    

    Substitua NAMESPACE pelo nome do namespace.

  2. Para remover todos os recursos do Config Connector, execute um comando de exclusão para cada recurso na saída da etapa anterior.

    kubectl delete -n NAMESPACE KIND NAME
    

    Substitua:

    • NAMESPACE: o nome do namespace.
    • KIND: o tipo de recurso descoberto na etapa anterior
    • NAME: o nome do recurso descoberto na etapa anterior

Remover o ConfigConnectorContext

Para configurar o Config Connector para não gerenciar mais os recursos do Config Connector no namespace, exclua ConfigConnectorContext do namespace.

  kubectl delete -n NAMESPACE ConfigConnectorContext configconnectorcontext.core.cnrm.cloud.google.com

Substitua NAMESPACE pelo nome do namespace.

A exclusão de ConfigConnectorContext não será finalizada até que todos os recursos do Config Connector sejam removidos do namespace.

Como desinstalar o Config Connector

Não siga estas etapas para desinstalar um Controlador de configuração cluster.

Use kubectl delete para remover as CRDs do Config Connector e os componentes do controlador:

kubectl delete ConfigConnectorContext --all -A –wait=false

kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
    --wait=true

Para desinstalar o operador do Config Connector, execute o seguinte comando:

kubectl delete -f operator-system/configconnector-operator.yaml  --wait=true

A seguir