Estás viendo la documentación de Apigee Edge.
Ir a la documentación de
Apigee X. info
En este tema, se explica cómo ejecutar Edge Microgateway en un contenedor de Docker. En los pasos que se describen en este tema, se supone que tienes conocimientos básicos sobre Docker, los comandos de Docker y la configuración de Edge Microgateway. Para obtener más información, consulta la documentación de Docker y Edge Microgateway.
Requisitos previos
Antes de ejecutar Edge Microgateway en un contenedor de Docker, debes realizar las siguientes tareas:
Configura Edge Microgateway para tu organización o entorno de Apigee:
edgemicro configure -o your_org -e your_env -u your_username
Para obtener más detalles sobre la configuración, consulta Parte 1: Configura Edge Microgateway.
Después de realizar los pasos de configuración, busca el archivo de configuración. La ubicación predeterminada es la siguiente:
$HOME/.edgemicro/your_org-your_env-config.yaml
donde
your_orgyyour_envson la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config. Necesitarás este archivo cuando inicies Edge Microgateway en un contenedor de Docker.Asegúrate de tener las credenciales de clave y secreto que se devolvieron cuando ejecutaste el comando
edgemicro config. Por ejemplo:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430Antes de iniciar Edge Microgateway en un contenedor de Docker, debes crear (o haber creado) las entidades de Apigee Edge necesarias para realizar llamadas autenticadas a proxies de API. Estas entidades incluyen un proxy compatible con Edge Microgateway, un producto de API, un desarrollador y una app para desarrolladores. Para obtener instrucciones completas, consulta Crea entidades en Apigee Edge.
Ejecuta Edge Micro como un contenedor de Docker
Descarga la imagen de Docker para Edge Microgateway:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
Antes de continuar con los siguientes pasos, asegúrate de haber realizado todos los pasos de la sección Requisitos previos.
Ejecuta el siguiente comando para codificar en base64 el archivo de configuración de Edge Microgateway ubicado en
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
donde
your_orgyyour_envson la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config.Recuerda colocar acentos graves (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Ejecuta Edge Microgateway como un contenedor. El comando establece varias variables de entorno que el entorno de ejecución del contenedor usa para iniciar Edge Microgateway:
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro:latest
Parámetros
Parámetro Descripción -PPublica todos los puertos expuestos en el host. Consulta también la referencia de ejecución de Docker. -pAsigna explícitamente un solo puerto o un rango de puertos. Consulta también la referencia de ejecución de Docker. -dEjecuta en modo separado. Consulta también la referencia de ejecución de Docker. -v, --volumeEspecifica un montaje de volumen. Ten en cuenta que, si configuras Edge Microgateway para usar TLS en el contenedor de Docker, debes exponer el puerto 8443 si montas el directorio del archivo de registro. Consulta también VOLUMEN [sistemas de archivos compartidos]. Consulta también Usa TLS en el contenedor de Docker. EDGEMICRO_ORGEs el nombre de la organización de Apigee que usaste para configurar Edge Microgateway. EDGEMICRO_ENVEs el nombre del entorno de Apigee que usaste para configurar Edge Microgateway. EDGEMICRO_PROCESSESCantidad de procesos que se iniciarán. EDGEMICRO_KEYEs la clave que se devolvió cuando configuraste Edge Microgateway. EDGEMICRO_SECRETEs el secreto que se devolvió cuando configuraste Edge Microgateway. EDGEMICRO_CONFIGEs una variable que contiene el archivo de configuración de Edge Microgateway codificado en Base64. SERVICE_NAMESi usas Kubernetes, este parámetro se completa automáticamente. De lo contrario, puedes establecerlo en lo que desees. Si no especificas nada, el nombre del servicio se establece en default.DEBUGSe configura como *para habilitar la depuración.HTTP_PROXYHTTPS_PROXYSe usa cuando Edge Microgateway se ejecuta detrás de un firewall y la puerta de enlace no puede comunicarse con Apigee Edge. Para obtener más información, consulta Cómo configurar Edge Microgateway detrás de un firewall empresarial. Por ejemplo:
HTTP_PROXY=http://10.203.0.1:5187/NO_PROXYEs una lista de dominios delimitada por comas a los que Edge Microgateway no debe enviar solicitudes a través de un proxy. Para obtener más información, consulta Cómo configurar Edge Microgateway detrás de un firewall empresarial. Por ejemplo:
localhost,127.0.0.1,localaddress,.localdomain.comNODE_EXTRA_CA_CERTS(Opcional) Usa este parámetro si usas una AC en la que Node.js no confía de forma predeterminada. Establece el valor de este parámetro en la ruta de acceso a un archivo que contenga uno o más certificados de confianza en formato PEM. Para obtener más detalles, consulta Certificados TLS. --security-opt(Opcional) Establece las opciones de seguridad de Docker deseadas. Consulta Configuración de seguridad en la documentación de Docker. --cap-drop(Opcional) Establece límites en las capacidades de Linux permitidas en el contenedor. Consulta Privilegio del entorno de ejecución y capacidades de Linux en la documentación de Docker. Por ejemplo:
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESS=1 \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro
Para verificar que el contenedor se esté ejecutando, haz lo siguiente:
docker ps
Debería ver un resultado similar al siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b92e082ea9c edgemicro "/tmp/entrypoint.sh" 12 minutes ago Up 12 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp edgemicro
Cómo probar una llamada a la API
Después de iniciar Edge Microgateway en el contenedor, puedes realizar llamadas a la API.
Por ejemplo, si la ruta base de tu API es /hello:
http://localhost:8000/hello
Resultado de muestra:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
Si ves esta respuesta, significa que Edge Microgateway controló correctamente la llamada a la API. Sin embargo, de forma predeterminada, Edge Microgateway requiere una clave de API para la autenticación. En la siguiente sección, probarás la API con una clave de API válida.
Prueba una API con una clave de API válida
En la IU de Edge, navega a la app para desarrolladores que creaste antes. En la página de la app para desarrolladores, muestra la clave de consumidor y cópiala. Este valor es la clave de API. Usarás esta clave para realizar llamadas a la API autenticadas.
Llama a la API con el encabezado x-api-key de la siguiente manera. El valor de la clave de consumidor que copiaste de la app para desarrolladores es la clave de API. De forma predeterminada, Edge Microgateway espera que pases la clave en un encabezado llamado x-api-key, de la siguiente manera:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
Por ejemplo:
curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
Si deseas obtener más información para realizar llamadas a la API autenticadas a través de Edge Microgateway con claves de API y tokens de OAuth, consulta Parte 4: Protege Edge Microgateway.
Cómo detener Edge Microgateway
Usa el siguiente comando de Docker para detener Edge Microgateway:
docker stop edgemicro
Cómo reiniciar Edge Microgateway
Después de detener Edge Microgateway, puedes reiniciarlo con este comando de Docker:
docker start edgemicro
Usa TLS en el contenedor de Docker
En esta sección, se explica cómo configurar TLS para Edge Microgateway que se ejecuta en un contenedor de Docker. Puedes configurar el servidor de Edge Microgateway para que use TLS en las solicitudes entrantes (dirección norte) y puedes configurar Edge Microgateway para que sea un cliente de TLS en las solicitudes salientes a los extremos de destino (dirección sur).
Dónde colocar los archivos de certificado
El contenedor de Docker que ejecuta Edge Microgateway tiene un punto de activación en /opt/apigee/.edgemicro.
Cuando configuras Edge Microgateway para que use certificados TLS, puedes hacer que los archivos de certificado estén disponibles en ese punto de activación y hacer referencia a ellos en el archivo de configuración de Edge Microgateway. Por lo general, este archivo de configuración se encuentra en el directorio $HOME/.edgemicro y se llama your_org-your_env-config.yaml.
Por ejemplo:
...
edgemicro:
ssl:
key: /opt/apigee/.edgemicro/southbound/tls.key
cert: /opt/apigee/.edgemicro/southbound/tls.crt
...
Usar una CA que no es de confianza para Node.js
Si usas una autoridad certificadora (AC) que Node.js no considera de confianza de forma predeterminada (como en el caso de un certificado autofirmado), considera usar el parámetro NODE_EXTRA_CA_CERTS cuando ejecutes el contenedor.
Establece este parámetro en la ruta de acceso a un archivo que contenga uno o más certificados de confianza en formato PEM. Para ver cómo se usa este parámetro, consulta los ejemplos Cómo configurar TLS de salida y Cómo configurar TLS de entrada.
Por ejemplo:
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
Consulta también Ejecuta Edge Micro como un contenedor de Docker.
Cómo desactivar la validación de TLS
Aunque no se recomienda, en algunos casos, es posible que desees inhabilitar la validación de TLS para Edge Microgateway que se ejecuta en un contenedor. La capacidad para inhabilitar TLS no está integrada en el contenedor de Docker de Edge Microgateway de forma predeterminada. Para completar la tarea, debes crear una imagen de Docker personalizada para Edge Microgateway. A continuación, se incluyen instrucciones generales para compilar la imagen personalizada y desactivar la validación de TLS.
Clona o descarga el repositorio de código fuente de Edge Microgateway desde
https://github.com/apigee-internal/microgateway.cdal directoriomicrogateway/kubernetes/docker/edgemicroen el directorio del código fuentePor ejemplo:
cd $HOME/git/microgateway/kubernetes/docker/edgemicroAbre el archivo
entrypoint.shy modifica el código para aceptar la variable de entornoNODE_TLS_REJECT_UNAUTHORIZED. Más adelante, cuando ejecutes el contenedor, especificarás un valor para esta variable.Compila el contenedor de Docker:
docker build -t edgemicro .Cuando ejecutes el contenedor, especifica la opción
-e NODE_TLS_REJECT_UNAUTHORIZED = 1. Por ejemplo:
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_TLS_REJECT_UNAUTHORIZED = 1 \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
Ejemplo: Cómo configurar TLS de norte a sur
En esta sección, se explica cómo configurar una conexión TLS de entrada (norte) en el servidor de Edge Microgateway. TLS de salida permite que los clientes usen HTTPS cuando realizan llamadas a la API de Edge Microgateway. En el siguiente ejemplo, se usan certificados autofirmados.
1. Pasos iniciales para la configuración
- Ubica el archivo
openssl.cnfen tu sistema. Por ejemplo,/etc/ssl/openssl.cnf - Abre el archivo
opensssl.cnfpara editarlo. Asegúrate de que los elementos
req_extensionsestén presentes en tu archivo de configuración. Por ejemplo, tu archivo debería contener información similar a la siguiente:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentAgrega la siguiente estrofa a
openssl.cnfpara generar los atributos de SNI correctos:[ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1Archivo
opensssl.cnfde ejemplo:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1Sigue los pasos que se indican en la sección Requisitos previos para inicializar y configurar Edge Microgateway, si aún no lo hiciste. Cuando termines, deberías haber creado un proxy adaptado a Edge Microgateway, un producto de API, un desarrollador y una app para desarrolladores. Además, deberías haber ejecutado el comando
edgemicro configurey haber recibido una clave y un secreto.
2. Genera certificados autofirmados
A continuación, genera los certificados y las claves que necesitarás para establecer TLS:
cdal directorio$HOME/.edgemicroCrea la siguiente secuencia de comandos Bash. Puedes asignarle el nombre que desees. Por ejemplo:
keygen.sh#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
En el archivo bash, asegúrate de que la ruta de acceso al archivo
openssl.cnfsea correcta.Ejecuta el archivo bash. Se te solicitará información del certificado. Asegúrate de usar
localhostpara el nombre común.Verifica que se hayan creado los siguientes archivos:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
3. Edita el archivo de configuración de Edge Microgateway
Abre el archivo de configuración de Edge Micro en un editor. Por ejemplo:
vi $HOME/.edgemicro/myorg-test-config.yamlEdita la estrofa
edgemicrode la siguiente manera. Ten en cuenta que estás realizando cambios en los atributosportyssl:edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...Ejecuta el siguiente comando para codificar en base64 el archivo de configuración de Edge Microgateway ubicado en
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
donde
your_orgyyour_envson la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config.Recuerda colocar acentos graves (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Consulta también Ejecuta Edge Micro como un contenedor de Docker.
4. Ejecuta el contenedor
Ejecuta el siguiente comando para ejecutar el contenedor de Docker con Edge Microgateway:
docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ gcr.io/apigee-microgateway/edgemicro:latest
Ten en cuenta los siguientes parámetros que se usan en el comando, ya que difieren del comando básico que se describe en Ejecuta Edge Microgateway como un contenedor de Docker.
portse configura en8443.- Se usa una activación de volumen para activar los archivos de clave y certificado.
- La variable
NODE_EXTRA_CA_CERTSse usa para agregar una CA personalizada (según sea necesario en el caso de los certificados autofirmados).
5. Prueba la configuración de TLS
Ejecuta el siguiente comando de cURL para probar la configuración. Sustituye tu ruta base y tu clave de API en el comando. En el siguiente ejemplo, se supone que te encuentras en el directorio en el que se encuentra
rootca.pemy que el proxy que creaste tiene la ruta base/hello:curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"El resultado detallado de cURL muestra cada paso del protocolo de enlace TLS. Si ves una respuesta HTTP 200, la configuración se realizó correctamente:
* Trying ::1...ey:Az82fdnfONVCOOE4NKhajxAboDgA3FAo" * TCP_NODELAY set * Connected to localhost (::1) port 8443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: rootca.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * start date: Dec 14 22:35:28 2018 GMT * expire date: Oct 3 22:35:28 2021 GMT * common name: localhost (matched) * issuer: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * SSL certificate verify ok. > GET /hello HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key:Az82fdnfaONVCOE4NKhajxAboDA3FAo > < HTTP/1.1 200 OK < x-powered-by: Apigee < access-control-allow-origin: * < x-frame-options: ALLOW-FROM RESOURCE-URL < x-xss-protection: 1 < x-content-type-options: nosniff < content-type: text/plain; charset=utf-8 < etag: W/"d-GHB1ZrJKk/wdVTdB/jgBsw" < date: Fri, 14 Dec 2018 22:43:13 GMT < via: 1.1 google < alt-svc: clear < x-response-time: 1325 < Connection: keep-alive < Transfer-Encoding: chunked < * Connection #0 to host localhost left intact Hello, Guest!
Ejemplo: Cómo configurar TLS de salida
En esta sección, se explica cómo configurar una conexión TLS saliente (descendente) entre el servidor de Edge Microgateway y una aplicación de destino de backend. En el siguiente ejemplo, se usan certificados autofirmados.
1. Pasos iniciales para la configuración
- Ubica el archivo
openssl.cnfen tu sistema. Por ejemplo,/etc/ssl/openssl.cnf - Abre el archivo
opensssl.cnfpara editarlo. Asegúrate de que los elementos
req_extensionsestén presentes en tu archivo de configuración. Por ejemplo, tu archivo debería contener información similar a la siguiente:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEnciphermentAgrega la siguiente estrofa a
openssl.cnfpara generar los atributos de SNI correctos:[ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1Archivo
opensssl.cnfde ejemplo:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1Ejecuta el comando
edgemicro configure:edgemicro configure -o your_org -e your_env -u your_username
Para obtener más detalles sobre la configuración, consulta Parte 1: Configura Edge Microgateway.
Copia las credenciales de la clave y el secreto que se devolvieron de
edgemicro configure. Necesitarás estos valores para ejecutar el contenedor. Por ejemplo:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
2. Crea una aplicación de destino de Node.js
cdal directorio.edgemicroCrea la siguiente secuencia de comandos Bash. Puedes asignarle el nombre que desees. Por ejemplo:
keygen.sh#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
En el archivo bash, asegúrate de que la ruta de acceso al archivo
openssl.cnfsea correcta.Ejecuta el archivo bash. Se te solicitará información del certificado. Asegúrate de usar
hellworldpara el nombre común.Verifica que se hayan creado los siguientes archivos:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
Crea un archivo nuevo llamado
server.jsde la siguiente manera:'use strict'; const express = require('express'); const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync("tls.key"), cert: fs.readFileSync("tls.crt") }; // Constants const PORT = 9443; const HOST = '0.0.0.0'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello world\n'); }); https.createServer(options, app).listen(PORT);Crea un archivo
package.jsonen el mismo directorio queserver.js. Por ejemplo:{ "name": "helloworld", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.16.4", "fs": "0.0.1-security", "https": "^1.0.0" } }Ejecuta
npm installpara obtener las dependencias.Crea un nuevo Dockerfile en el mismo directorio que
server.js, dondeWORKDIRes la ruta de acceso a la raíz de tu app de Node.js:FROM node:8-alpine WORKDIR path-to-your-node-app COPY package*.json ./ RUN npm install COPY . . EXPOSE 9443 CMD [ "npm", "start" ]
Compilar la imagen de Docker:
docker build -t helloworld .Inicia la app de ejemplo:
docker run -P -p 9443:9443 --name helloworld helloworld
3. Crea entidades en Apigee Edge
Crea un proxy compatible con Edge Microgateway con estos parámetros de configuración. Para obtener más información, consulta Crea un proxy de API compatible con Edge Microgateway en Edge.
- Nombre del proxy:
edgemicro_local - Revisión:
1 - Ruta base:
/local - Objetivo:
https://helloworld:9443
- Nombre del proxy:
Crea un producto de API. Para obtener más detalles, consulta Cómo crear un producto.
Crea un desarrollador. Para obtener más información, consulta Crea un desarrollador.
Crea una app para desarrolladores. Para obtener más información, consulta Crea una app para desarrolladores.
4. Ejecuta el contenedor
Abre el archivo de configuración de Edge Micro en un editor. Por ejemplo:
vi $HOME/.edgemicro/myorg-test-config.yamlEdita la estrofa
edgemicrode la siguiente manera. Ten en cuenta que estás realizando cambios en los atributosportyssl:edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...Ejecuta el siguiente comando para codificar en base64 el archivo de configuración de Edge Microgateway ubicado en
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
donde
your_orgyyour_envson la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config.Recuerda colocar acentos graves (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Ejecuta el siguiente comando para iniciar Edge Microgateway en el contenedor de Docker.
docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
5. Prueba la configuración de TLS
Ejecuta el siguiente comando de cURL para probar la configuración. Sustituye la ruta base que usaste en el proxy compatible con microgateway y la clave de API que obtuviste de la app para desarrolladores que creaste en Apigee Edge. Por ejemplo:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vDeberías ver este error:
... * subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * start date: Dec 10 02:12:22 2018 GMT * expire date: Sep 29 02:12:22 2021 GMT * issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 502 Bad Gateway < Date: Wed, 12 Dec 2018 05:25:01 GMT < Connection: keep-alive < Content-Length: 93 < * Connection #0 to host localhost left intact {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}Vuelve a ejecutar Edge Microgateway, pero esta vez agrega la variable
NODE_EXTRA_CA_CERTS.docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
Ejecuta el siguiente comando de cURL. Sustituye tu ruta base y tu clave de API como antes. Por ejemplo:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -vVerifica el resultado. Si la operación se realiza correctamente, recibirás una respuesta de estado HTTP 200:
... > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 200 OK < x-powered-by: Express < content-type: text/html; charset=utf-8 < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0" < date: Wed, 12 Dec 2018 05:49:28 GMT < x-response-time: 421 < Connection: keep-alive < Transfer-Encoding: chunked < Hello world
Cómo agregar un complemento personalizado
Puedes agregar nuevas funciones y capacidades a la puerta de enlace pequeña escribiendo complementos personalizados. Los complementos personalizados te permiten interactuar de forma programática con las solicitudes y las respuestas que fluyen a través de la microgateway.
Tienes dos opciones para implementar complementos en una instancia de Edge Microgateway que se ejecuta en un contenedor de Docker:
- Opción A: Activa el directorio de complementos en un volumen
- Opción B: Compila los complementos en el contenedor
En el resto de esta sección, se supone que sabes escribir y configurar complementos para una configuración estándar de Edge Microgateway. Si no es así, consulta Cómo desarrollar complementos personalizados.
Opción A: Activa el directorio de complementos en un volumen
(Se agregó en la versión 2.5.27) Los pasos para agregar complementos a través de una activación de volumen son similares a los pasos necesarios para agregar cualquier complemento personalizado a Edge Microgateway. Cuando ejecutas el contenedor de Docker, puedes activar el directorio de complementos en tu sistema local (el volumen) en el punto de activación del contenedor, que es /opt/apigee/plugins.
Luego, especifica el directorio del volumen local en el archivo de configuración de Edge Microgateway.
En los siguientes pasos, se ilustra cómo usar un punto de activación de Docker para incluir complementos personalizados.
Detén Edge Microgateway:
edgemicro stopCrea un directorio para tus complementos personalizados. Por ejemplo, crea
$HOME/edgemicro/custom/pluginsAgrega el directorio del complemento personalizado al archivo de configuración de Edge Microgateway. Por ejemplo:
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````Escribe y prueba tu complemento según las instrucciones que se indican en Escribe un complemento simple. Asegúrate de colocar el código del complemento en la estructura de directorios adecuada. Por ejemplo:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsonEjecuta el contenedor de Docker con un comando similar al siguiente, en el que usas la opción
-vpara activar el directorio de complementos en el volumen de Docker. En el siguiente comando de ejemplo, el directorio de complementos$HOME/edgemicro/custom/plugins(donde se encuentra el complemento personalizado) se asigna al punto de activación del contenedor/opt/apigee/plugins:docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -v $HOME/edgemicro/custom/plugins:/opt/apigee/plugins \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=jdoe \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=39c4b561100cd7f258768d1072f3e1d7c17b5f36a18fe89972bb5c9ce7e58fb \ -e EDGEMICRO_SECRET=f5f9e239a38b4e6cc99c2aa067716a84aebdcff9580a7925fc500e402b1a5fa \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL gcr.io/apigee-microgateway/edgemicro:latestLlama a tu API para probar el complemento.
Para obtener más información, consulta VOLUMEN [sistemas de archivos compartidos].
Opción B: Compila los complementos en el contenedor
En esta opción, compilas los complementos en tu contenedor.
1. Empaqueta tus complementos
Escribe y prueba tu complemento según las instrucciones que se indican en Escribe un complemento simple.
Coloca el código del complemento en la estructura de directorio adecuada. Los directorios de complementos deben seguir una estructura establecida. En el siguiente ejemplo, se muestra la estructura que debes seguir, en la que
response-uppercaseyrequest-headersson los nombres de las carpetas que contienen código de complementos personalizados (estos nombres son solo ejemplos, los nombres de tus carpetas pueden ser diferentes):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncda la carpetapluginEn la carpeta
plugin, comprime toda la carpetaplugins:zip -r plugins.zip plugins/
2. Crear una imagen de Docker
A continuación, crea un Dockerfile para agregar el código de tu complemento a una imagen de Edge Microgateway.
- En el mismo directorio donde se encuentra el archivo zip, crea un archivo nuevo llamado
Dockerfile. Agrega el siguiente código a
Dockerfiley guarda el archivo:USER root RUN apk update && \ apk upgrade && \ apk add zipapk add zip && \ mkdir /opt/apigee/customplugins && \ chown apigee:apigee /opt/apigee/customplugins COPY plugins.zip /opt/apigee/customplugins RUN su - apigee -c "unzip /opt/apigee/customplugins/plugins.zip -d /opt/apigee/customplugins" EXPOSE 8000 EXPOSE 8443 USER apigee ENTRYPOINT ["entrypoint"]Crea una nueva imagen de Docker de Edge Microgateway con tus complementos:
docker build -t image-name .Por ejemplo:
docker build -t edgemicroplugins .
3. Actualiza la configuración de Edge Microgateway
Ahora que los complementos están empaquetados, debes agregarlos al archivo de configuración de Edge Microgateway.
Abre el archivo de configuración de Edge Microgateway en un editor:
$HOME/.edgemicro/org-env-config.yaml
Por ejemplo:
vi $HOME/.edgemicro/myorg-test-config.yaml
Agrega el directorio del complemento al archivo de configuración. En el siguiente ejemplo, el atributo
direspecifica la ubicación del código del complemento (que especificaste en el Dockerfile). También debes especificar el nombre del directorio del complemento, que en el siguiente ejemplo esresponse-uppercase.edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. Inicia el microgateway
Por último, debes iniciar el microgateway en el contenedor.
Ejecuta el siguiente comando para codificar en base64 el archivo de configuración de Edge Microgateway ubicado en
$HOME/.edgemicro:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
donde
your_orgyyour_envson la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config.Recuerda colocar acentos graves (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Ejecuta Edge Microgateway como un contenedor. El comando establece varias variables de entorno que el entorno de ejecución del contenedor usa para iniciar Edge Microgateway:
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins image_name
Por ejemplo:
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins edgemicroplugins
Llama a tu API para probar el complemento:
Para probar que el código del complemento se ejecute, llama a tu API y verifica que el resultado sea el esperado:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
Por ejemplo, el complemento de
response-uppercasepodría devolver una respuesta como esta:curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz" HELLO, WORLD!