Teilen über


Bereitstellen eines selbst gehosteten Azure API Management-Gateways für Azure-Container-Apps

GILT FÜR: Developer | Premium

Dieser Artikel enthält die Schritte zum Bereitstellen der selbst gehosteten Gatewaykomponente von Azure API Management für Azure-Container-Apps.

Stellen Sie ein selbst gehostetes Gateway für eine Container-App bereit, um auf APIs zuzugreifen, die in derselben Azure-Container-Apps-Umgebung gehostet werden.

Voraussetzungen

Gateway in Ihrer Azure API-Verwaltungsinstanz bereitstellen

Stellen Sie vor der Bereitstellung eines selbst gehosteten Gateways eine Gatewayressource in Ihrer Azure API-Verwaltungsinstanz bereit. Schritte finden Sie unter Bereitstellen eines selbst gehosteten Gateways. In den Beispielen dieses Artikels wird das Gateway benannt my-gateway.

Abrufen von Gatewaybereitstellungseinstellungen aus der API-Verwaltung

Zum Bereitstellen des Gateways benötigen Sie die Token - und Konfigurationsendpunktwerte des Gateways. Sie finden sie im Azure-Portal:

  1. Melden Sie sich beim Azure-Portal an, und wechseln Sie zu Ihrer Azure API-Verwaltungsinstanz.
  2. Wählen Sie im linken Menü unter "Bereitstellung + Infrastruktur" die Option "Selbst gehostete Gateways" aus.
  3. Wählen Sie die bereitgestellte Gatewayressource aus und dann Einstellungen>Bereitstellung.
  4. Kopieren Sie die Token- und Konfigurationsendpunktwerte .

Bereitstellen des selbst gehosteten Gateways in einer Container-App

Sie können das selbst gehostete Gatewaycontainerimage mithilfe des Azure-Portals, der Azure CLI oder anderer Tools in einer Container-App bereitstellen. In diesem Artikel werden die Schritte mithilfe der Azure CLI erläutert.

Erstellen einer Container-Apps-Umgebung

Erstellen Sie zunächst eine Container-Apps-Umgebung mit dem Befehl "az containerapp env create ":

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

Mit diesem Befehl wird Folgendes erstellt:

  • Eine Container-App-Umgebung mit dem Namen my-environment , die Sie zum Gruppieren von Container-Apps verwenden.
  • Ein Log Analytics-Arbeitsbereich

Erstellen einer Container-App für das selbst gehostete Gateway

Führen Sie den Befehl "az containerapp create " aus, um das selbst gehostete Gateway in einer Container-App in der Umgebung bereitzustellen.

Legen Sie zunächst Variablen für die Token- und Konfigurationsendpunktwerte aus der Azure API-Verwaltungsgatewayressource fest.

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

Erstellen Sie die Container-App mit dem az containerapp create Befehl:

#!/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"

Mit diesem Befehl wird Folgendes erstellt:

  • Eine Container-App namens my-gateway in der Ressourcengruppe myResourceGroup. In diesem Beispiel verwendet die Container-App das mcr.microsoft.com/azure-api-management/gateway:2.9.2 Image. Weitere Informationen zum selbst gehosteten Gateway finden Sie in Container-Images.

  • Unterstützung für den externen Eingang zur Container-App am Port 8080.

  • Mindestens 1 und maximal 3 Replikate der Container-App.

  • Eine Verbindung vom selbst gehosteten Gateway zur Azure API Management-Instanz, indem Konfigurationswerte in Umgebungsvariablen übergeben werden. Ausführliche Informationen finden Sie in den Konfigurationseinstellungen für selbst gehostete Gatewaycontainer.

    Hinweis

    Azure Container Apps leitet HTTPS-Anforderungen als HTTP an die selbst gehostete Gatewaycontainer-App weiter. Hier wird die net.server.http.forwarded.proto.enabled-Umgebungsvariable auf true festgelegt, damit das selbstgehostete Gateway den im X-Forwarded-Proto-Header verwendeten Header nutzt, um das ursprüngliche Protokoll der Anforderung zu bestimmen.

