Ativar o Workload Identity com gráficos Helm

Este tópico explica como ativar o Workload Identity para o Apigee hybrid através de gráficos Helm.

Se estiver a usar o apigeectl para instalar e gerir o Apigee hybrid, consulte o artigo Ativar a Workload Identity com o apigeectl.

Vista geral

O Workload Identity é uma forma de as aplicações em execução no GKE (Google Kubernetes Engine) acederem aos serviços do Google Cloud. Para ver descrições gerais do Workload Identity, consulte:

Uma conta de serviço da IAM do Google Cloud é uma identidade que uma aplicação pode usar para fazer pedidos às APIs Google. Estas contas de serviço são denominadas contas de serviço Google (GSA) no documento. Para mais informações sobre as ASGs, consulte o artigo Contas de serviço.

Em separado, o Kubernetes também tem o conceito de contas de serviço. Uma conta de serviço fornece uma identidade para processos executados num pod. As contas de serviço do Kubernetes são recursos do Kubernetes, enquanto as contas de serviço Google são específicas do Google Cloud. Para ver informações sobre contas de serviço do Kubernetes, consulte o artigo Configure contas de serviço para pods na documentação do Kubernetes.

O Apigee cria e usa uma conta de serviço do Kubernetes para cada tipo de componente quando instala pela primeira vez os gráficos Helm para esses componentes. A ativação do Workload Identity permite que os componentes híbridos interajam com as contas de serviço do Kubernetes.

Variáveis de ambiente usadas nestes procedimentos

Estes procedimentos usam as seguintes variáveis de ambiente. Defina estes valores na shell de comandos ou substitua-os nos exemplos de código pelos valores reais:

  • CLUSTER_LOCATION: a região ou a zona do seu cluster do Kubernetes, por exemplo: us-west1.
  • CLUSTER_NAME: o nome do cluster.
  • ENV_NAME: o nome do ambiente do Apigee.
  • ORG_NAME: o nome da sua organização do Apigee.
  • PROJECT_ID: o ID do seu projeto do Google Cloud.
  • NAMESPACE: o seu espaço de nomes do Apigee (normalmente, "apigee").

Verifique as variáveis de ambiente:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME

Inicialize qualquer uma das variáveis de que precisa:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export CLUSTER_NAME=hybrid-base-directory/apigeectl

Workload Identity e ficheiros de chaves de contas de serviço

Quando executa o Apigee hybrid no GKE, a prática padrão é criar e transferir chaves privadas (ficheiros .json) para cada uma das contas de serviço. Quando usa o Workload Identity, não precisa de transferir chaves privadas de contas de serviço e adicioná-las a clusters do GKE.

Se transferiu ficheiros de chaves de contas de serviço como parte da instalação do Apigee Hybrid, pode eliminá-los depois de ativar a Identidade de carga de trabalho. Na maioria das instalações, residem no diretório para o carater de cada componente.

Ative o Workload Identity para o Apigee Hybrid

Siga estas instruções para configurar o Workload Identity para o seu projeto.

Instalação migrada e Workload Identity

Se migrou o cluster da gestão com a ferramenta de migração do Helm do Apigee hybrid, a sintaxe de substituições do Workload Identity foi alterada.apigeectl Tem de verificar as seguintes propriedades no ficheiro de substituições:

  • namespace é obrigatório. Por exemplo:
    instanceID: "hybrid-instance-1"
    namespace: "apigee"
    
  • A propriedade gcp.workloadIdentity.enabled substitui a propriedade gcp.workloadIdentityEnabled. Por exemplo:
    gcp:
      workloadIdentity:
        enabled: true
  • Para instalações de produção, cada componente tem uma propriedade gsa. O valor destas propriedades é o endereço de email da conta de serviço do Google IAM para o componente correspondente. Por exemplo:
    watcher
      gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Para instalações de não produção, pode fornecer um único GSA na propriedade gcp.workloadIdentity.gsa.
    gcp
      workloadIdentity
        gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Com os gráficos Helm para o Apigee hybrid, misture as GSAs de produção e não produção para o Workload Identity. Pode especificar um único valor para a propriedade gcp.workloadIdentity.gsa e especificar GSAs individuais para componentes específicos. Os valores que indicar para os componentes individuais substituem o valor que indicar para gcp.workloadIdentity.gsa apenas para esse componente.

