Ejemplo nativo de Envoy para Apigee y 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 mediante la instalación y ejecución de Envoy de forma local, no dentro de 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 pasan por Envoy ejecutándose como una aplicación nativa. Apigee proporciona servicios de administración de API, como la creación de aplicaciones de desarrolladores y productos de API. Envoy se comunica con el plano de administración de Apigee a través del servicio remoto del adaptador. El adaptador también envía los datos de estadísticas a Apigee, donde puedes verlos en Apigee Analytics.

Requisitos previos

Antes de comenzar:

Verifica tu configuración de gcloud

  1. Verifica que tu configuración de gcloud esté establecida en el proyecto de Google Cloud asociado con tu organización de Apigee.

    Para mostrar una lista de la configuración actual, haz lo siguiente. Consulta también gcloud config.

    gcloud config list

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

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

Aprovisiona Apigee

En este paso, usarás la CLI del servicio remoto a fin de aprovisionar los recursos del adaptador de Apigee para Envoy a 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 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. De forma predeterminada, el adaptador busca las credenciales de la cuenta de servicio predeterminadas en tu proyecto de Google Cloud para obtener permiso de enviar datos de estadísticas a Apigee (opcional). Si no deseas usar las credenciales de la cuenta de servicio predeterminadas, puedes crear una cuenta de servicio y hacer referencia a su clave en el comando de aprovisionamiento. La cuenta de servicio del controlador debe tener la función apigee.analyticsAgent. Para obtener instrucciones, consulta Crea y administra cuentas de servicio.
  3. Crea las siguientes variables de entorno: Estas variables se usarán como parámetros en 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

    Aquí:

    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 el caso de Apigee Hybrid, una URL que incluye hostAlias para un host virtual definido en la configuración de Hybrid.
    • Para Apigee, un nombre de host del grupo de entornos que incluye el entorno. Puedes encontrar grupos de entornos en la IU de Apigee en Administrador > Entornos > Grupos.
    • Nota: La URL debe comenzar con https://. Por ejemplo: https://apitest.mydomain.net

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

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

    analytics_service_account La ruta a un archivo JSON de clave de cuenta de servicio de Google Cloud que tiene la función Apigee Analytics Agent. Para obtener una descripción detallada de este parámetro, consulta Comando de aprovisionamiento.
  4. Si no eres propietario del proyecto de Google Cloud asociado con la organización de Apigee, asegúrate de que tu cuenta de usuario de Google Cloud incluya la función de Administrador de la organización de Apigee o las funciones Creador de API e Implementador. Consulta Otorga, cambia y revoca el acceso a recursos.
  5. Obtén un token de acceso:
    TOKEN=$(gcloud auth print-access-token);echo $TOKEN
  6. Aprovisiona el proxy de servicio remoto a Apigee. El resultado del comando se redirecciona a un archivo de configuración que usarás en un paso posterior.

    Si no realizas la actualización, usa este comando para aprovisionar a Apigee: Si aprovisionas a Apigee Hybrid, asegúrate de agregar 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 actualizas, usa este comando con la marca --force-proxy-install para aprovisionar a Apigee. Si aprovisionas a Apigee Hybrid, asegúrate de agregar 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. Verifica el contenido del archivo config.yaml. Debería verse algo similar a esto:
    # 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

Ejecuta apigee-remote-service-envoy

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

Ejecuta el servicio de forma nativa

Ejecuta el objeto binario del servicio con el archivo de configuración que mostró el comando de aprovisionamiento:

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

Ejecuta el servicio en Docker

Las imágenes de Docker se publican con etiquetas de la versión. Para esta instalación, usa la versión más reciente. Existen tres variantes de imágenes para elegir:

Variante Imagen
distroless de Google 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 inicial con tu config.yaml local disponible como /config.yaml a través de una activación de volumen, usa este comando:

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

Crea un archivo de configuración de Envoy de muestra

Genera un archivo de configuración de Envoy de muestra mediante la CLI:

  1. Asegúrate de estar en el directorio $ENVOY_HOME.
  2. Enumera las plantillas de configuración disponibles:
    $CLI_HOME/apigee-remote-service-cli samples templates
  3. Ejecuta el comando de muestras. Para TEMPLATE, sustituye una de las plantillas de Envoy compatibles:

    $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 Comando de muestra.

Instala y ejecuta el proxy de Envoy

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

  1. Descarga un objeto binario de Envoy o compílalo.
  2. Ejecuta Envoy mediante un archivo de configuración de muestra que generaste antes para el servicio httpbin.org:
    envoy -c ./samples/envoy-config.yaml

Prueba la instalación

  1. Configura un producto de API y obtén una clave de API como se explica en Obtén 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, el servicio es administrado por Apigee y, como no proporcionaste una clave de API, la llamada muestra 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. Realiza 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 ser exitosa y tener un estado 200; además, se debe mostrar 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"
      }
    }

Desinstala el adaptador de Envoy de Apigee

Para quitar una instalación del adaptador de Envoy de Apigee, haz lo siguiente:

  1. Siempre que elijas ejecutar el adaptador de Envoy (de forma nativa o en Docker), quítalo.
  2. Borra los proxies remote-service y remote-token de tus entornos de Apigee. Consulta Borra un proxy de API.
  3. Quita los productos de API sin usar o las operaciones que usan los casos de uso del adaptador de Envoy. Consulta Borra un producto de API.

Próximos pasos

Ahora, Apigee administra 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 IU de Edge. Ve a Analizar > Métricas de la API > Rendimiento del proxy de API.
  • Explora las opciones de la CLI en la Referencia.