Vergewissern Sie sich, dass die Container-App ausgeführt wird

  1. Melden Sie sich beim Azure-Portal an, und wechseln Sie zu Ihrer Container-App.

  2. Überprüfen Sie auf der Seite Übersicht der Container-App, ob derStatusausgeführt wird.

  3. Senden Sie eine Testanforderung an den Statusendpunkt auf /status-012345678990abcdef. Verwenden Sie beispielsweise einen curl Befehl ähnlich dem folgenden Befehl.

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

    Eine erfolgreiche Anforderung gibt eine 200 OK Antwort zurück.

Tipp

Mit der CLI können Sie auch den Befehl "az containerapp show" ausführen, um den Status der Container-App zu überprüfen.

Vergewissern Sie sich, dass das Gateway fehlerfrei ist.

  1. Melden Sie sich beim Azure-Portal an, und wechseln Sie zu Ihrer Azure API-Verwaltungsinstanz.

  2. Wählen Sie im linken Menü unter "Bereitstellung + Infrastruktur" die Option "Selbst gehostete Gateways" aus.

  3. Überprüfen Sie auf der Seite "Übersicht " den Status Ihres Gateways. Wenn das Gateway fehlerfrei ist, meldet es reguläre Gateway-Takte.

    Screenshot des Gatewaystatus im Portal.

Beispielszenario

Das folgende Beispiel zeigt, wie Sie das selbst gehostete Gateway verwenden können, um auf eine API zuzugreifen, die in einer Container-App in derselben Umgebung gehostet wird. Wie im folgenden Diagramm dargestellt, kann über das Internet auf das selbst gehostete Gateway zugegriffen werden, während die API nur innerhalb der Container-Apps-Umgebung zugänglich ist.

Diagramm des Beispielszenarios mit selbst gehosteten Gateways.

  1. Stellen Sie eine Container-App bereit, die eine API in derselben Umgebung wie das selbst gehostete Gateway hosten soll.
  2. Fügen Sie die API zu Ihrer Azure API-Verwaltungsinstanz hinzu.
  3. Rufen Sie die API über das selbst gehostete Gateway auf.

Bereitstellen einer Container-App, die eine API in derselben Umgebung wie das selbst gehostete Gateway hosten

In diesem Beispiel stellen Sie eine Beispielmusikalbum-API für eine Container-App bereit. Um später mithilfe des selbst gehosteten Gateways auf die API zuzugreifen, stellen Sie die API in derselben Umgebung wie das selbst gehostete Gateway bereit. Ausführliche Schritte und Informationen zu den in diesem Beispiel verwendeten Ressourcen finden Sie in der Schnellstartanleitung: Erstellen und Bereitstellen von lokalem Quellcode in Azure-Container-Apps. Die abgekürzten Schritte folgen:

  1. Laden Sie Python-Quellcode auf Ihren lokalen Computer herunter. Wenn Sie es vorziehen, laden Sie den Quellcode in einer anderen Sprache Ihrer Wahl herunter.

  2. Extrahieren Sie den Quellcode in einen lokalen Ordner und wechseln Sie in das Verzeichnis containerapps-albumapi-python-main/src.

  3. Führen Sie den folgenden Befehl "az containerapp up " aus, um die API in einer Container-App in derselben Umgebung wie das selbst gehostete Gateway bereitzustellen. Notieren Sie sich das . Ende des Befehls, der den aktuellen Ordner als Quelle für die Container-App angibt.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Vergewissern Sie sich, dass die Container-App ausgeführt und extern über den in der Befehlsausgabe zurückgegebenen FQDN zugänglich ist. Standardmäßig kann auf die API am /albums Endpunkt zugegriffen werden. Beispiel: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Konfigurieren Sie die API für internen Zugriff

Aktualisieren Sie nun die Container-App, die die Beispiel-API hosten, um den Einstieg nur in der Containerumgebung zu aktivieren. Diese Einstellung schränkt den Zugriff auf die API nur vom selbst gehosteten Gateway ein, das Sie bereitgestellt haben.

  1. Melden Sie sich beim Azure-Portal an, und wechseln Sie zu Ihrer Container-App.
  2. Wählen Sie im linken Menü Netzwerk>Ingress aus.
  3. Legen Sie " Ingress " auf "Aktiviert" fest.
  4. Wählen Sie unter Eingehender Datenverkehr die Option Auf Container-Apps-Umgebung beschränkt aus.
  5. Überprüfen Sie die verbleibenden Einstellungen, und wählen Sie "Speichern" aus.

