Ativar o Workload Identity no GKE

Este tópico explica como ativar o Workload Identity para o Apigee hybrid no GKE.

Se estiver a usar o Apigee Hybrid AKS ou EKS, siga as instruções em Ativar a Workload Identity Federation no AKS e no EKS.

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:

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

Verifique as variáveis de ambiente:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $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=my-cluster-name

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 gráfico de cada componente.

Ative o Workload Identity para o Apigee Hybrid

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

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-datastore
  • apigee-telemetry
  • apigee-org
  • apigee-env

Quando executa o comando helm upgrade com as flags --dry-run ou --dry-run=server 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=server
NAME: datastore
...
For Cassandra 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 my-gsa@my-project-id.iam.gserviceaccount.com \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project-id.svc.id.goog[apigee/apigee-cassandra-default]" \
      --project my-project-id

kubectl annotate serviceaccount apigee-cassandra-default \
      iam.gke.io/gcp-service-account=my-gsa@my-project-id.iam.gserviceaccount.com \
      --namespace apigee
  1. Obtenha o comando para configurar a identidade da carga de trabalho para apigee-datastore e execute os comandos em NOTES: na saída.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run=server
  2. Obtenha os comandos para configurar a identidade da carga de trabalho para apigee-telemetry e execute os comandos 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 os comandos 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 os comandos 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