En este tema, se explica cómo habilitar la federación de identidades de cargas de trabajo para GKE en Apigee Hybrid.
Si usas AKS o EKS de Apigee hybrid, sigue las instrucciones en Habilita la federación de identidades para cargas de trabajo en AKS y EKS.
Descripción general
La federación de identidades para cargas de trabajo de GKE es una forma en la que las aplicaciones que se ejecutan en GKE (Google Kubernetes Engine) pueden acceder a los Google Cloud servicios. Para obtener descripciones generales de la federación de identidades para cargas de trabajo para GKE, consulta lo siguiente:
- Acerca de la federación de identidades para cargas de trabajo para GKE
- Autenticación en Google Cloud APIs desde cargas de trabajo de GKE
Una cuenta de servicio de Google Cloud IAM es una identidad que una aplicación puede usar para realizar solicitudes a las API de Google. Estas cuentas de servicio se denominan GSA (Cuentas de servicio de Google) en el documento. Para obtener más información sobre las GSA, consulta Cuentas de servicio.
De manera independiente, Kubernetes también tiene el concepto de cuentas de servicio. Una cuenta de servicio proporciona una identidad para los procesos que se ejecutan en un pod. Las cuentas de servicio de Kubernetes son recursos de Kubernetes, mientras que las cuentas de servicio de Google son específicas de Google Cloud. Para obtener información sobre las cuentas de servicio de Kubernetes, consulta Configura cuentas de servicio para pods en la documentación de Kubernetes.
Apigee crea y usa una cuenta de servicio de Kubernetes para cada tipo de componente cuando instalas los gráficos de Helm para esos componentes por primera vez. Si habilitas la federación de identidades para cargas de trabajo para GKE, los componentes híbridos pueden interactuar con las cuentas de servicio de Kubernetes.
Variables de entorno que se usan en estos procedimientos
Estos procedimientos usan las siguientes variables de entorno: Configúralos en el shell de comandos o reemplázalos en las muestras de código por los valores reales:
PROJECT_ID
: el ID del proyecto de Google Cloud.ORG_NAME
: el nombre de tu organización de Apigee.ENV_NAME
: el nombre del entorno de Apigee.NAMESPACE
: Tu espacio de nombres de Apigee (por lo general,apigee
).CLUSTER_LOCATION
: la región o la zona de tu clúster de Kubernetes, por ejemplo:us-west1
.CLUSTER_NAME
: El nombre de tu clúster.
Verifica las variables de entorno:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
Inicializa cualquiera de las variables que necesitas:
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
Federación de identidades para cargas de trabajo para GKE y archivos de claves de cuentas de servicio
Cuando se ejecuta Apigee Hybrid en GKE, la práctica estándar es crear y descargar claves privadas (archivos .json
) para cada una de las cuentas de servicio. Cuando usas Workload Identity Federation for GKE, no necesitas descargar claves privadas de cuentas de servicio ni agregarlas a los clústeres de GKE.
Si descargaste archivos de claves de cuenta de servicio como parte de la instalación de Apigee Hybrid, puedes borrarlos después de habilitar la federación de identidades para cargas de trabajo para GKE. En la mayoría de las instalaciones, residen en el directorio de los gráficos de cada componente.
Habilita la federación de identidades para cargas de trabajo para GKE en Apigee Hybrid
Sigue estas instrucciones para configurar tu proyecto de modo que use la federación de identidades para cargas de trabajo para GKE.
Prepárate para configurar la federación de identidades para cargas de trabajo para GKE
- Verifica que la federación de identidades para cargas de trabajo para GKE esté habilitada en tu archivo de anulaciones. Debe habilitarse en el
archivo de anulación y deberías tener valores para las siguientes propiedades de configuración:
- Para todas las instalaciones:
gcp.workloadIdentity.enabled
debe sertrue
. Por ejemplo:gcp: workloadIdentity: enabled: true
- Para las instalaciones de producción:
connectAgent.gsa
envs.gsa.runtime
envs.gsa.synchronizer
envs.gsa.udca
logger.gsa
mart.gsa
metrics.gsa
mintTaskscheduler.gsa
(Si usas Monetization for Apigee hybrid en la v1.15.1 y versiones posteriores)udca.gsa
watcher.gsa
- Para las instalaciones que no son de producción, proporciona la dirección de la GSA que no sea de producción (con todos los roles
de IAM necesarios) en la
propiedad
gcp.workloadIdentity.gsa
.
- Para todas las instalaciones:
- Verifica que la configuración actual de
gcloud
sea el ID de tu proyecto de Google Cloud con el siguiente comando:gcloud config get project
- Verifica que Workload Identity Federation for GKE esté habilitada para tu clúster de GKE. Cuando creaste el clúster
en el Paso 1: Crea un clúster, el paso 6 fue Habilitar
la federación de identidades para cargas de trabajo para GKE. Confirma que la federación de identidades para cargas de trabajo para GKE esté habilitada con el siguiente comando:
Clústeres regionales
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
Clústeres zonales
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
El resultado debe tener el siguiente aspecto:
--- workloadPool: PROJECT_ID.svc.id.goog
Si, en cambio, ves
null
en los resultados, ejecuta el siguiente comando para habilitar la federación de identidades para cargas de trabajo para GKE en tu clúster:Clústeres regionales
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Clústeres zonales
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
Habilita la federación de identidades para cargas de trabajo para GKE en cada grupo de nodos con los siguientes comandos. Esta operación puede demorar hasta 30 minutos por cada nodo:
Clústeres regionales
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Clústeres zonales
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
En el ejemplo anterior, NODE_POOL_NAME es el nombre de cada grupo de nodos. En la mayoría de las instalaciones de Apigee Hybrid, los dos grupos de nodos predeterminados se llaman
apigee-data
yapigee-runtime
. - Verifica que la federación de identidades para cargas de trabajo para GKE esté habilitada en tus grupos de nodos con los siguientes comandos:
Clústeres regionales
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:"
Clústeres zonales
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:"
Deberías obtener un resultado similar al siguiente:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
Si es necesario, establece la configuración actual gcloud
:
gcloud config set project $PROJECT_ID
Configura tu instalación para usar la federación de identidades para cargas de trabajo para GKE
Usa el siguiente procedimiento para habilitar la federación de identidades para cargas de trabajo para GKE en los siguientes componentes de Hybrid:
apigee-datastore
apigee-telemetry
apigee-org
apigee-env
Cuando ejecutes helm upgrade
con las marcas --dry-run
o --dry-run=server
para los gráficos apigee-datastore
, apigee-env
, apigee-org
y apigee-telemetry
, el resultado incluirá los comandos que necesitarás para configurar la federación de identidades para cargas de trabajo de GKE con los nombres correctos de GSA y KSA.
Por ejemplo:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
El resultado será similar al siguiente:
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
Aquí:
apigee-cassandra
es el nombre de la cuenta de servicio de Google (GSA) para Cassandra. Consulta Acerca de las cuentas de servicio.PROJECT_ID
se reemplaza por el ID de tu proyecto de Google Cloud.APIGEE_NAMESPACE
se reemplaza por tu espacio de nombres de Apigee,apigee
de forma predeterminada.apigee-cassandra-default
es el nombre de la cuenta de servicio de Kubernetes para los Pods de Cassandra creados por el gráficoapigee-datastore
.
- Obtén el comando para configurar la federación de identidades para cargas de trabajo para GKE para
apigee-datastore
y ejecuta los comandos enNOTES:
en el resultado.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
- Obtén los comandos para configurar la federación de identidades para cargas de trabajo para GKE para
apigee-telemetry
y ejecuta los comandos enNOTES:
en el resultado.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Obtén los comandos para configurar la federación de identidades para cargas de trabajo para GKE para
apigee-org
y ejecuta los comandos enNOTES:
en el resultado.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Obtén los comandos para configurar la federación de identidades para cargas de trabajo para GKE para
apigee-env
y ejecuta los comandos enNOTES:
en el resultado.helm upgrade $ENV_NAME apigee-env/ \ --namespace $NAMESPACE \ --set env=$ENV_NAME \ -f OVERRIDES_FILE \ --dry-run
Repite este paso para cada entorno en tu instalación.
Verifica la federación de identidades para cargas de trabajo para GKE
- Verifica si funcionaron los pasos:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Si no ve el símbolo del sistema, presione Intro.
Si los pasos se ejecutaron correctamente, deberías ver una respuesta como la siguiente:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Si actualizas desde una instalación anterior, limpia los secretos que contenían claves privadas de cuentas de servicio:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Verifica los registros:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
- (Opcional) Puedes ver el estado de tus cuentas de servicio de Kubernetes en la página Descripción general de las cargas de trabajo de Kubernetes en Google Cloud console.