GKE con Workload Identity únicamente: configura Workload Identity
Sigue estos pasos si has configurado el archivo de anulaciones para Workload Identity en GKE en el paso 6: Configurar el clúster.
Si no usas Workload Identity en GKE, ve al paso 1 de la parte 3: exponer la puerta de enlace de entrada de Apigee.
Cuentas de servicio de Google Cloud y cuentas de servicio de Kubernetes
Una cuenta de servicio de Google Cloud es un tipo especial de cuenta que se puede usar para hacer llamadas a la API autorizadas autenticándose como la propia cuenta de servicio. A las cuentas de servicio de Google Cloud se les pueden asignar roles y permisos similares a los de un usuario concreto. Cuando una aplicación se autentica como una cuenta de servicio, tiene acceso a todos los recursos a los que la cuenta de servicio tiene permiso para acceder. Si quieres obtener más información sobre las cuentas de servicio de Google Cloud, consulta el artículo Resumen de las cuentas de servicio.
Has creado cuentas de servicio de Google Cloud para tu instalación híbrida de Apigee en el paso 4: Crea cuentas de servicio. Apigee usa estas cuentas de servicio para autenticar los componentes híbridos.
Las cuentas de servicio de Kubernetes son similares a las cuentas de servicio de Google Cloud. Una cuenta de servicio de Kubernetes proporciona una identidad a los procesos que se ejecutan en un pod y le permite autenticarse en el servidor de la API de forma similar a un usuario. Si quieres obtener más información sobre las cuentas de servicio de Kubernetes, consulta Configurar cuentas de servicio para pods.
La herramienta apigeectl
ha creado la mayoría de las cuentas de servicio de Kubernetes que necesita Apigee hybrid cuando has ejecutado apigeectl apply
en el procedimiento anterior.
Cuando configuras Workload Identity en GKE, asocias las cuentas de servicio de Google Cloud con las cuentas de servicio de Kubernetes del clúster de Kubernetes. De esta forma, las cuentas de servicio de Kubernetes pueden suplantar a las cuentas de servicio de Google Cloud y usar los roles y permisos que tienen asignados para autenticarse en los componentes híbridos.
Sigue estas instrucciones para configurar la identidad de carga de trabajo en tu proyecto.
Prepararse para configurar Workload Identity
En estos procedimientos se usan las siguientes variables de entorno. Comprueba que estén definidos y define los que no lo estén:
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
Donde:
APIGEECTL_HOME
es el directorio en el que has instaladoapigeectl
.CLUSTER_LOCATION
es la región (o zona) de tu clúster. Por ejemplo,us-central1
.ENV_NAME
es el nombre de tu entorno.HYBRID_FILES
es el directorio en el que has creado los directoriosoverrides
ycerts
.NAMESPACE
es tu espacio de nombres de Apigee.PROJECT_ID
es tu proyecto de Google Cloud.ORG_NAME
es el nombre de tu organización de Apigee.
- Comprueba que la configuración
gcloud
actual se ha definido en el ID de tu proyecto de Google Cloud con el siguiente comando:gcloud config get project
- Crea la cuenta de servicio de Kubernetes
apigee-cassandra-restore
.Cuando aplicaste la configuración ejecutando
apigeectl apply
, el comando creó la mayoría de las cuentas de servicio de Kubernetes necesarias para Workload Identity.Para crear la cuenta de servicio de Kubernetes
apigee-cassandra-restore
, ejecutaapigeectl apply
con la marca--restore
:$APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
- Verifica que Workload Identity esté habilitado en tu clúster de GKE. Cuando creaste el clúster en el paso 1: Crea un clúster, el paso 6 consistía en habilitar Workload Identity. Para confirmar si Workload Identity está habilitado, ejecuta 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'
La salida debería tener este aspecto:
--- workloadPool: PROJECT_ID.svc.id.goog
Si ves
null
en los resultados, ejecuta el siguiente comando para habilitar Workload Identity 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 Workload Identity en cada grupo de nodos con los siguientes comandos. Esta operación puede tardar 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
Donde 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 denominan
apigee-data
yapigee-runtime
. - Verifica que Workload Identity esté habilitado 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:"
La salida debería tener un aspecto similar a este:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
- Obtén una lista de los nombres de las cuentas de servicio de Google Cloud de tu proyecto. Necesitarás estos nombres para asociar las cuentas de servicio de Kubernetes y configurar Workload Identity. En las instalaciones que no sean de producción, solo debe haber una cuenta de servicio de Google. En las instalaciones de producción, debe haber ocho.
Usa el siguiente comando para obtener la lista de nombres:
gcloud iam service-accounts list --project $PROJECT_ID
La salida debería tener un aspecto similar a este:
No producción
En entornos que no sean de producción:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Producción
En entornos que no sean de producción:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
- Obtener una lista de nombres de las cuentas de servicio de Kubernetes. Necesitarás esta lista de nombres para asociarla a tus cuentas de servicio de Google Cloud más adelante en este procedimiento. Usa el siguiente comando:
kubectl get sa -n $NAMESPACE
La salida debería tener un aspecto similar al siguiente. Las cuentas de servicio de Kubernetes en negrita son las que tendrás que asociar a tus cuentas de servicio de Google Cloud:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Si es necesario, define la configuración actual de gcloud
:
gcloud config set project $PROJECT_ID
Configurar Workload Identity
Sigue este procedimiento para habilitar Workload Identity en tu instalación de Hybrid:
-
En cada componente de Apigee, anota las cuentas de servicio de Kubernetes correspondientes con la cuenta de servicio de Google del componente.
En los pasos siguientes se usan dos variables de entorno. Restablecerás los valores de estas variables antes de cada conjunto de comandos:
- GSA_NAME: el nombre de una cuenta de servicio de Google. Estas son las cuentas de servicio que has creado con la herramienta
create-service-account
en el paso 4: Crea cuentas de servicio. - KSA_NAME: nombre de una cuenta de servicio de Kubernetes. Estas son las cuentas que ha indicado anteriormente con el comando
kubectl get sa -n $NAMESPACE
, por ejemplo:apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
.
- GSA_NAME: el nombre de una cuenta de servicio de Google. Estas son las cuentas de servicio que has creado con la herramienta
- Cassandra
Configura Workload Identity para el componente Cassandra.
El componente Cassandra tiene seis cuentas de servicio de Kubernetes asociadas:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= validación)apigee-cassandra-user-setup
apigee-datastore-default
No producción
Configurar la
apigee-cassandra-backup
cuenta de servicio de Kubernetes- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
La salida debe incluir una línea que describa la anotación, como la siguiente:
Annotations: iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com
Configurar la
apigee-cassandra-restore
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-cassandra-schema-setup
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-cassandra-schema-val
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-cassandra-user-setup
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-datastore-default-sa
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
Configurar la
apigee-cassandra-backup
cuenta de servicio de Kubernetes- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
La salida debe incluir una línea que describa la anotación, como la siguiente:
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
Configurar la
apigee-cassandra-restore
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Configurar la
apigee-cassandra-schema-setup
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
. - Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
Configurar la
apigee-cassandra-schema-val
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-cassandra-user-setup
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurar la
apigee-datastore-default-sa
cuenta de servicio de Kubernetes- Vuelve a definir la variable de entorno
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
Configura Workload Identity para el componente Apigee Connect.
No producción
- Define la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define la variable de entorno
- MART
Configura Workload Identity para el componente MART.
No producción
- Define la variable de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define la variable de entorno
- Métricas de Apigee
Configura Workload Identity para el componente de métricas de Apigee.
No producción
- Define las variables de entorno
KSA_NAME
:KSA_NAME="apigee-metrics-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define las variables de entorno
- UDCA (nivel de organización)
Configura Workload Identity para el componente UDCA a nivel de organización.
UDCA se implementa en ámbitos de nivel de organización y de nivel de entorno. Por lo tanto, hay dos cuentas de servicio de Kubernetes independientes para UDCA, una para cada ámbito. Puedes diferenciarlas por el nombre de la cuenta. La cuenta env-scope incluye el nombre del entorno en el nombre de la cuenta de servicio. Por ejemplo:
- Nivel de organización:
apigee-udca-my-project-id-123abcd-sa
, dondemy-project-id
es el ID del proyecto. - Nivel de entorno:
apigee-udca-my-project-id-my-env-234bcde-sa
dondemy-env
es el nombre del entorno.
No producción
- Define las variables de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Nivel de organización:
- Apigee Watcher
Configura Workload Identity para el componente Apigee Watcher.
No producción
- Define las variables de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define las variables de entorno
- Tiempo de ejecución
Configura Workload Identity para el componente de tiempo de ejecución de Apigee.
No producción
- Define las variables de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define las variables de entorno
- Sincronizador
Configura Workload Identity para el componente Synchronizer.
No producción
- Define las variables de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define las variables de entorno
- UDCA (a nivel de entorno)
Configura Workload Identity para el componente UDCA a nivel de entorno.
No producción
- Define las variables de entorno
KSA_NAME
: Por ejemplo:KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Producción
- Define las variables de entorno
KSA_NAME
yGSA_NAME
: Por ejemplo:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
. - Asigna el rol de gestión de identidades y accesos:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Anota la cuenta de servicio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Verifica la anotación:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Define las variables de entorno
- Opcional: Elimina los archivos de claves de cuentas de servicio descargados.
Si has creado las cuentas de servicio de Google con la herramienta
create-service-account
, es posible que se hayan creado claves de cuenta de servicio y se hayan descargado los archivos de claves.json
. Cuando utilizas Workload Identity en GKE, no necesitas estos archivos de claves.Puedes eliminar los archivos de claves con el siguiente comando:
rm $HYBRID_FILES/service-accounts/*.json
Verificar Workload Identity
- (Opcional) Puedes ver el estado de tus cuentas de servicio de Kubernetes en la página Kubernetes: Información general de las cargas de trabajo de la Google Cloud console.
- Para volver a comprobar el estado del despliegue con
apigeectl check-ready
, sigue estos pasos:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml