Paso 9: Instala el entorno de ejecución híbrido

Aplica la configuración al clúster

Sigue estos pasos para instalar Apigee hybrid en tu clúster:

  1. Asegúrate de que estás en el directorio hybrid-base-directory/hybrid-files.
    cd $HYBRID_FILES
  2. Verifica que kubectl esté configurado en el contexto correcto con el siguiente comando. El contexto actual debe ser el clúster en el que vas a implementar Apigee Hybrid.
    kubectl config current-context

    El resultado debe incluir el nombre del clúster en el que vas a implementar Apigee hybrid. Por ejemplo, en GKE, el nombre del contexto suele tener el formato gke_project-id_cluster-location_cluster-name, como en el siguiente ejemplo:

    gke_my-project_us-central1_my-cluster

    Si el nombre del clúster del contexto no coincide, el siguiente comando obtendrá las credenciales de gcloud del clúster y definirá el contexto de kubectl:

    Clústeres regionales

    gcloud container clusters get-credentials $CLUSTER_NAME \
    --region $CLUSTER_LOCATION \
    --project $PROJECT_ID

    Clústeres zonales

    gcloud container clusters get-credentials $CLUSTER_NAME \
    --zone $CLUSTER_LOCATION \
    --project $PROJECT_ID
  3. Solo para las plataformas Anthos on bare metal, AWS on GKE, EKS y GKE On-Prem, comprueba que la variable KUBECONFIG se haya definido con el siguiente comando:
    echo ${KUBECONFIG}
  4. Haz una inicialización de prueba de funcionamiento. Al hacer una prueba, puedes comprobar si hay errores antes de que se apliquen cambios al clúster. Ejecuta el comando init con la marca --dry-run de la siguiente manera:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
  5. Si no hay errores, ejecuta el comando init de la siguiente manera:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml

    El comando init instala los servicios de despliegue de Apigee Apigee Deployment Controller y Apigee Admission Webhook.

  6. Para comprobar el estado de la implementación, puedes usar los siguientes comandos:
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    kubectl get pods -n apigee-system
    kubectl get pods -n apigee

    Cuando los pods estén listos, ve al siguiente paso.

  7. Haz una instalación de prueba de funcionamiento. Ejecuta el comando apply con la marca --dry-run.
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
  8. Si no hay errores, puedes aplicar los componentes de tiempo de ejecución específicos de Apigee al clúster con el siguiente comando:
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
  9. Para comprobar el estado del despliegue, ejecuta el siguiente comando:
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml

    Repite este paso hasta que todos los pods estén listos. Los pods pueden tardar varios minutos en iniciarse.

GKE con Workload Identity

En las instalaciones híbridas de Apigee en GKE, Google Cloud ofrece una opción llamada Workload Identity para autenticar los componentes del tiempo de ejecución híbrido.

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.

Preparar la configuración de 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_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. 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
  2. Si es necesario, define la configuración actual de gcloud:

    gcloud config set project $PROJECT_ID
  3. 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 la identidad de carga de trabajo.

    Para crear la cuenta de servicio de Kubernetes apigee-cassandra-restore, ejecuta apigeectl apply con la marca --restore:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. 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 11 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
  5. 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 y apigee-runtime.

  6. Verifica que la identidad de carga de trabajo 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:"

    La salida debería tener un aspecto similar a este:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. 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
    
  8. 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
        

Configurar Workload Identity

Sigue este procedimiento para habilitar Workload Identity en tu instalación de Hybrid:

  1. 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.
    • 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

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. 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
      3. 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
      4. 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

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-schema-setup cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Por ejemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-schema-val cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Por ejemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-user-setup cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Por ejemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-datastore-default-sa cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      Configurar la apigee-cassandra-backup cuenta de servicio de Kubernetes

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. 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
      6. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-restore cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. 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
      3. 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

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Por ejemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-schema-val cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Por ejemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-cassandra-user-setup cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Por ejemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurar la apigee-datastore-default-sa cuenta de servicio de Kubernetes

      1. Vuelve a definir la variable de entorno KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configura la identidad de carga de trabajo para el componente Apigee Connect.

      No producción

      1. Define la variable de entorno KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Por ejemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Por ejemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configura Workload Identity para el componente MART.

      No producción

      1. Define la variable de entorno KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name-sa"
        Por ejemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        Por ejemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Métricas de Apigee

      Configura Workload Identity para el componente de métricas de Apigee.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • 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, donde my-project-id es el ID del proyecto.
      • Nivel de entorno: apigee-udca-my-project-id-my-env-234bcde-sa donde my-env es el nombre del entorno.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-udca-service-account-name-sa"
        Por ejemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        Por ejemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configura Workload Identity para el componente Apigee Watcher.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        Por ejemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        Por ejemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Tiempo de ejecución

      Configura Workload Identity para el componente Apigee Runtime.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Por ejemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Por ejemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Sincronizador

      Configura Workload Identity para el componente Synchronizer.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Por ejemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Por ejemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (a nivel de entorno)

      Configura Workload Identity para el componente UDCA a nivel de entorno.

      No producción

      1. Define las variables de entorno KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Por ejemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Producción

      1. Define las variables de entorno KSA_NAME y GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Por ejemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. 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
      3. 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
      4. Verifica la anotación:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. 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

  1. (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.

    Ve a Cargas de trabajo.

  2. 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
1 2 3 4 5 6 7 8 9 Paso 10: Exponer el ingreso de Apigee 11