Ejemplo de Envoy Native para Apigee e Hybrid

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En este ejemplo se muestra cómo usar el adaptador de Apigee para Envoy instalando y ejecutando Envoy de forma local, no en un clúster de Kubernetes. Puedes seguir el ejemplo de este documento para las instalaciones de Apigee y Apigee Hybrid.

Las llamadas al proxy de API se realizan a través de Envoy, que se ejecuta como una aplicación nativa. Apigee ofrece servicios de gestión de APIs, como la creación de productos de API y aplicaciones para desarrolladores. Envoy se comunica con el plano de gestión de Apigee a través del servicio remoto del adaptador. El adaptador también envía datos analíticos a Apigee, donde puede consultarlos en Apigee Analytics.

Requisitos previos

Antes de empezar:
.

Comprobar la configuración de gcloud

  1. Comprueba que la configuración de gcloud esté definida en el proyecto de Google Cloud asociado a tu organización de Apigee.

    Para mostrar la configuración actual. Consulta también gcloud config.

    gcloud config list

    Si es necesario, define el ID de proyecto de Google Cloud correcto con este comando:

    gcloud config set project project-id
  2. Debes autenticarte con el SDK de Google Cloud (gcloud) en tu proyecto de Google Cloud. Consulta también gcloud auth login.
    gcloud auth login

Aprovisionar Apigee

En este paso, utilizará la CLI de servicio remoto para aprovisionar recursos de Apigee Adapter for Envoy en Apigee. El comando de aprovisionamiento implementa los proxies de API que se usan para las operaciones del adaptador de Apigee, configura un certificado en Apigee y genera las credenciales que el servicio remoto usará para conectarse de forma segura desde tu sistema a Apigee.

  1. Ve al directorio $CLI_HOME:
    cd $CLI_HOME
  2. (Opcional) De forma predeterminada, el adaptador busca las credenciales de la cuenta de servicio predeterminada en tu proyecto de Google Cloud para obtener permiso para enviar datos analíticos a Apigee. Si no quieres usar las credenciales de la cuenta de servicio predeterminada, puedes crear una cuenta de servicio y hacer referencia a su clave en el comando de aprovisionamiento. La cuenta de servicio debe tener el rol apigee.analyticsAgent. Para ver instrucciones, consulta el artículo Crear y gestionar cuentas de servicio.
  3. Crea las siguientes variables de entorno. Estas variables se usarán como parámetros de la secuencia de comandos de aprovisionamiento:
    export ORG=organization_name
    export ENV=environment_name
    export RUNTIME=host_alias_url
    export NAMESPACE=hybrid_runtime_namespace  ## Apigee hybrid only
    export AX_SERVICE_ACCOUNT=analytics_service_account  ## Optional

    Donde:

    Variable Descripción
    organization_name El nombre de tu organización de Apigee.
    environment_name El nombre de un entorno de tu organización.
    host_alias_url
    • En Apigee Hybrid, una URL que incluye el hostAlias de un host virtual definido en tu configuración híbrida.
    • En Apigee, un nombre de host del grupo de entornos que incluye el entorno. Puede encontrar grupos de entornos en la interfaz de Apigee, en Administrar > Entornos > Grupos.
    • Nota: La URL debe empezar por https://. Por ejemplo: https://apitest.mydomain.net

    hybrid_runtime_namepace (Solo Apigee Hybrid) El espacio de nombres en el que se implementan los componentes del entorno de ejecución de Hybrid.

    Nota: El espacio de nombres predeterminado de una implementación híbrida es apigee.

    analytics_service_account (Opcional) Ruta a un archivo JSON de clave de cuenta de servicio de Google Cloud que tenga el rol Apigee Analytics Agent. Para obtener una descripción detallada de este parámetro, consulta Provision command (Comando Provision).
  4. Si no eres propietario del proyecto de Google Cloud asociado a la organización de Apigee, asegúrate de que tu cuenta de usuario de Google Cloud incluya el rol Administrador de la organización de Apigee o los roles Creador de APIs y Implementador. Consulta cómo conceder, cambiar y revocar el acceso a los recursos.
  5. Obtén un token de acceso:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  6. Proporciona el proxy de servicio remoto a Apigee. La salida del comando se redirige a un archivo de configuración que usarás en un paso posterior.

    Si no vas a actualizar, usa este comando para aprovisionar Apigee. Si vas a aprovisionar Apigee hybrid, asegúrate de añadir el parámetro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml

    Si vas a actualizar, usa este comando con la marca --force-proxy-install para aprovisionar Apigee. Si vas a aprovisionar Apigee hybrid, asegúrate de añadir el parámetro --namespace $NAMESPACE:

    ./apigee-remote-service-cli provision --force-proxy-install --organization $ORG --environment $ENV \
         --runtime $RUNTIME --analytics-sa $AX_SERVICE_ACCOUNT --token $TOKEN > config.yaml
  7. Comprueba el contenido del archivo config.yaml. Debería tener un aspecto similar a este:
    # Configuration for apigee-remote-service-envoy (platform: Google Cloud)
    # generated by apigee-remote-service-cli provision on 2020-11-20 02:49:28
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          remote_service_api: https://apitest.mydomain.com/remote-service
          org_name: my-org
          env_name: test
        analytics:
          collection_interval: 10s
        auth:
          jwt_provider_key: https://apitest.mydomain.com/remote-service/token
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-policy-secret
      namespace: apigee
    type: Opaque
    data:
      remote-service.crt: eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJhbGci...
      remote-service.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURS...
      remote-service.properties: a2lkPTIwMjAtMDctMDZ...
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-org-new-test-analytics-secret
      namespace: apigee
    type: Opaque
    data:
      client_secret.json: ewogICJ0eXBlIjogInNlcnZ...
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
  8. Si usas Apigee Hybrid, aplica la configuración del servicio (el archivo que genera el comando de aprovisionamiento) al clúster en el que se instaló Apigee Hybrid en el paso 1: Crea un clúster.

