Implementa Edge Microgateway como un proxy de sidecar

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Introducción

En este tema, se explica cómo ejecutar Edge Microgateway en un clúster de Kubernetes como un proxy de sidecar. Tienes dos opciones para la implementación de sidecar: la inserción manual y la automática. En este tema, se describen ambas opciones.

Para obtener más información, consulta Introducción a Edge Microgateway en Kubernetes.

Antes de comenzar

Completa los pasos que se describen en Requisitos previos.

Implementa un servicio de prueba

Implementa un servicio simple de “hello” y verifica la implementación:

  1. Implemente la muestra

    kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default
  2. Verifica que el servicio esté en ejecución. Es posible que debas esperar unos minutos hasta que el Pod se inicie en el estado de ejecución:

    kubectl get pods --namespace=default

    Resultado de ejemplo:

    NAME                          READY     STATUS    RESTARTS   AGE
    helloworld-569d6565f9-lwrrv   1/1       Running   0          17m
    
  3. Borra la implementación del servicio de prueba. La reinstalarás más tarde, después de habilitar la inyección de archivo adicional, de la siguiente manera:

     kubectl delete -f samples/helloworld/helloworld.yaml --namespace=default

Usa la inserción manual de sidecar

De las dos opciones de inserción de sidecar, la inserción manual de sidecar es el enfoque más simple y directo, y se puede hacer con un solo comando kubectl.

Configura Edge Microgateway

Con el siguiente comando, se configura Edge Microgateway para la organización de Apigee y se implementa el proxy edgemicro-auth.

  1. Ejecuta el siguiente comando:

    edgemicro configure -o [org] -e [env] -u [username]

    Aquí:

    • org: Es el nombre de tu organización de Edge (debes ser administrador de la organización).

    • env: Es un entorno de tu organización (como prueba o producción).

    • username: Es la dirección de correo electrónico asociada con tu cuenta de Apigee.

    Ejemplo

    edgemicro configure -o myorg -e test -u jdoe@example.com

    El resultado (el que se muestra a continuación) se guarda en el archivo:

    $HOME/.edgemicro/org_name-env_name-config.yaml
    .

    current nodejs version is v6.9.1
    current edgemicro version is 2.5.25
    password:
    file doesn't exist, setting up
    Give me a minute or two... this can take a while...
    App edgemicro-auth deployed.
    checking org for existing KVM
    KVM already exists in your org
    configuring host edgemicroservices.apigee.net for region us-west1
    
    saving configuration information to: /Users/jdoe/.edgemicro/myorg-test-config.yaml
    
    vault info:
     -----BEGIN CERTIFICATE-----
    MIICpDCCAYwCCQCV9eBcO9a5WzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
    b2NhbGhvc3QwHhcNMagwODA5MDAzMDEzWhcNMTgwODEwMDAzMDEzWjAUMRIwEAYD
    VQQDDBlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDh
    nAHT7JHX/WvWHRFb8FLm53SPIDld5LyPOUfINdEyhSIEeXoOUKg4EPweJPVSC9Vm
    Hw4ZMtEqWJM/XsQWvLe8ylRJa5wgmzmFCqAsuzs9+rmc9KvJqjpOh2uRTUf7KKfT
    iXL2UEseprcI5g8zNyqKyEf/ecWIwz3AkkPAZebVTsrdDfIDHvkyhhvlAHZAB9kn
    GtqP3N8kOlv4KQto9Gr7GYUGUIDugt7gM1F611+RBS+fYRi32GUAq/UQDkhYL8cp
    oIJiF7UYkk2+9t9CdOCDuIUCvJioHJQd0xvDpkC9f6LvwjwnCwku+4F2Q63+av5I
    mJoZJQPvW5aP53Qkk+kHAgMBAAEwDKYJKoZIhvcNAQELBQADggEBALyUBolXUFN8
    1bf268nR+gS8MOFDTxO1bUz+bKuT/g3K1PuNUJTueT+0L1H2OiZUzazAqwn2sqzN
    lQuvLg6LjxjlNkqTJGiJvGDcYVq45dv7UyxAZxhqxTxhlQ+Yu5R9pbQnzujezHpH
    6gtCoCkSt/QqiJ3YsmsVu5is+HpIJepMt0CyMh5tK9j87hl46QhHklaVfQ3ycMVm
    /wNPR/pjizg1FDUeq4nj/7DBVbMf9net/BDaZLeSW1HJ1vcsCXIcSZfQd4QymGFn
    8ADrND7ydVjwO/s23soPDTy0g4yLIZvky2tpT8d7YahNqSv2n7sXsLxruzcyCoQ4
    w+e3Z3F7IKI=
    -----END CERTIFICATE-----
    
    The following credentials are required to start edge micro
      key: 1a3b2754c7f20614817b86e09895825ecc252d34df6c4be21ae24356f09e6eb4
      secret: 16ad2431de73f07f57a6d44048f08d93b63f783bf1f2ac4221182aa7289c7cef
    
    edgemicro configuration complete!
    

