Condividi tramite


Distribuire un gateway self-hosted di Gestione API di Azure in App contenitore di Azure

SI APPLICA A: Sviluppatore | Premium

Questo articolo illustra la procedura per distribuire il componente gateway self-hosted di Azure API Management in Azure Container Apps.

Distribuire un gateway ospitato localmente in un'app di contenitori per accedere alle API ospitate nello stesso ambiente di Azure App per Contenitori.

Prerequisiti

Effettuare il provisioning del gateway nell'istanza di Gestione API di Azure

Prima di distribuire un gateway self-hosted, effettuare il provisioning di una risorsa gateway nell'istanza di Gestione API di Azure. Per la procedura, vedere Effettuare il provisioning di un gateway self-hosted. Negli esempi di questo articolo il gateway è denominato my-gateway.

Ottenere le impostazioni di distribuzione del gateway da Gestione API

Per distribuire il gateway, sono necessari i valori Token e Endpoint di configurazione del gateway. È possibile trovarli nel portale di Azure:

  1. Accedere al portale di Azure e passare all'istanza di Gestione API di Azure.
  2. Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway self-hosted.
  3. Selezionare la risorsa gateway di cui è stato effettuato il provisioning e selezionare Impostazioni>Distribuzione.
  4. Copia i valori del Token e dell'endpoint di configurazione.

Distribuire il gateway self-hosted in un’app contenitore

È possibile implementare l'immagine del contenitore del gateway self-hosted in un'app contenitore usando il portale di Azure, l'interfaccia della riga di comando di Azure o altri strumenti. Questo articolo illustra i passaggi con l'interfaccia della riga di comando di Azure.

Creare un ambiente di app contenitore

Creare prima di tutto un ambiente di app contenitore usando il comando az containerapp env create :

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

Questo comando crea:

  • Un ambiente di app container denominato my-environment che utilizzi per raggruppare le app container.
  • Un'area di lavoro Log Analytics

Creare un'app contenitore per il gateway auto-ospitato

Per distribuire il gateway self-hosted in un'app contenitore nell'ambiente, eseguire il comando az containerapp create.

Impostare prima le variabili per i valori di Token ed Endpoint di configurazione dalla risorsa del gateway di Gestione API di Azure.

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

Creare l'app contenitore usando il 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"

Questo comando crea:

  • Un'app contenitore denominata my-gateway nel myResourceGroup gruppo di risorse. In questo esempio l'app contenitore usa l'immagine mcr.microsoft.com/azure-api-management/gateway:2.9.2 . Per altre informazioni sul gateway self-hosted, vedere Immagini del contenitore.

  • Supporto per l'accesso esterno all'applicazione container sulla porta 8080.

  • Un minimo di 1 e un massimo di 3 repliche dell'applicazione contenitore.

  • Una connessione dal gateway self-hosted all'istanza di Gestione API di Azure passando i valori di configurazione nelle variabili di ambiente. Per informazioni dettagliate, vedere le impostazioni di configurazione del contenitore del gateway self-hosted.

    Annotazioni

    L’App contenitore di Azure in ingresso inoltra le richieste HTTPS all'app contenitore del gateway self-hosted come HTTP. In questo caso, la net.server.http.forwarded.proto.enabled variabile di ambiente è impostata su true in modo che il gateway self-hosted usi l'intestazione X-Forwarded-Proto per determinare il protocollo originale della richiesta.

Verificare che l'applicazione contenitore sia in esecuzione

  1. Accedere al portale di Azure e passare all'app contenitore.

  2. Nella pagina Panoramica dell'app contenitore, verificare se Stato è in esecuzione.

  3. Inviare una richiesta di test all'endpoint di stato in /status-012345678990abcdef. Ad esempio, usare un curl comando simile al comando seguente.

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

    Una richiesta con esito positivo restituisce una 200 OK risposta.

Suggerimento

Usando l'interfaccia della riga di comando, è anche possibile eseguire il comando az containerapp show per controllare lo stato dell'app contenitore.

Verificare che il gateway sia funzionante

  1. Accedere al portale di Azure e passare all'istanza di Gestione API di Azure.

  2. Nel menu a sinistra, in Distribuzione e infrastruttura, selezionare Gateway self-hosted.

  3. Nella pagina Panoramica, verifica lo stato del gateway. Se il gateway è integro, segnala i normali heartbeat del gateway.

    Screenshot che mostra lo stato del gateway nel portale.

Scenario di esempio

L'esempio seguente illustra come usare il gateway self-hosted per accedere a un'API ospitata in un'app contenitore nello stesso ambiente. Come illustrato nel diagramma seguente, è possibile accedere al gateway self-hosted da Internet, mentre l'API è accessibile solo all'interno dell'ambiente delle app contenitore.

Diagramma di un scenario di esempio con il gateway auto-ospitato.

  1. Distribuire un'app contenitore che ospita un'API nello stesso ambiente del gateway self-hosted.
  2. Aggiungere l'API all'istanza di Gestione API di Azure.
  3. Chiamare l'API tramite il gateway auto-gestito.

Distribuire un'app contenitore che ospita un'API nello stesso ambiente del gateway self-hosted