Hinzufügen der API zu Ihrer Azure API-Verwaltungsinstanz

Die folgenden Schritte zeigen, wie Sie Ihrer Azure API-Verwaltungsinstanz eine API hinzufügen und ein API-Back-End konfigurieren. Weitere Informationen finden Sie unter Hinzufügen einer API zur Azure-API-Verwaltung.

Hinzufügen der API zur API-Verwaltungsinstanz

  1. Wechseln Sie im Azure-Portal zur API-Verwaltungsinstanz, in der Sie das selbst gehostete Gateway konfiguriert haben.
  2. Wählen Sie im linken Menü APIs>>+ API hinzufügen aus.
  3. Wählen Sie HTTP aus, und wählen Sie "Vollständig" aus. Geben Sie die folgenden Einstellungen ein:
    1. Anzeigename: Geben Sie einen beschreibenden Namen ein. Beispiel: Album-API.
    2. Webdienst-URL: Geben Sie den internen FQDN der Container-App ein, die die API hosten soll. Beispiel: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. URL-Schema: Wählen Sie HTTP(S) aus.
    4. API-URL-Suffix: Geben Sie ein Suffix Ihrer Wahl ein. Beispiel: albumapi.
    5. Gateways: Wählen Sie das selbst gehostete Gateway aus, das Sie bereitgestellt haben. Beispiel: my-gateway.
  4. Konfigurieren Sie andere API-Einstellungen entsprechend Ihrem Szenario. Wählen Sie "Erstellen" aus.

Hinzufügen eines API-Vorgangs

  1. Wählen Sie im linken Menü APIs>Albums API aus.
  2. Wählen Sie + Operation hinzufügen.
  3. Vorgangseinstellungen eingeben:
    1. Anzeigename: Geben Sie einen beschreibenden Namen für den Vorgang ein. Beispiel: Alben abrufen.
    2. URL: Wählen Sie Erhalten und geben Sie es für den Endpunkt ein /albums.
    3. Wählen Sie Speichern aus.

Aufrufen der API über das selbst gehostete Gateway

Rufen Sie die API mithilfe des FQDN des selbst gehosteten Gateways auf, das in der Container-App ausgeführt wird. Suchen Sie den FQDN auf der Seite "Übersicht" der Container-App im Azure-Portal, oder führen Sie den folgenden az containerapp show Befehl aus.

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

Führen Sie beispielsweise den folgenden curl Befehl aus, um die API am /albumapi/albums Endpunkt aufzurufen. Wenn Ihre API einen Abonnementschlüssel erfordert, übergeben Sie einen gültigen Abonnementschlüssel für Ihre API-Verwaltungsinstanz als Header in der Anforderung:

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

Wenn der Test erfolgreich ist, antwortet das Back-End mit einem erfolgreichen HTTP-Antwortcode und einigen Daten.

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

Tipp

Wenn Sie die Protokollierung für Ihre API für Application Insights aktivieren, können Sie die Protokolle abfragen, um die Anforderungen und Antworten anzuzeigen.

Einschränkungen

Eigengehostete Gatewayinstanzen basieren auf UDP-Protokoll für Heartbeat- und Rate-Limit-Kommunikation. Da Azure Container-Apps das UDP-Protokoll derzeit weder für eingehenden noch für internen Datenverkehr unterstützen, kann die rate-limit-Richtlinie ihren Zähler nicht über Instanzen hinweg synchronisieren. Folglich kann die Verwaltung von drei Replikaten einer selbstgehosteten Gatewaycontainer-App mit Limit X dazu führen, dass der Datenverkehr dreimal so lange erfolgt, bis das Limit X erreicht ist.

Azure Container Apps verteilt Anforderungen linear über jedes verfügbare und fehlerfreie Replikat. Zum Implementieren der Ratenbegrenzung können Sie den gewünschten Grenzwert durch die Anzahl der Replikate dividieren, die Sie ausführen möchten, und den resultierenden Wert in der Konfiguration festlegen. Dieser Ansatz hat eigene Nachteile, da Sie möglicherweise nicht in der Lage sind, angepasste Indikatoren zu berücksichtigen, wenn und wann Ihre Container-Apps skaliert werden.