Este tópico explica como ativar a Workload Identity Federation para o GKE para o Apigee hybrid.
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
A federação de identidades da carga de trabalho para o GKE é uma forma de as aplicações em execução no GKE (Google Kubernetes Engine) acederem Google Cloud a serviços. Para ver descrições gerais da federação de identidade da força de trabalho para o GKE, consulte:
- Acerca da federação de identidades da carga de trabalho para o GKE
- Autentique-se nas Google Cloud APIs a partir de cargas de trabalho do GKE
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 do Helm para esses componentes. A ativação da federação de identidades da carga de trabalho para o GKE 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=MY_ORG_NAME
export ENV_NAME=MY_ENV_NAME
export NAMESPACE=APIGEE_NAMESPACE
export CLUSTER_LOCATION=MY_CLUSTER_LOCATION
export CLUSTER_NAME=MY_CLUSTER_NAME
Federação de identidades da carga de trabalho para o GKE 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 a Workload Identity Federation para o GKE,
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 Workload Identity Federation para o GKE. Na maioria das instalações, residem no diretório para o gráfico de cada componente.
Ative a federação de identidade da carga de trabalho para o GKE para o Apigee Hybrid
Siga estas instruções para configurar o seu projeto de modo a usar a Workload Identity Federation para o GKE.
Prepare-se para configurar a federação de identidades de cargas de trabalho para o GKE
- Verifique se a Workload Identity Federation para o GKE 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 que não sejam de produção, forneça o endereço do GSA que não seja de produção (com todas as funções do 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 a Workload Identity Federation para o GKE está ativada para o seu cluster do GKE. Quando criou o cluster
no Passo 1: crie um cluster, o passo 6 consistiu em ativar
a Workload Identity Federation para o GKE. Confirme se a Workload Identity Federation para o GKE está ativada com 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 Workload Identity Federation para o GKE para o seu 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 Workload Identity Federation para o GKE para cada conjunto 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
. - Verifique se a Workload Identity Federation para o GKE está ativada 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 a sua instalação para usar a Workload Identity Federation para o GKE
Use o procedimento seguinte para ativar a Workload Identity Federation para o GKE 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 Workload Identity Federation para o GKE com os nomes corretos de GSA e KSA.
Por exemplo:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
Vai produzir algo como:
NAME: datastore ... For Cassandra backup, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA). gcloud iam service-accounts add-iam-policy-binding apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[APIGEE_NAMESPACE/apigee-cassandra-default]" \ --project PROJECT_ID kubectl annotate serviceaccount apigee-cassandra-default \ iam.gke.io/gcp-service-account=apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \ --namespace APIGEE_NAMESPACE
Onde:
apigee-cassandra
é o nome da conta de serviço Google (GSA) para o Cassandra. Consulte o artigo Acerca das contas de serviço.PROJECT_ID
é substituído pelo ID do seu projeto do Google Cloud.APIGEE_NAMESPACE
é substituído pelo seu espaço de nomes do Apigee,apigee
por predefinição.apigee-cassandra-default
é o nome da conta de serviço do Kubernetes para os pods do Cassandra criados pelo gráficoapigee-datastore
.
- Obtenha o comando para configurar a federação de identidade da carga de trabalho para o GKE para
apigee-datastore
e execute os comandos emNOTES:
na saída.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
- Obtenha os comandos para configurar a federação de identidade da carga de trabalho para o GKE para
apigee-telemetry
e execute os comandos emNOTES:
na saída.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Obtenha os comandos para configurar a federação de identidade da carga de trabalho para o GKE para
apigee-org
e execute os comandos emNOTES:
na saída.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Obtenha os comandos para configurar a federação de identidade da carga de trabalho para o GKE 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_FILE \ --dry-run
Repita este passo para cada ambiente na sua instalação.
Valide a federação de identidades de cargas de trabalho para o GKE
- 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.