Distribuera en lokal Azure API Management-gateway till Azure Container Apps

GÄLLER FÖR: Utvecklare | Premie

Den här artikeln innehåller stegen för att distribuera den lokalt installerade gatewaykomponenten i Azure API Management till Azure Container Apps.

Distribuera en gateway med egen värd till en containerapp för att få åtkomst till API:er som finns i samma Azure Container Apps-miljö.

Förutsättningar

Etablera gateway i din Azure API Management-instans

Innan du distribuerar en gateway med egen värd etablerar du en gatewayresurs i din Azure API Management-instans. Anvisningar finns i Etablera en gateway med egen värd. I den här artikelns exempel heter my-gatewaygatewayen .

Hämta gatewayens distributionsinställningar från API-hantering

För att distribuera gatewayen behöver du gatewayens token - och konfigurationsslutpunktsvärden . Du hittar dem i Azure-portalen:

  1. Logga in på Azure-portalen och gå till din Azure API Management-instans.
  2. I den vänstra menyn går du till Distribution + infrastruktur och väljer Gatewayer med egen värd.
  3. Välj den gatewayresurs som du etablerade och välj Inställningar>Distribution.
  4. Kopiera tokenvärdena och konfigurationsslutpunktens värden.

Distribuera den lokalt installerade gatewayen till en containerapp

Du kan distribuera den lokalt installerade gatewaycontaineravbildningen till en containerapp med hjälp av Azure-portalen, Azure CLI eller andra verktyg. Den här artikeln visar steg med hjälp av Azure CLI.

Skapa en containerappmiljö

Skapa först en miljö för containerappar med kommandot az containerapp env create :

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

Det här kommandot skapar:

  • En containerappmiljö med namnet my-environment som du använder för att gruppera containerappar.
  • En logganalysarbetsyta

Skapa en containerapp för den lokala gatewayen

Om du vill distribuera den lokalt installerade gatewayen till en containerapp i miljön kör du kommandot az containerapp create .

Ange först variabler för Token och konfigurationsslutpunktsvärdena från Azure API Management-gatewayresursen.

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

Skapa containerappen med kommandot az containerapp create :

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

Det här kommandot skapar:

  • En containerapp med namnet my-gateway i myResourceGroup resursgruppen. I det här exemplet använder containerappen avbildningen mcr.microsoft.com/azure-api-management/gateway:2.9.2 . Mer information om den lokalt installerade gatewayen finns i containeravbildningar.

  • Stöd för extern ingress till containerappen på port 8080.

  • Minst 1 och högst 3 repliker av containerappen.

  • En anslutning från den lokala gatewayen till Azure API Management-instansen genom att skicka konfigurationsvärden i miljövariabler. Mer information finns i konfigurationsinställningarna för lokalt installerad gatewaycontainer.

    Anmärkning

    Azure Container Apps-ingress vidarebefordrar HTTPS-begäranden till den lokala gatewaycontainerappen som HTTP. net.server.http.forwarded.proto.enabled Här är miljövariabeln inställd på true så att den självhostade gatewayen använder X-Forwarded-Proto headern för att avgöra det ursprungliga protokollet för begäran.

Bekräfta att containerappen körs

  1. Logga in på Azure-portalen och gå till din containerapp.

  2. På sidan Översikt för containerappen kontrollerar du att statusenkörs.

  3. Skicka en testbegäran till statusslutpunkten på /status-012345678990abcdef. Använd till exempel ett curl kommando som liknar följande kommando.

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

    En lyckad begäran returnerar ett 200 OK svar.

Tips/Råd

Med hjälp av CLI kan du också köra kommandot az containerapp show för att kontrollera containerappens status.

Bekräfta att gatewayen är felfri

  1. Logga in på Azure-portalen och gå till din Azure API Management-instans.

  2. I den vänstra menyn går du till Distribution + infrastruktur och väljer Gatewayer med egen värd.

  3. På sidan Översikt kontrollerar du gatewayens status. Om gatewayen är felfri rapporterar den vanliga gateway-pulsslag.

    Skärmbild av gatewaystatus i portalen.

Exempelscenario

I följande exempel visas hur du kan använda den lokalt installerade gatewayen för att få åtkomst till ett API som finns i en containerapp i samma miljö. Som du ser i följande diagram kan den lokalt installerade gatewayen nås från Internet, medan API:et endast är tillgängligt i containerappmiljön.

Diagram över exempelscenario med lokal gateway.

  1. Distribuera en containerapp som är värd för ett API i samma miljö som den lokala gatewayen.
  2. Lägg till API:et i din Azure API Management-instans.
  3. Anropa API:et via den lokala gatewayen.

Distribuera en containerapp som är värd för ett API i samma miljö som den lokala gatewayen