In questo esempio si distribuisce un'API dell'album musicale di esempio in un'app contenitore. Per accedere all'API in un secondo momento usando il gateway self-hosted, distribuire l'API nello stesso ambiente del gateway self-hosted. Per istruzioni dettagliate e informazioni sulle risorse usate in questo esempio, vedere Avvio rapido: Compilare e distribuire dal codice sorgente locale ad App Contenitore di Azure. I passaggi abbreviati seguono:

  1. Scaricare il codice sorgente Python nel computer locale. Se si preferisce, scaricare il codice sorgente in un'altra lingua preferita.

  2. Estrarre il codice sorgente in una cartella locale e passare alla cartella containerapps-albumapi-python-main/src .

  3. Eseguire il comando az containerapp up seguente per distribuire l'API in un'app contenitore nello stesso ambiente del gateway self-hosted. Prendere nota di . alla fine del comando, che specifica la cartella corrente come origine per l'app contenitore.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Verificare che l'applicazione container sia in esecuzione e accessibile esternamente al FQDN restituito nell'output del comando. Per impostazione predefinita, l'API è accessibile all'endpoint /albums . Esempio: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Configurare l'API per l'ingresso interno

Aggiornare ora l'app contenitore che ospita l'API di esempio per abilitare l'ingresso solo nell'ambiente contenitore. Questa impostazione limita l'accesso all'API solo dal gateway self-hosted distribuito.

  1. Accedere al portale di Azure e passare all'app contenitore.
  2. Nel menu a sinistra selezionare Networking>Ingress.
  3. Impostare Ingresso su Abilitato.
  4. In Traffico in ingresso, selezionare Limitato all'ambiente delle app di contenitori.
  5. Esaminare le impostazioni rimanenti e selezionare Salva.

Aggiungere l'API all'istanza di Gestione API di Azure

La procedura seguente illustra come aggiungere un'API all'istanza di Gestione API di Azure e configurare un back-end dell'API. Per altre informazioni, vedere Aggiungere un'API a Gestione API di Azure.

Aggiungere l'API all'istanza di Gestione API

  1. Nel portale di Azure passare all'istanza di Gestione API in cui è stato configurato il gateway self-hosted.
  2. Nel menu a sinistra selezionare API>API>+ Aggiungi API.
  3. Selezionare HTTP e selezionare Completo. Immettere le impostazioni seguenti:
    1. Nome visualizzato: immettere un nome descrittivo. Esempio: API degli Album.
    2. URL del servizio Web: immettere il nome di dominio completo interno dell'app contenitore che ospita l'API. Esempio: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. Schema URL: selezionare HTTP(S).
    4. Suffisso URL API: immettere un suffisso di tua scelta. Esempio: albumapi.
    5. Gateway: Seleziona il gateway self-hosted che hai provisionato. Esempio: my-gateway.
  4. Configurare altre impostazioni API in base allo scenario. Fare clic su Crea.

Aggiungere un'operazione API

  1. Nel menu a sinistra, selezionare API>Albums API.
  2. Selezionare + Aggiungi operazione.
  3. Immettere le impostazioni dell'operazione:
    1. Nome visualizzato: immettere un nome descrittivo per l'operazione. Esempio: Ottieni album.
    2. URL: selezionare Recupera e immettere /albums per l'endpoint.
    3. Seleziona Salva.

Chiamare l'API tramite il gateway self-hosted

Chiamare l'API utilizzando il nome di dominio completo del gateway self-hosted in esecuzione nell'app contenitore. Trovare il nome di dominio completo nella pagina Panoramica dell'app contenitore nel portale di Azure oppure eseguire il comando seguente az containerapp show .

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

Ad esempio, eseguire il comando seguente curl per chiamare l'API nell'endpoint /albumapi/albums . Se l'API richiede una chiave di sottoscrizione, passare una chiave di sottoscrizione valida per l'istanza di Gestione API come intestazione nella richiesta:

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

Quando il test ha esito positivo, il back-end risponde con un codice di risposta HTTP corretto e alcuni dati.

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"}]

Suggerimento

Se si abilita la registrazione per l'API in Application Insights, è possibile eseguire query sui log per visualizzare le richieste e le risposte.

Limitazioni

Le istanze del gateway self-hosted si basano sul protocollo UDP per le comunicazioni heartbeat e con limitazioni di frequenza. Poiché Azure Container Apps attualmente non supporta il protocollo UDP, né per il traffico in ingresso né per il traffico interno, la politica non può sincronizzare il contatore rate-limit tra le istanze. Di conseguenza, la gestione di tre repliche di un'app contenitore del gateway self-hosted con un limite X può triplicare il traffico fino al raggiungimento del limite X.

Azure Container Apps distribuisce le richieste in modo lineare tra ogni replica disponibile e funzionante. Per implementare la limitazione della velocità, è possibile dividere il limite desiderato in base al numero di repliche da eseguire e impostare il valore risultante nella configurazione. Questo approccio presenta i propri svantaggi perché potrebbe non essere possibile tenere conto dei contatori modificati se e quando le app contenitore vengono ridimensionate.