Incorpora Edge Microgateway como proxy de sidecar

Para incorporar Edge Microgateway de forma manual en un Pod de servicio como un proxy de sidecar, ejecuta este comando:

kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -svc=service_deployment_file)

Donde:

  • your_org: Es la organización de Apigee que especificaste en el comando edgemicro configure.
  • your_env: Es el entorno que especificaste en el comando edgemicro configure.
  • your_key: Es la clave que muestra el comando edgemicro configure.
  • your_secret: Es el secreto que muestra el comando edgemicro configure.
  • config_file_path: Es la ruta de acceso al archivo de configuración de Edge Micro que muestra el comando edgemicro configure.
  • service_deployment_file: Es la ruta de acceso al archivo de implementación del servicio cuyo Pod obtendrá el servicio de sidecar complementario. Por ejemplo: samples/helloworld/helloworld.yaml.

Por ejemplo:

kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -svc=samples/helloworld/helloworld.yaml)

Prueba la configuración

  1. Verifica las implementaciones del servicio:

    kubectl get services -n default

    Resultado de ejemplo:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    helloworld   NodePort    10.15.254.163   <none>        8081:32401/TCP   56s
    kubernetes   ClusterIP   10.15.240.1     <none>        443/TCP          41m
    
  2. Ahora, está todo listo para probar la implementación del archivo adicional de Edge Microgateway. Ve a Prueba el proxy para obtener pasos detallados.

Usa la inserción automática de sidecar

En los siguientes pasos, configurarás la inserción automática de sidecar para tu clúster de Kubernetes. Esta configuración permite que Edge Microgateway se inserte como un proxy de sidecar en Kubernetes.

Instala el inyector de sidecar

  1. Instala el ConfigMap que habilita la inserción de sidecar de Edge Microgateway:

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-configmap-release.yaml
  2. Ejecuta la siguiente secuencia de comandos para instalar el servicio webhook. El servicio de webhook es necesario para la inserción automática de sidecar:

    ./install/kubernetes/webhook-create-signed-cert.sh \
        --service edgemicro-sidecar-injector \
        --namespace edgemicro-system \
        --secret sidecar-injector-certs
    
  3. Agrega el paquete de CA al archivo de instalación del webhook. El servidor de la API de Kubernetes usa este archivo para invocar el webhook:

    cat install/kubernetes/edgemicro-sidecar-injector.yaml | \
         ./install/kubernetes/webhook-patch-ca-bundle.sh > \
         install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    
  4. Instala el webhook de inyector de sidecar de Edge Microgateway:

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    

    Resultado de ejemplo:

    service "edgemicro-sidecar-injector" created
    serviceaccount "edgemicro-sidecar-injector-service-account" created
    deployment "edgemicro-sidecar-injector" created
    mutatingwebhookconfiguration "edgemicro-sidecar-injector" created
    
  5. Verifica que el webhook de inyector de sidecar de Edge Microgateway esté en ejecución:

    kubectl -n edgemicro-system get deployment -ledgemicro=sidecar-injector
    

    Resultado de ejemplo:

    NAME                         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edgemicro-sidecar-injector   1         1         1            1           12m
    
  6. Verifica que el Pod de inserción del archivo adicional se esté ejecutando en tu clúster. El espacio de nombres edgemicro-system es donde se instalan los servicios del sistema, incluido el controlador Ingress, el backend HTTP predeterminado y el inyector de sidecar:

    kubectl get pods -n edgemicro-system

    Resultado de ejemplo:

    NAME                                            READY     STATUS    RESTARTS   AGE
    default-http-backend-55c6c69b88-gfnfd           1/1       Running   0          1h
    edgemicro-ingress-controller-64444469bf-jhn8b   1/1       Running   3          1h
    edgemicro-sidecar-injector-7d95698fbf-cq84q     1/1       Running   0          3m
    

Configura e inserta Edge Microgateway

