Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información
En este tema, se explica cómo ejecutar Edge Microgateway en un contenedor de Docker. Pasos que se abordan en este tema, por lo que se da por sentado que tienes un conocimiento básico de Docker, los comandos de Docker y Edge Microgateway. y configuración. Para 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 hacer lo siguiente 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 la Parte 1: Configura Edge Microgateway.
Después de realizar los pasos de configuración, ubica el archivo . La ubicación predeterminada es esta:
$HOME/.edgemicro/your_org-your_env-config.yaml
en el que
your_org
yyour_env
son 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 clave y secretas que se mostraron cuando ejecutaste la Comando
edgemicro config
. Por ejemplo:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
Antes de iniciar Edge Microgateway en un contenedor de Docker, debes crear (o ya creaste) las entidades de Apigee Edge que se requieren para realizar llamadas de proxy a la API autenticadas. Estas entidades incluyen una puerta de enlace un proxy, un producto de API, un desarrollador y una app de desarrollador. Para obtener instrucciones completas, consulta Crea entidades en Apigee Edge.
Ejecuta Edge Micro como 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 en la sección Requisitos previos.
Ejecuta el siguiente comando para codificar el archivo de configuración de Edge Microgateway en base64 ubicado en
$HOME/.edgemicro
:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
En el ejemplo anterior,
your_org
yyour_env
son la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config
.Recuerda colocar las comillas simples (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Ejecuta Edge Microgateway como contenedor. El comando establece varias variables de entorno que usa el entorno de ejecución del contenedor para iniciar Edge Microgateway:
chown -R 100:101 ~/.edgemicro/ \ 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 "LOG_CONSOLE_OUTPUT_TO_FILE=false" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro:latest
Parámetros
<tr> <td><code>SERVICE_NAME</code></td> <td>If you are on Kubernetes, this parameter is auto-populated. Otherwise, you can set it to anything you wish. If you specify nothing, the service name is set to <code>default</code>.</td> </tr> <tr> <tr> <td><code>DEBUG</code></td> <td>Set to <code>*</code> to enable debugging. </td> </tr> <tr> <td><code>HTTP_PROXY</code> <code>HTTPS_PROXY</code></td> <td>Use when Edge Microgateway is running behind a firewall and the gateway cannot communicate with Apigee Edge. For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. <p>For example: <code>HTTP_PROXY=http://10.203.0.1:5187/</code></p></td> </tr> <tr> <td><code>NO_PROXY</code></td> <td>A comma delimited list of domains that Edge Microgateway should not proxy to. For more information, see <a href="operation-and-configuration-reference-edge-microgateway#settingupedgemicrogatewaybehindacompanyfirewall">Setting up Edge Microgateway behind a company firewall</a>. <p>For example: <code>localhost,127.0.0.1,localaddress,.localdomain.com</code></p></td> </tr> <tr> <tr> <tr> <td><code>NODE_EXTRA_CA_CERTS</code></td> <td>(Optional) Use this parameter if you are using a CA that's not trusted by default by Node.js. Set the value of this parameter to the path to a file containing one or more trusted certificates in PEM format. For details, see <a href="#tls_certificates">TLS certificates</a>.</td> </tr> <tr> <td><code>--security-opt</code></td> <td>(Optional) Sets desired Docker security options. See <a href="https://docs.docker.com/engine/reference/run/#security-configuration">Security configuration</a> in the Docker documentation.</td> </tr> <tr> <td><code>--cap-drop</code></td> <td>(Optional) Sets limits on Linux capabilities permitted in the container. See <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities">Runtime privilege and Linux capabilities</a> in the Docker documentation.</td> </tr> </tbody>
Parámetro Descripción -P
Publica todos los puertos expuestos en el host. Consulta también la referencia de ejecución de Docker. -p
Asigna de forma explícita un solo puerto o un rango de puertos. Consulta también la referencia de ejecución de Docker. -d
Ejecutar en modo separado Consulta también la referencia de ejecución de Docker. -v, -- volume
Especifica la activación de un volumen. Ten en cuenta que, si configuras Edge Microgateway para usar TLS en el contenedor de Docker, debes exponer el puerto 8443 si activar el directorio del archivo de registro. Consulta también VOLUMEN [sistemas de archivos compartidos]. Consulta también Cómo usar TLS en el contenedor de Docker. -w, -- workdir
Especifica la ruta de acceso al directorio en el que (opcional) Los archivos edgemicro.sock
yedgemicro.pid
deben tener crear. No puedes modificar la raíz del nombre de archivoedgemicro
. El valor predeterminado es la ruta de acceso actual del directorio de trabajo.Ejemplo:
docker run -P -p 8000:8000 -d -w /tmp --name edgemicro
...EDGEMICRO_ORG
El nombre de la organización de Apigee que usaste para configurar Edge Microgateway. EDGEMICRO_ENV
El nombre del entorno de Apigee que usaste para configurar Edge Microgateway. EDGEMICRO_PROCESSES
La cantidad de procesos que se iniciarán. EDGEMICRO_KEY
La clave que se mostró cuando configuraste Edge Microgateway. EDGEMICRO_SECRET
El secreto que se mostró cuando configuraste Edge Microgateway. EDGEMICRO_CONFIG
Una variable que contiene el archivo de configuración de Edge Microgateway codificado en base64. LOG_CONSOLE_OUTPUT_TO_FILE
(Booleano) Te permite especificar a dónde se envía el resultado del registro. Consulta Especifica opciones de archivos de registro. Por ejemplo:
chown -R 100:101 ~/.edgemicro/
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/edgemicroPara verificar que el contenedor se esté ejecutando, sigue estos pasos:
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
Especifica opciones de salida de archivo de registro
El parámetro de configuración to_console de Edge Microgateway te permite enviar información de registro a la salida estándar en lugar de a un archivo de registro. Si sigues los pasos para ejecutar Edge Microgateway en un contenedor de Docker, el contenedor redirecciona de forma predeterminada el resultado de stdout y el error a un archivo ubicado en el contenedor en la ubicación:
${APIGEE_ROOT}/logs/edgemicro.log
.Para evitar que la información de registro se envíe a
edgemicro.log
, usa la variableLOG_CONSOLE_OUTPUT_TO_FILE
cuando ejecutes el contenedor.En la siguiente tabla, se describe el comportamiento del resultado del registro cuando usas
LOG_CONSOLE_OUTPUT_TO_FILE
conto_console
:to_console: true
LOG_CONSOLE_OUTPUT_TO_FILE=false
- No se enviarán registros al archivo de registro de Edge Microgateway, como se describe en Administra archivos de registro.
- No se enviarán registros al archivo
edgemicro.log
.
to_console: true
LOG_CONSOLE_OUTPUT_TO_FILE=true
- No se enviarán registros al archivo de registro de Edge Microgateway, como se describe en Administra archivos de registro.
- Se enviarán los registros al archivo
edgemicro.log
.
to_console: false
LOG_CONSOLE_OUTPUT_TO_FILE=true
- Los registros se enviarán al archivo de registro de Edge Microgateway, como se describe en Administra archivos de registro.
- Se enviarán los registros al archivo
edgemicro.log
.
Prueba 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 gestionó correctamente el problema 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 anteriormente. En la página del desarrollador En la página de la app, muestra la clave de consumidor y cópiala. Este valor es la clave de API. Usarás esta clave para hacer llamadas autenticadas a la API.
Llama a la API con el encabezado
x-api-key
de la siguiente manera. El valor de la clave de consumidor copiada de la app de desarrollador es la clave de API. De forma predeterminada, Edge Microgateway se espera que pases la clave en un encabezado llamadox-api-key
, como este: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 quieres obtener más información para realizar llamadas autenticadas a la API con Edge Microgateway con claves de API y tokens de OAuth, consulta la Parte 4: Protege Edge Microgateway.
Detén Edge Microgateway
Usa el siguiente comando de Docker para detener Edge Microgateway:
docker stop edgemicro
Reinicia 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 la ejecución de Edge Microgateway en un contenedor de Docker. Puedes configurar el servidor de Edge Microgateway para que use TLS para solicitudes entrantes (dirección norte), y puedes configurar Edge Microgateway que sea un cliente de TLS para que las solicitudes salientes se dirijan a los extremos (dirección hacia el sur).
Dónde colocar los archivos de certificados
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 de certificados disponibles en ese punto de activación y hacer referencia a ellos en la Archivo de configuración de Edge Microgateway. Por lo general, este archivo de configuración se encuentra en$HOME/.edgemicro
y se llamayour_org-your_env-config.yaml
. Por ejemplo:... edgemicro: ssl: key: /opt/apigee/.edgemicro/southbound/tls.key cert: /opt/apigee/.edgemicro/southbound/tls.crt ...
Usa una AC en la que Node.js no confíe
Si usas una autoridad certificadora (AC) que no es de confianza de forma predeterminada Node.js (como sucede con los certificados autofirmados), considera usar el parámetro
NODE_EXTRA_CA_CERTS
cuando ejecutes el contenedorEstablece este parámetro en la ruta de acceso a un archivo que contenga uno o más archivos. certificados de confianza en formato PEM. Para ver cómo se usa este parámetro, consulta la Ejemplos: Cómo configurar TLS con dirección norte y Cómo configurar TLS con dirección sur.
Por ejemplo:
chown -R 100:101 ~/.edgemicro/ \ 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.
Desactivando 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 ejecutan en un contenedor. La capacidad de inhabilitar TLS No está compilada en el contenedor de Docker de Edge Microgateway de forma predeterminada. Para lograr la tarea, debes crear una imagen personalizada de Docker para Edge Microgateway. Inferior a contiene 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
cd
al directoriomicrogateway/kubernetes/docker/edgemicro
en el directorio del código fuente.Por ejemplo:
cd $HOME/git/microgateway/kubernetes/docker/edgemicro
Abre el archivo
entrypoint.sh
y modifica el código para aceptarNODE_TLS_REJECT_UNAUTHORIZED
. variable de entorno. Más adelante, cuando ejecutes el contenedor, especificarás un valor para este de salida.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:
chown -R 100:101 ~/.edgemicro/ \ 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 con dirección norte
En esta sección, se explica cómo configurar una conexión TLS con dirección al norte (entrante) en Edge Microgateway. servidor. La TLS hacia el norte 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 de la configuración
- Ubica el archivo
openssl.cnf
en tu sistema. Por ejemplo,/etc/ssl/openssl.cnf
- Abre el archivo
opensssl.cnf
para editarlo. Asegúrate de que los
req_extensions
estén presentes en tu archivo de configuración. Por ejemplo, debería tener información similar a la siguiente en tu archivo:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Agrega la siguiente estrofa a
openssl.cnf
para 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::1
Archivo
opensssl.cnf
de 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::1
Sigue los pasos que se indican en la sección Requisitos previos para inicializar e Configura Edge Microgateway, si aún no lo has hecho. Cuando termines, debimos haber creado un proxy con reconocimiento de Edge Microgateway, un producto de API, un desarrollador y una app de desarrollador. Además, deberías haber ejecutado el comando
edgemicro configure
y recibió una clave y un secreto.
2. Genera certificados autofirmados
A continuación, genera los certificados y las claves que necesitarás para establecer TLS:
cd
al directorio$HOME/.edgemicro
.Crea 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 al archivo
openssl.cnf
sea correcta.Ejecuta el archivo Bash. Se le solicitará información sobre el certificado. Asegúrate de usar
localhost
para el nombre comúnVerifica que se hayan creado los siguientes archivos:
rootca.key
rootca.pem
tls.key
tls.csr
rootca.srl
tls.crt
3. Edita el archivo de configuración de Edge Microgateway
Abre el archivo de microconfiguración de Edge en un editor. Por ejemplo:
vi $HOME/.edgemicro/myorg-test-config.yaml
Edita la estrofa
edgemicro
de la siguiente manera. Ten en cuenta que harás cambios a los atributosport
yssl
: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 el archivo de configuración de Edge Microgateway en base64 ubicado en
$HOME/.edgemicro
:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
En el ejemplo anterior,
your_org
yyour_env
son la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config
.Recuerda colocar las comillas simples (`) 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:
chown -R 100:101 ~/.edgemicro/ \ 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 utilizados en el comando: difieren de la configuración descrito en Ejecuta Edge Micro como un contenedor de Docker.
port
se configura en8443
.- Se usa una activación de volumen para activar los archivos de clave y certificado.
- La variable
NODE_EXTRA_CA_CERTS
se usa para agregar una AC personalizada (según sea necesario en el caso de certificados autofirmados).
5. Prueba la configuración de TLS
Ejecuta el siguiente comando cURL para probar la configuración. Sustituto tu ruta base y la clave de API en el comando. En el siguiente ejemplo, se supone que te encuentras en el directorio donde Se encuentra
rootca.pem
y 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, significa que 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 con dirección sur
En esta sección, se explica cómo configurar una conexión TLS hacia el sur (saliente) 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.cnf
en tu sistema. Por ejemplo,/etc/ssl/openssl.cnf
- Abre el archivo
opensssl.cnf
para editarlo. Asegúrate de que los
req_extensions
estén presentes en tu archivo de configuración. Por ejemplo, debería tener información similar a la siguiente en tu archivo:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Agrega la siguiente estrofa a
openssl.cnf
para 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::1
Archivo
opensssl.cnf
de 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::1
Ejecuta 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 la Parte 1: Configura Edge Microgateway.
Copia las credenciales de clave y secreta que se mostraron desde
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
cd
al directorio.edgemicro
.Crea 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 al archivo
openssl.cnf
sea correcta.Ejecuta el archivo Bash. Se le solicitará información sobre el certificado. Asegúrate de usar
hellworld
para el nombre comúnVerifica que se hayan creado los siguientes archivos:
rootca.key
rootca.pem
tls.key
tls.csr
rootca.srl
tls.crt
Crea un archivo nuevo llamado
server.js
de 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.json
en 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 install
para obtener las dependencias.Crea un Dockerfile nuevo en el mismo directorio que
server.js
, dondeWORKDIR
. es la ruta 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 que reconozca Edge Microgateway con esta 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 información, consulta Cómo crear un producto.
Crea un desarrollador. Para obtener más información, consulta Cómo crear un desarrollador.
Crear una app de desarrollador Para obtener más información, consulta Crea una app de desarrollador.
4. Ejecuta el contenedor
Abre el archivo de microconfiguración de Edge en un editor. Por ejemplo:
vi $HOME/.edgemicro/myorg-test-config.yaml
Edita la estrofa
edgemicro
de la siguiente manera. Ten en cuenta que harás cambios a los atributosport
yssl
: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`
En el ejemplo anterior,
your_org
yyour_env
son la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config
.Recuerda colocar las comillas simples (`) 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.
chown -R 100:101 ~/.edgemicro/ \ 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 cURL para probar la configuración. Sustituto la ruta base que usaste en el proxy con microgateway y el Clave de API obtenida de la app para desarrolladores que creaste en Apigee Edge. Por ejemplo:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
Deberí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
.chown -R 100:101 ~/.edgemicro/ \ 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 cURL. Sustituto tu ruta base y la clave de API como antes. Por ejemplo:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v
Verifica el resultado. Si la operación es exitosa, obtendrá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
Agrega un complemento personalizado
Puedes agregar nuevas funciones y capacidades a microgateway escribiendo personalizado complementos. Los complementos personalizados te permiten interactuar de manera programática con las solicitudes. y las respuestas que fluyen por la micropuerta de enlace.
Tienes dos opciones para implementar complementos en una 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 que sepas cómo escribir y configurar 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 siguientes son los pasos para agregar complementos mediante la activación de volumen: de manera similar a los pasos necesarios para agregar cualquier complemento personalizado a Edge Microgateway. Cuándo ejecutas el contenedor de Docker, puedes activar el directorio de complementos en tu sistema (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 muestra cómo usar un punto de activación de Docker para incluir o complementos.
Detén Edge Microgateway:
edgemicro stop
Crea un directorio para tus complementos personalizados. Por ejemplo, crea
$HOME/edgemicro/custom/plugins
Agrega 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 el complemento según las instrucciones de Cómo escribir un complemento simple. Asegúrate de colocar el código del complemento en la estructura de directorio adecuada. Por ejemplo:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
Ejecuta el contenedor de Docker con un comando similar al siguiente, en el que Usa la opción
-v
para activar el directorio de complementos en el volumen de Docker. En la siguiente comando de ejemplo, el directorio de complementos$HOME/edgemicro/custom/plugins
(en la que se encuentra el complemento personalizado) se asigna al punto de activación del contenedor/opt/apigee/plugins
:chown -R 100:101 ~/.edgemicro/ \ 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:latest
Llama a tu API para probar el complemento.
Para obtener más información, consulta VOLUME [sistemas de archivos compartidos].
Opción B: Compila los complementos en el contenedor
En esta opción, se compilan los complementos en el contenedor.
1. Empaqueta tus complementos
Escribe y prueba el complemento según las instrucciones de Cómo escribir 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-uppercase
yrequest-headers
son los los nombres de las carpetas que contienen código de complemento personalizado (estos nombres son solo ejemplos; los nombres de tus carpetas pueden variar):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json
cd
a la carpetaplugin
.En 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 del complemento a una imagen de Edge Microgateway.
- En el mismo directorio en el que se encuentra el archivo ZIP, crea un archivo nuevo llamado
Dockerfile
. Agrega el siguiente código a
Dockerfile
y 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 los 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 a Edge Microgateway. de Terraform.
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
dir
especifica 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 microgateway
Por último, debes iniciar microgateway en el contenedor.
Ejecuta el siguiente comando para codificar el archivo de configuración de Edge Microgateway en base64 ubicado en
$HOME/.edgemicro
:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
En el ejemplo anterior,
your_org
yyour_env
son la organización y el entorno que usaste cuando ejecutaste el comandoedgemicro config
.Recuerda colocar las comillas simples (`) alrededor del comando. Por ejemplo:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
Ejecuta Edge Microgateway como contenedor. El comando establece varias variables de entorno que usa el entorno de ejecución del contenedor 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:
Prueba que el código del complemento se ejecute llamando a tu API y verificando que el archivo resultado esperado:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
Por ejemplo, el complemento
response-uppercase
podría mostrar una respuesta como la siguiente:curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz" HELLO, WORLD!