Neste tópico, explicamos como ativar a Identidade da carga de trabalho para a Apigee híbrida no GKE.
Se você estiver usando o AKS ou EKS da Apigee híbrida, siga as instruções em Como ativar a federação de identidade da carga de trabalho no AKS e EKS.
Visão geral
A Identidade da carga de trabalho é uma maneira de aplicativos em execução no GKE (Google Kubernetes Engine) acessarem os serviços do Google Cloud. Para visões gerais da Identidade da carga de trabalho, consulte:
- Introdução à Identidade da carga de trabalho: autenticação aprimorada para seus aplicativos do GKE
- Como usar a Identidade da carga de trabalho
Uma conta de serviço do Google Cloud IAM é uma identidade que um aplicativo pode usar para fazer solicitações às APIs do Google. Essas contas de serviço são chamadas de GSA (Contas de serviço do Google) no documento. Para mais informações sobre os GSAs, consulte Contas de serviço.
Separadamente, o Kubernetes também tem o conceito de contas de serviço. Uma conta de serviço fornece uma identidade para processos executados em um pod. As contas de serviço do Kubernetes são recursos do Kubernetes, enquanto as contas de serviço do Google são específicas do Google Cloud. Para informações sobre as contas de serviço do Kubernetes, consulte Configurar contas de serviço para pods na documentação do Kubernetes.
A Apigee cria e usa uma conta de serviço do Kubernetes para cada tipo de componente quando você instala os gráficos do Helm pela primeira vez para eles. A ativação da Identidade da carga de trabalho permite que os componentes híbridos se conectem com as contas de serviço do Kubernetes.
Variáveis de ambiente usadas nestes procedimentos
Esses procedimentos usam as variáveis de ambiente a seguir. Elas podem ser definidas no shell de comando ou substituídas nas amostras de código por valores reais:
CLUSTER_LOCATION
: a região ou zona do cluster do Kubernetes. Por exemplo:us-west1
.CLUSTER_NAME
: o nome do cluster.ENV_NAME
: nome do ambiente da Apigee.ORG_NAME
: o nome da organização da Apigee.PROJECT_ID
: o ID do projeto do Google Cloud.NAMESPACE
: seu namespace da Apigee (geralmente "apigee").
Verifique as variáveis de ambiente:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME
Inicialize uma das variáveis necessárias:
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=hybrid-base-directory/apigeectl
Identidade da carga de trabalho e arquivos de chave da conta de serviço
Ao executar a Apigee híbrida no GKE, a prática padrão é criar e fazer o download de chaves
privadas (arquivos .json
) para cada uma das contas de serviço. Ao usar a Identidade da carga de trabalho,
você não precisa fazer o download de chaves privadas de contas de serviço e adicioná-las a Clusters do GKE.
Se você fez o download de arquivos de chave de conta de serviço como parte da instalação da Apigee híbrida, é possível excluí-los depois de ativar a Identidade da carga de trabalho. Na maioria das instalações, eles ficam no diretório do caractere de cada componente.
Ativar a Identidade da carga de trabalho para a Apigee híbrida
Siga essas instruções para configurar a Identidade da carga de trabalho para seu projeto.
Instalação migrada e Identidade da carga de trabalho
Se você migrou seu cluster do gerenciamento de
apigeectl
com a ferramenta de migração da Apigee híbrida para o Helm, a
sintaxe de substituição da Identidade da carga de trabalho mudou. Você precisará verificar as
seguintes propriedades no arquivo de substituições:
namespace
é obrigatório. Por exemplo:instanceID: "hybrid-instance-1" namespace: "apigee"
- A propriedade
gcp.workloadIdentity.enabled
substitui a propriedadegcp.workloadIdentityEnabled
. Por exemplo:gcp: workloadIdentity: enabled: true
- Para instalações de produção, cada componente tem uma propriedade
gsa
. O valor dessas propriedades é o endereço de e-mail da conta de serviço do IAM do Google relacionada ao componente correspondente. Por exemplo:watcher gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
- Para instalações que não sejam de produção, é possível fornecer uma única GSA na
propriedade
gcp.workloadIdentity.gsa
.gcp workloadIdentity gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
- Com os gráficos do Helm para a Apigee híbrida, combine GSAs de produção e não produção para a Identidade da carga de trabalho. É possível
especificar uma única GSA para a
propriedade
gcp.workloadIdentity.gsa
e GSAs individuais para componentes específicos. Os valores fornecidos para os componentes individuais vão substituir o valor fornecido paragcp.workloadIdentity.gsa
somente nesse componente.
Preparar-se para configurar a Identidade da carga de trabalho
- Verifique se a Identidade da carga de trabalho está ativada no arquivo de substituições. Ela precisa estar ativada no
arquivo de substituições, e você precisa ter valores para as seguintes propriedades de configuração:
- Para todas as instalações:
gcp.workloadIdentity.enabled
precisa sertrue
. Exemplo:gcp: workloadIdentity: enabled: true
- Para instalações de produção:
- Para instalações de não produção, forneça o endereço da GSA de não produção (com todos os papéis
do IAM necessários) na
propriedade
gcp.workloadIdentity.gsa
.
- Para todas as instalações:
- Verifique se a configuração
gcloud
atual está definida como o ID do projeto do Google Cloud usando o seguinte comando:gcloud config get project
- Verifique se a Identidade da carga de trabalho está ativada no cluster do GKE. Quando você criou o cluster
na Etapa 1: criar um cluster, a etapa 6 consistia na ativação da
Identidade da carga de trabalho. Confirme se a Identidade da carga de trabalho está ativada 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'
A saída será semelhante a esta:
--- workloadPool: PROJECT_ID.svc.id.goog
Se
null
for exibido nos resultados, em vez dos resultados, execute o seguinte comando para ativar a Identidade da carga de trabalho no 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 da carga de trabalho para cada pool de nós com os comandos a seguir. Essa operação pode levar 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
Em que NODE_POOL_NAME é o nome de cada pool de nós. Na maioria das instalações da Apigee híbrida, os dois pools de nós padrão são denominados
apigee-data
eapigee-runtime
. - Verifique se a Identidade da carga de trabalho está ativada nos pools de nós 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:"
A resposta será semelhante a esta:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
Se necessário, defina a configuração atual da gcloud
:
gcloud config set project $PROJECT_ID
Configurar a Identidade da carga de trabalho
Siga o seguinte procedimento para ativar a Identidade da carga de trabalho nestes componentes híbridos:
apigee-telemetry
apigee-org
apigee-env
Quando você executa helm upgrade
com a
flag --dry-run
para os gráficos apigee-datastore
, apigee-env
,
apigee-org
e apigee-telemetry
, a saída inclui os
comandos que você precisa 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
- Receba o comando para configurar a Identidade da carga de trabalho para
apigee-datastore
e o execute emNOTES:
na saída.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Receba os comandos para configurar a Identidade da carga de trabalho para
apigee-telemetry
e os execute emNOTES:
na saída.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Receba os comandos para configurar a Identidade da carga de trabalho para
apigee-org
e os execute emNOTES:
na saída.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Receba os comandos para configurar a Identidade da carga de trabalho para
apigee-env
e os execute emNOTES:
na saída.helm upgrade $ENV_NAME apigee-env/ \ --namespace $NAMESPACE \ --set env=ENV_NAME \ -f overrides.yaml \ --dry-run
Repita essa etapa para cada ambiente na instalação.
Verificar a Identidade da carga de trabalho
- Valide se as etapas funcionaram:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Caso o prompt de comando não seja exibido, pressione Enter.
Se as etapas tiverem sido executadas corretamente, você verá uma resposta como esta:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Se estiver fazendo upgrade de uma instalação anterior, limpe os secrets que continham chaves privadas de conta de serviço:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Verifique os registros:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
- (Opcional) Veja o status das suas contas de serviço do Kubernetes na página Kubernetes: visão geral das cargas de trabalho no console do Google Cloud.