I det här exemplet distribuerar du ett exempel på ett API för musikalbum till en containerapp. Om du vill komma åt API:et senare med hjälp av den lokala gatewayen distribuerar du API:et i samma miljö som den lokalt installerade gatewayen. Detaljerade steg och information om de resurser som används i det här exemplet finns i Snabbstart: Skapa och distribuera från lokal källkod till Azure Container Apps. Förkortade steg följer:

  1. Ladda ned Python-källkod till din lokala dator. Om du vill kan du ladda ned källkoden på ett annat språk.

  2. Extrahera källkoden till en lokal mapp och ändra till mappen containerapps-albumapi-python-main/src .

  3. Kör följande az containerapp up-kommando för att distribuera API:et till en containerapp i samma miljö som den lokalt installerade gatewayen. . Observera i slutet av kommandot, som anger den aktuella mappen som källa för containerappen.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Bekräfta att containerappen körs och är tillgänglig externt vid det FQDN som returneras i kommandoutdata. Som standard är API:et tillgängligt på /albums slutpunkten. Exempel: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Konfigurera API:t för intern ingress

Uppdatera nu containerappen som är värd för exempel-API:et för att endast aktivera ingress i containermiljön. Den här inställningen begränsar endast åtkomsten till API:et från den lokala gateway som du distribuerade.

  1. Logga in på Azure-portalen och gå till din containerapp.
  2. I den vänstra menyn väljer du Ingress för> nätverk.
  3. Ange Ingress till Aktiverad.
  4. Under Inkommande trafik väljer du Begränsad till Container Apps-miljö.
  5. Granska de återstående inställningarna och välj Spara.

Lägga till API:et i din Azure API Management-instans

Följande steg visar hur du lägger till ett API i din Azure API Management-instans och konfigurerar en API-serverdel. Mer information finns i Lägga till ett API i Azure API Management.

Lägga till API:et i din API Management-instans

  1. I Azure-portalen går du till DEN API Management-instans där du konfigurerade den lokalt installerade gatewayen.
  2. I den vänstra menyn väljer du API:er>>+ Lägg till API.
  3. Välj HTTP och välj Fullständig. Ange följande inställningar:
    1. Visningsnamn: Ange ett beskrivande namn. Exempel: Album-API.
    2. Webbtjänst-URL: Ange det interna fullständiga domännamnet för containerappen som är värd för API:et. Exempel: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. URL-schema: Välj HTTP(S).
    4. API URL-suffix: Ange ett valfritt suffix. Exempel: albumapi.
    5. Gateways: Välj den självhostade gateway som du etablerade. Exempel: my-gateway.
  4. Konfigurera andra API-inställningar enligt ditt scenario. Välj Skapa.

Lägga till en API-åtgärd

  1. I den vänstra menyn väljer du API>Albums API.
  2. Välj + Lägg till åtgärd.
  3. Ange åtgärdsinställningar:
    1. Visningsnamn: Ange ett beskrivande namn för åtgärden. Exempel: Hämta album.
    2. URL: Välj Hämta och ange /albums för slutpunkten.
    3. Välj Spara.

Anropa API:et via den själv-värda gatewayen

Anropa API:et med hjälp av FQDN för den lokalt installerade gatewayen som körs i containerappen. Leta reda på FQDN på containerappens översiktssida i Azure-portalen eller kör följande az containerapp show kommando.

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

Kör till exempel följande curl kommando för att anropa API:et /albumapi/albums vid slutpunkten. Om ditt API kräver en prenumerationsnyckel skickar du en giltig prenumerationsnyckel för DIN API Management-instans som ett huvud i begäran:

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

När testet lyckas svarar serverdelen med en lyckad HTTP-svarskod och vissa data.

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

Tips/Råd

Om du aktiverar loggning för ditt API till Application Insights kan du fråga loggarna för att se begäranden och svar.

Begränsningar

Gatewayinstanser med egen värd förlitar sig på UDP-protokollet för pulsslag och hastighetsbegränsningskommunikation. Eftersom Azure Container Apps för närvarande inte stöder UDP-protokollet, varken för inkommande eller för intern trafik, kan principen inte synkronisera räknaren rate-limit mellan instanser. Att underhålla tre repliker av en egen värdbaserad gatewaycontainerapp med gräns X kan därför resultera i tre gånger trafiken tills gränsen X har nåtts.

Azure Container Apps distribuerar begäranden linjärt över varje tillgänglig och felfri replik. Om du vill implementera hastighetsbegränsning kan du dividera den önskade gränsen med det antal repliker som du vill köra och ange det resulterande värdet i konfigurationen. Den här metoden har sina egna nackdelar eftersom du kanske inte kan ta hänsyn till justerade räknare om och när dina containerappar skalas upp.