En el siguiente paso, ejecutarás una secuencia de comandos interactiva para crear una configuración de Edge Microgateway asociada con un espacio de nombres de Kubernetes. Luego, insertarás la configuración en tu clúster de Kubernetes.

  1. Ejecuta la siguiente secuencia de comandos interactiva y proporciona los parámetros solicitados. El comando genera un perfil de configuración que usarás en el siguiente paso.

    ./install/kubernetes/webhook-edgemicro-patch.sh

    Para obtener información sobre los parámetros de entrada, consulta Referencia.

    Ejemplos de entradas:

    1. Namespace to deploy application [default]:

      Presione Intro.

    2. Authenticate with OAuth Token ("n","Y") [N/y]

      Ingresa n.

    3. Apigee username [required]:

      Ingresa tu nombre de usuario (dirección de correo electrónico) de Apigee. Por ejemplo: jdoe@google.com.

    4. Apigee password [required]:

      Ingresa tu contraseña de Apigee.

    5. Apigee organization [required]:

      Ingresa el nombre de tu organización de Apigee.

    6. Apigee environment [required]:

      Ingresa un nombre del entorno para tu organización. Por ejemplo, “probar”.

    7. Virtual Host [default]:

      Presione Intro.

    8. Is this Private Cloud ("n","y") [N/y]:

      Ingresa n si estás en una nube pública.

    9. Edgemicro Key. Press Enter to generate:

      Presione Intro.

    10. Edgemicro Secret. Press Enter to generate:

      Presione Intro.

    11. Edgemicro org-env-config.yaml. Press Enter to generate:

      Presione Intro.

      Resultado de ejemplo:

      current nodejs version is v6.9.1
      current edgemicro version is 2.5.25
      config initialized to /Users/jdoe/.edgemicro/default.yaml
      Configure for Cloud
      ******************************************************************************************
      Config file is Generated in /Users/jdoe/Work/GITHUB/microgateway_2.5.25_Darwin_x86_64/config directory.
      
      Please make changes as desired.
      *****************************************************************************************
      
    12. Do you agree to proceed("n","y") [N/y]:

      Ingresa y.

      Resultado de ejemplo:

      Configuring Microgateway with
      
      key:daacf75dd660d160b801c9117fb1ec0935896615479e39dbbae88be81a2d84
      secret:a60fd57c1db9f3a06648173fb541cb9c59188d3b6037a76f490ebf7a6584b0
      config:~/.edgemicro/jdoe-test-config.yaml
      
      ********************************************************************************************************
      kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
      ********************************************************************************************************
      
  2. Ejecuta el comando proporcionado en la última línea del resultado. Este comando kubectl inserta el perfil de configuración de Edge Microgateway generado en Kubernetes:

    kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
  3. Consulta el estado de la inserción de webhook. Ten en cuenta que no está habilitada actualmente:

    kubectl get namespace -L edgemicro-injection

    Resultado de ejemplo:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    
  4. Ejecuta este comando a fin de habilitar la inserción de webhook para el webhook:

    kubectl label namespace default edgemicro-injection=enabled
  5. Vuelve a consultar el estado de la inserción de webhook. Ten en cuenta que ahora está habilitada:

    kubectl get namespace -L edgemicro-injection

    Resultado de ejemplo:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d        enabled
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    

Implementa el servicio de prueba

Ahora, vuelve a implementar el servicio de prueba. Edge Microgateway se insertará de forma automática en el Pod del servicio.

kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default

Confirma que Edge Microgateway se insertó en el Pod junto con el servicio de prueba:

kubectl get pods --namespace=default --watch

Resultado de ejemplo:

NAME                          READY     STATUS            RESTARTS   AGE
helloworld-6987878fc4-pkw8h   0/2       PodInitializing   0          12s
helloworld-6987878fc4-pkw8h   2/2       Running           0         26s

Cuando el estado cambie a Running, presiona ctrl-c para salir del comando.

Ahora, está todo listo para probar la implementación automática del archivo adicional de Edge Microgateway. Ve a Prueba el proxy para obtener pasos detallados.

Prueba el proxy

Con la implementación de sidecar, se crea automáticamente un proxy de API para tu servicio. No es necesario crear un proxy “Edge Microgateway-aware”.

Obtén la dirección IP del Ingress