Prepare-se para configurar o Workload Identity

  1. Verifique se a Identidade de carga de trabalho está ativada no ficheiro de substituições. Deve ser ativado no ficheiro de substituições e ter valores para as seguintes propriedades de configuração:
  2. Verifique se a configuração gcloud atual está definida para o ID do projeto do Google Cloud com o seguinte comando:
    gcloud config get project
  3. Se necessário, defina a configuração gcloud atual:

    gcloud config set project $PROJECT_ID
  4. Verifique se o Workload Identity está ativado para o seu cluster do GKE. Quando criou o cluster no Passo 1: crie um cluster, o passo 6 consistiu em ativar o Workload Identity. Pode confirmar se o Workload Identity está ativado executando o seguinte comando:

    Clusters regionais

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Clusters zonais

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    O resultado deve ter o seguinte aspeto:

      ---
    workloadPool: PROJECT_ID.svc.id.goog

    Se vir null nos resultados, execute o seguinte comando para ativar a identidade da carga de trabalho para o cluster:

    Clusters regionais

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Clusters zonais

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Ative a identidade de carga de trabalho para cada grupo de nós com os seguintes comandos. Esta operação pode demorar até 30 minutos para cada nó:

    Clusters regionais

    gcloud container node-pools update NODE_POOL_NAME \
      -cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Clusters zonais

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Onde NODE_POOL_NAME é o nome de cada conjunto de nós. Na maioria das instalações do Apigee Hybrid, os dois conjuntos de nós predefinidos têm os nomes apigee-data e apigee-runtime.

  6. Confirme que o Workload Identity está ativado nos seus node pools com os seguintes comandos:

    Clusters regionais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Clusters zonais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    O resultado deve ter um aspeto semelhante ao seguinte:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
    mode: GKE_METADATA
      

Configure o Workload Identity

Use o procedimento seguinte para ativar o Workload Identity para os seguintes componentes híbridos:

  • apigee-telemetry
  • apigee-org
  • apigee-env

Quando executa o comando helm upgrade com a flag --dry-run para os gráficos apigee-datastore, apigee-env, apigee-org e apigee-telemetry, o resultado inclui os comandos necessários para configurar a identidade da carga de trabalho com os nomes corretos de GSA e KSA.

Por exemplo:

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run
NAME: datastore
...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding  \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
      --project :my-project
  1. Obtenha o comando para configurar a identidade da carga de trabalho para apigee-datastore e execute o comando em NOTES: na saída.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  2. Obtenha os comandos para configurar a identidade da carga de trabalho para apigee-telemetry e execute o comando em NOTES: na saída.
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  3. Obtenha os comandos para configurar a identidade da carga de trabalho para apigee-org e execute o comando em NOTES: na saída.
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  4. Obtenha os comandos para configurar a identidade da carga de trabalho para apigee-env e execute o comando em NOTES: na saída.
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run

    Repita este passo para cada ambiente na sua instalação.

Valide o Workload Identity

  1. Valide se os passos funcionaram:
    gcloud config set project $PROJECT_ID
    
    kubectl run --rm -it --image google/cloud-sdk:slim \
      --namespace $NAMESPACE workload-identity-test\
      -- gcloud auth list

    Se não vir uma linha de comandos, experimente premir Enter.

    Se os passos foram executados corretamente, deve ver uma resposta semelhante à seguinte:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
  2. Se estiver a fazer a atualização a partir de uma instalação anterior, limpe os segredos que continham chaves privadas de contas de serviço:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  3. Verifique os registos:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    
  4. (Opcional) Pode ver o estado das suas contas de serviço do Kubernetes na página Kubernetes: Vista geral das cargas de trabalho no Google Cloud console.

    Aceda a Cargas de trabalho