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:
- Apresentamos o Workload Identity: melhor autenticação para as suas aplicações do GKE
- Usar o Workload Identity
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_IDecho $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-idexport 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
- 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:
- Para todas as instalações:
gcp.workloadIdentity.enabled
deve sertrue
. Por exemplo:gcp: workloadIdentity: enabled: true
- Para instalações de produção:
- Para instalações não de produção, forneça o endereço do GSA não de produção (com todas as funções de IAM necessárias) na propriedade
gcp.workloadIdentity.gsa
.
- Para todas as instalações:
- 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
- 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
-
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
eapigee-runtime
. - 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
Se necessário, defina a configuração gcloud
atual:
gcloud config set project $PROJECT_ID
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
- Obtenha o comando para configurar a identidade da carga de trabalho para
apigee-datastore
e execute os comandos emNOTES:
na saída.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run=server
- Obtenha os comandos para configurar a identidade da carga de trabalho para
apigee-telemetry
e execute os comandos emNOTES:
na saída.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Obtenha os comandos para configurar a identidade da carga de trabalho para
apigee-org
e execute os comandos emNOTES:
na saída.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Obtenha os comandos para configurar a identidade da carga de trabalho para
apigee-env
e execute os comandos emNOTES:
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
- 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
- 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}')
- Verifique os registos:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
- (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.