Con la IP externa para el Ingress, puedes llamar al servicio desde fuera del clúster.

  1. Obtén la dirección IP externa del controlador Ingress:

    kubectl get ing -o wide

    Resultado de ejemplo:

    NAME      HOSTS     ADDRESS        PORTS     AGE
    gateway   *         35.238.13.54   80        1m
    
  2. Copia el valor EXTERNAL-IP del Ingress y expórtalo a una variable. Puedes configurar la variable de forma manual:

    export GATEWAY_IP=external_ip

    Por ejemplo:

    export GATEWAY_IP=35.238.249.62

    También puedes usar este comando para configurarlo:

    export GATEWAY_IP=$(kubectl describe ing gateway --namespace default | grep "Address" | cut -d ':' -f2 | tr -d "[:space:]")
  3. Verifica que se haya exportado la variable. Por ejemplo:

    echo $GATEWAY_IP

    Resultado de ejemplo:

    35.238.249.62
    
  4. Llama al servicio:

    curl $GATEWAY_IP

    Resultado:

    {"error":"missing_authorization","error_description":"Missing Authorization header"}
    

    A continuación, solucionarás el error de autorización faltante mediante la configuración de un producto de API y una app de desarrollador en Edge para obtener una clave de API válida. Cuando agregues la clave a un encabezado de autorización para la llamada a la API, la llamada se realizará de forma correcta y no verás este error.

Crear componentes en Apigee Edge

A continuación, crea un producto de API y una app de desarrollador en Apigee Edge.

Crear un producto de API

  1. Accede a Apigee Edge.
  2. Selecciona Publicar > Productos de API en el menú de navegación lateral.
  3. Haz clic en +API Product. Aparece la página del producto.
  4. Completa la página del producto como se indica a continuación. En el caso de los campos que no se mencionan a continuación, puedes usar los valores predeterminados. No guardes hasta que se te indique.

    Nombre hello-world-product
    Nombre visible Edge Micro hello product
    Entorno test

  5. En la sección Ruta, haz clic en + Recurso personalizado.

  6. Agrega la ruta de acceso /.

  7. Vuelve a hacer clic en + Recurso personalizado y agrega la ruta de acceso /**.

  8. En la sección API Proxies, haz clic en + API Proxy y agrega edgemicro-auth.

  9. Guarda el producto de API.

Crear una app de desarrollador

  1. Selecciona Apps en el menú de navegación lateral.
  2. Haz clic en + App. Se abrirá la página Detalles de la aplicación de desarrollador.
  3. Completa la página de Aplicación para desarrolladores de la siguiente manera. No guardes hasta que se te indique.

    Nombre hello-world-app
    Nombre visible Edge Micro hello app
    Desarrollador Selecciona un desarrollador en el menú desplegable.
  4. En la sección Credentials, haz clic en + Product y selecciona el hello-world-product que acabas de crear.

  5. Haz clic en Guardar.

  6. Estás de vuelta en la página que muestra todas las apps para desarrolladores.

  7. Selecciona la app que acabas de crear, hello-world-app.

  8. Haz clic en Mostrar junto a Clave de consumidor.

  9. Copia el valor de la clave de consumidor. Este valor es la clave de API que usarás para realizar llamadas seguras a la API al servicio helloworld.

  10. Espera unos minutos. Los cambios que realizaste en Apigee Edge tardan unos minutos en sincronizarse con la instancia de Edge Microgateway implementada en el clúster.

Llama a la API

Después de que los cambios de configuración se extraen a la micropuerta de enlace, puedes realizar las siguientes pruebas.

  1. Llama a la API sin una clave de API. Verás un mensaje de error, como se muestra a continuación:

    curl $GATEWAY_IP

    Resultado esperado:

    {"error":"missing_authorization","error_description":"Missing Authorization
    header"}
    

    Para realizar llamadas a la API de forma correcta, necesitas la clave de API.

  2. Obtén la clave de consumidor de la app de desarrollador que creaste. Este valor es la clave de API que necesitas para llamar al proxy de prueba:

    curl -H 'x-api-key:your-edge-api-key'  $GATEWAY_IP

    Por ejemplo:

    curl -H "x-api-key:DeX2eEesYAdRJ5Gdbo77nT9uUfJZql19" $GATEWAY_IP

    Resultado:

    Hello world
    

    El servicio de gcloud implementado en el pod muestra la respuesta “Hello World”. La llamada a ese servicio pasó primero a través de Edge Microgateway, donde se realizó la autenticación. Si ves la respuesta “Hello World”, configuraste Edge Microgateway de forma correcta para que funcione como un proxy de sidecar en el Pod de servicio helloworld.

¿Qué sigue?

Consulta la sección Tareas para obtener información sobre cómo agregar complementos personalizados, escalar la implementación, realizar cambios en la configuración y otras tareas que tal vez quieras realizar.