Compartir por


Implementación de una puerta de enlace autohospedada de Azure API Management en Azure Container Apps

SE APLICA A: Desarrollador | Premium

En este artículo se proporcionan los pasos para implementar el componente de puerta de enlace autohospedado de Azure API Management en Azure Container Apps.

Implemente una puerta de enlace autohospedada en una aplicación contenedora para acceder a las API hospedadas en el mismo entorno de Azure Container Apps.

Prerrequisitos

Provisionar la puerta de enlace en tu instancia de Azure API Management

Antes de implementar una puerta de enlace autohospedada, aprovisione un recurso de puerta de enlace en la instancia de Azure API Management. Para conocer los pasos, consulte Aprovisionar una puerta de enlace autohospedada. En los ejemplos de este artículo, la puerta de enlace se denomina my-gateway.

Obtener la configuración de implementación de puerta de enlace de API Management

Para implementar la puerta de enlace, necesita los valores del Token y del punto de conexión de configuración de la puerta de enlace. Puede encontrarlos en Azure Portal:

  1. Inicie sesión en Azure Portal y vaya a la instancia de Azure API Management.
  2. En el menú izquierdo, en Implementación e infraestructura, seleccione Puertas de enlace autohospedados.
  3. Seleccione el recurso de puerta de enlace que aprovisionó y seleccione Implementación de configuración>.
  4. Copie los valores del Token y del punto de conexión de configuración.

Implementación de la puerta de enlace autohospedada en una aplicación de contenedor

Puede implementar la imagen de contenedor de la puerta de enlace autohospedada en una aplicación de contenedor con Azure Portal, la CLI de Azure u otras herramientas. En este artículo se muestran los pasos mediante la CLI de Azure.

Creación de un entorno de aplicaciones de contenedor

En primer lugar, cree un entorno de aplicaciones de contenedor mediante el comando az containerapp env create :

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

Este comando crea:

  • Un entorno de aplicación de contenedor denominado my-environment que se usa para agrupar aplicaciones de contenedor.
  • Un área de trabajo de Log Analytics

Creación de una aplicación contenedora para la puerta de enlace autohospedada

Para implementar la puerta de enlace autohospedada en una aplicación contenedora en el entorno, ejecute el comando az containerapp create .

Primero, establezca las variables para los valores del Token y del punto de conexión de configuración del recurso de puerta de enlace de Azure API Management.

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

Cree la aplicación contenedora con el az containerapp create comando :

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.9.2" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

Este comando crea:

  • Una aplicación contenedora denominada my-gateway en el grupo de myResourceGroup recursos. En este ejemplo, la aplicación contenedora usa la mcr.microsoft.com/azure-api-management/gateway:2.9.2 imagen. Para más información sobre la puerta de enlace autohospedada, consulte imágenes de contenedor.

  • Compatibilidad con la entrada externa a la aplicación contenedora en el puerto 8080.

  • Un mínimo de 1 y un máximo de 3 réplicas de la aplicación contenedora.

  • Una conexión desde la puerta de enlace autohospedada a la instancia de Azure API Management pasando valores de configuración en variables de entorno. Para obtener más detalles, consulte los valores de configuración del contenedor de la puerta de enlace autohospedada.

    Nota:

    La entrada de Azure Container Apps reenvía las solicitudes HTTPS a la aplicación contenedora de la puerta de enlace autohospedada como HTTP. Aquí, la net.server.http.forwarded.proto.enabled variable de entorno se establece en true para que la puerta de enlace autohospedada use el X-Forwarded-Proto encabezado para determinar el protocolo original de la solicitud.

Confirmación de que la aplicación contenedora se está ejecutando

  1. Inicie sesión en Azure Portal y vaya a la aplicación contenedora.

  2. En la página Información general de la aplicación contenedora, compruebe que el estado es En ejecución.

  3. Envíe una solicitud de prueba al endpoint de estado en /status-012345678990abcdef. Por ejemplo, use un curl comando similar al siguiente.

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    Una solicitud correcta devuelve una 200 OK respuesta.

Sugerencia

Con la CLI, también puede ejecutar el comando az containerapp show para comprobar el estado de la aplicación contenedora.

Confirmación de que la puerta de enlace está en buen estado

  1. Inicie sesión en Azure Portal y vaya a la instancia de Azure API Management.

  2. En el menú izquierdo, en Implementación e infraestructura, seleccione Puertas de enlace autohospedados.

  3. En la página Información general , compruebe el estado de la puerta de enlace. Si la puerta de enlace está en buen estado, notifica latidos de puerta de enlace normales.

    Captura de pantalla del estado de la puerta de enlace en el portal.

Escenario de ejemplo

En el ejemplo siguiente se muestra cómo puede usar la puerta de enlace autohospedada para acceder a una API hospedada en una aplicación contenedora en el mismo entorno. Como se muestra en el diagrama siguiente, se puede acceder a la puerta de enlace autohospedada desde Internet, mientras que la API solo es accesible dentro del entorno de aplicaciones de contenedor.

Diagrama de escenario de ejemplo con puerta de enlace autohospedada.

  1. Implemente una aplicación contenedora que hospeda una API en el mismo entorno que la puerta de enlace autohospedada.
  2. Agregue la API a la instancia de Azure API Management.
  3. Utilice la API a través de la pasarela autohospedada.