Ejecutar apigee-remote-service-envoy

Puedes ejecutar el servicio remoto como un archivo binario nativo o en Docker.

Ejecutar el servicio de forma nativa

Ejecuta el archivo binario del servicio con el archivo de configuración que ha generado el comando de aprovisionamiento:

$REMOTE_SERVICE_HOME/apigee-remote-service-envoy -c config_file_path/config.yaml

Ejecutar el servicio en Docker

Las imágenes de Docker se publican con etiquetas de lanzamiento. Para esta instalación, usa la versión más reciente. Puedes elegir entre tres variaciones de imagen:

Variación Imagen
Google distroless google/apigee-envoy-adapter:v2.0.3
Ubuntu google/apigee-envoy-adapter:v2.0.3-ubuntu
Ubuntu con Boring Crypto google/apigee-envoy-adapter:v2.0.3-boring

Por ejemplo, para ejecutar la imagen scratch con tu config.yaml local disponible como /config.yaml mediante un montaje de volumen, usa este comando:

docker run -v ./config.yaml:/config.yaml google/apigee-envoy-adapter:v2.0.3

Crear un archivo de configuración de Envoy de ejemplo

Genera un archivo de configuración de Envoy de ejemplo con la CLI:

  1. Asegúrate de que estás en el directorio $ENVOY_HOME.
  2. Lista las plantillas de configuración disponibles:
    $CLI_HOME/apigee-remote-service-cli samples templates
  3. Ejecuta el comando de ejemplo. Sustituye TEMPLATE por una de las plantillas de Envoy admitidas:

    $CLI_HOME/apigee-remote-service-cli samples create --template TEMPLATE -c ./config.yaml

    El comando crea el archivo ./samples/envoy-config.yaml.

Para obtener más información, consulta el comando Samples.

Instalar y ejecutar el proxy de Envoy

Sigue estos pasos para instalar y ejecutar el proxy de Envoy:

  1. Descarga un binario de Envoy o compílalo.
  2. Ejecuta Envoy con un archivo de configuración de ejemplo que hayas generado anteriormente para el servicio httpbin.org:
    envoy -c ./samples/envoy-config.yaml

Probar la instalación

  1. Configura un producto de API y obtén una clave de API, tal como se explica en el artículo Cómo obtener una clave de API.
  2. Llama al servicio httpbin sin una clave de API:
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    

    Ahora, Apigee gestiona el servicio y, como no has proporcionado una clave de API, la llamada devuelve el siguiente error.

    curl -i http://localhost:8080/headers -H "HOST:httpbin.org"
    HTTP/1.1 403 Forbidden
    date: Tue, 12 May 2020 17:51:36 GMT
    server: envoy
    content-length: 0
    x-envoy-upstream-service-time: 11
  3. Haz una llamada a la API con la clave:
    export APIKEY=YOUR_API_KEY
    curl -i http://localhost:8080/headers -H "HOST:httpbin.org" -H "x-api-key: $APIKEY"

    La llamada debería realizarse correctamente con el estado 200 y devolver una lista de encabezados en la respuesta. Por ejemplo:

    curl -i httpbin.default.svc.cluster.local/headers -H "x-api-key: kyOTalNNLMPfOSy6rnVeclmVSL6pA2zS"
    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 12 May 2020 17:55:34 GMT
    content-type: application/json
    content-length: 828
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 301
    
    {
      "headers": {
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.default.svc.cluster.local",
        "User-Agent": "curl/7.70.0-DEV",
        "X-Api-Key": "kyOTalNNLMPfOSy6rneclmVSL6pA2zS",
        "X-Apigee-Accesstoken": "",
        "X-Apigee-Api": "httpbin.default.svc.cluster.local",
        "X-Apigee-Apiproducts": "httpbin",
        "X-Apigee-Application": "httpbin",
        "X-Apigee-Authorized": "true",
        "X-Apigee-Clientid": "kyOTalNNLMPfOSy6rVeclmVSL6pA2zS",
        "X-Apigee-Developeremail": "user@mydomain.com",
        "X-Apigee-Environment": "test",
        "X-Apigee-Organization": "my-org",
        "X-Apigee-Scope": "",
        "X-B3-Parentspanid": "1476f9a2329bbdfa",
        "X-B3-Sampled": "0",
        "X-B3-Spanid": "1ad5c19bfb4bc96f",
        "X-B3-Traceid": "6f329a34e8ca07811476f9a2329bbdfa"
      }
    }

Desinstalar el adaptador de Apigee Envoy

Para eliminar una instalación del adaptador de Apigee Envoy:

  1. Quítalo de donde hayas elegido ejecutar el adaptador de Envoy (de forma nativa o en Docker).
  2. Elimina los proxies remote-service y remote-token de tus entornos de Apigee. Consulta Eliminar un proxy de APIs.
  3. Elimina los productos de API o las operaciones que no utilicen los casos prácticos del adaptador de Envoy. Consulta la sección sobre cómo eliminar un producto de API.

Pasos siguientes

Apigee gestiona el tráfico de la API al servicio httpbin. Estas son algunas de las funciones que puedes explorar y probar:

  • Accede a Apigee Analytics en la interfaz de usuario de Edge. Ve a Analizar > Métricas de la API > Rendimiento del proxy de la API.
  • Consulta las opciones de la CLI en la referencia.