Implementación de una aplicación contenedora que hospeda una API en el mismo entorno que la puerta de enlace autohospedada

En este ejemplo, implementará una API de álbum de música de ejemplo en una aplicación contenedora. Para acceder a la API más adelante mediante la puerta de enlace autohospedada, implemente la API en el mismo entorno que la puerta de enlace autohospedada. Para obtener pasos detallados e información sobre los recursos usados en este ejemplo, consulte Inicio rápido: Compilación e implementación desde código fuente local en Azure Container Apps. Siga los pasos abreviados:

  1. Descargue el código fuente de Python en la máquina local. Si lo prefiere, descargue el código fuente en otro idioma de su elección.

  2. Extraiga el código fuente en una carpeta local y cambie a la carpeta containerapps-albumapi-python-main/src .

  3. Ejecute el siguiente comando az containerapp up para implementar la API en una aplicación contenedora en el mismo entorno que la puerta de enlace autohospedada. Tenga en cuenta el . al final del comando, que especifica la carpeta actual como origen de la aplicación en contenedor.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Confirme que la aplicación de contenedor está ejecutándose y es accesible externamente en el FQDN proporcionado en la salida del comando. De forma predeterminada, la API es accesible en el /albums punto de conexión. Ejemplo: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Configuración de la API para la entrada interna

Ahora, actualice la aplicación contenedora que hospeda la API de ejemplo para habilitar la entrada solo en el entorno de contenedor. Esta configuración restringe el acceso a la API solo desde la puerta de enlace autohospedada que implementó.

  1. Inicie sesión en Azure Portal y vaya a la aplicación contenedora.
  2. En el menú izquierdo, seleccione Redes>Ingreso.
  3. Establezca Ingreso en Habilitado.
  4. En Tráfico de entrada, seleccione Limitado al entorno de aplicaciones en contenedores.
  5. Revise la configuración restante y seleccione Guardar.

Adición de la API a la instancia de Azure API Management

En los pasos siguientes se muestra cómo agregar una API a la instancia de Azure API Management y configurar un back-end de API. Para más información, consulte Incorporación de una API a Azure API Management.

Adición de la API a la instancia de API Management

  1. En el Azure Portal, vaya a la instancia de API Management donde configuró la puerta de enlace autohospedada.
  2. En el menú de la izquierda, seleccione API>API>+ Agregar API.
  3. Seleccione HTTP y seleccione Completo. Escriba la siguiente configuración:
    1. Nombre para mostrar: escriba un nombre descriptivo. Ejemplo: API de álbumes.
    2. Dirección URL del servicio web: escriba el FQDN interno de la aplicación contenedora que hospeda la API. Ejemplo: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. Esquema de dirección URL: seleccione HTTP(S).
    4. Sufijo de dirección URL de API: escriba un sufijo de su elección. Ejemplo: albumapi.
    5. Puertas de enlace: seleccione la puerta de enlace autohospedada que ha aprovisionado. Ejemplo: my-gateway.
  4. Configure otras opciones de API según su escenario. Selecciona Crear.

Adición de una operación de API

  1. En el menú de la izquierda, seleccione API>Albums API.
  2. Seleccione + Agregar operación.
  3. Escriba la configuración de la operación:
    1. Nombre para mostrar: escriba un nombre descriptivo para la operación. Ejemplo: Obtener álbumes.
    2. Dirección URL: seleccione Obtener y escriba /albums para el punto de conexión.
    3. Haga clic en Guardar.

Llamada a la API a través de la puerta de enlace autohospedada

Llame a la API mediante el FQDN de la puerta de enlace autohospedada que se ejecuta en la aplicación contenedora. Busque el FQDN en la página Información general de la aplicación contenedora en Azure Portal o ejecute el siguiente az containerapp show comando.

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

Por ejemplo, ejecute el siguiente curl comando para llamar a la API en el /albumapi/albums punto de conexión. Si la API requiere una clave de suscripción, pase una clave de suscripción válida para la instancia de API Management como encabezado en la solicitud:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

Cuando la prueba se realiza correctamente, el back-end responde con un código de respuesta HTTP correcto y algunos datos.

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

Sugerencia

Si habilita el registro de la API en Application Insights, puede consultar los registros para ver las solicitudes y respuestas.

Limitaciones

Las instancias de puerta de enlace autohospedada se basan en el protocolo UDP para las comunicaciones de latido y límite de frecuencia. Dado que Azure Container Apps no admite actualmente el protocolo UDP, ni para la entrada ni para el tráfico interno, la rate-limit directiva no puede sincronizar su contador entre instancias. Por lo tanto, mantener tres réplicas de una aplicación contenedora de puerta de enlace autohospedada con límite X podría dar lugar a tres veces el tráfico hasta que se alcance el límite X.

Azure Container Apps distribuye las solicitudes linealmente entre cada réplica disponible y correcta. Para implementar la limitación de velocidad, puede dividir el límite deseado por el número de réplicas que desea ejecutar y establecer el valor resultante en la configuración. Este enfoque tiene sus propias desventajas, ya que es posible que no pueda tener en cuenta los contadores ajustados si se escalan las aplicaciones de contenedores.