Ingress i Azure Container Apps

Azure Container Apps gör att du kan exponera din containerapp för den offentliga webben, ditt virtuella nätverk (VNET) och andra containerappar i din miljö genom att aktivera ingress. Ingressinställningar tillämpas via en uppsättning regler som styr routningen av extern och intern trafik till containerappen. När du aktiverar ingress behöver du inte skapa någon Azure Load Balancer, offentlig IP-adress eller andra Azure resurser för att aktivera inkommande HTTP-begäranden eller TCP-trafik (Transmission Control Protocol).

Ingress stöder:

Exempel på ingresskonfiguration som visar ingressdelning mellan två revisioner:

Diagram som visar en ingresskonfiguration som delar trafik mellan två revisioner.

Konfigurationsinformation finns i Konfigurera ingress.

Extern och intern ingress

När du aktiverar ingress kan du välja mellan två typer av ingress:

  • Extern: Exponerar appen via Container Apps-miljöns inkommande IP-adress. Om miljön använder en offentlig inkommande IP-adress kan appen ta emot trafik från det offentliga Internet, och den kan även nås från andra containerappar i samma miljö.

  • Internt: Gör appens eget fullt kvalificerade domännamn (FQDN) tillgängligt endast från samma Container Apps-miljö, till exempel från andra containerappar. Appens FQDN är inte direkt tillgänglig från det offentliga internet. Appen kan dock fortfarande ta emot extern trafik om den refereras som mål i en miljönivå HTTP-ruttkonfiguration. För att helt isolera en app från extern trafik, se till att den inte ingår som mål i någon HTTP-ruttkonfiguration, eller placera den i en separat miljö. För mer information, se Använd regelbaserad routing med Azure Container Apps.

Varje containerapp i en miljö kan konfigureras med olika ingressinställningar. I ett scenario med flera mikrotjänstappar kan du till exempel ha en enda containerapp som tar emot offentliga begäranden och skickar begäranden till en bakgrundstjänst för att öka säkerheten. I det här scenariot konfigurerar du den offentliga containerappen med extern ingress och den interna containerappen med intern ingress.

Hur ingressens synlighet samverkar med typen av miljö

Två separata inställningar avgör vem som kan nå din containerapp:

  • Miljötillgänglighetsnivå: Bestäms när du skapar miljön. En intern miljö (skapad med --internal-only) har ingen publik endpoint alls. Den är endast tillgänglig via en intern lastbalanserare i ditt virtuella nätverk. För mer information, se Tillgänglighetsnivå.

  • Synlighet för appingress: egenskapen för varje app external, som anges med --type external eller --type internal, och som visas i portalen som Ingresstrafik.

Miljöns tillgänglighetsnivå definierar den yttre nätverksgränsen. Appens ingressens synlighet avgör om appen publiceras vid den gränsen eller förblir inom miljön.

Miljötillgänglighetsnivå Appingång extern
(Tar emot trafik från var som helst)
App ingress intern
(Begränsat till Container Apps Environment)
Extern Nåbart från det offentliga internet och från andra appar i miljön. Endast tillgänglig från andra appar i samma miljö.
Intern Nåbart från det virtuella nätverket via den interna lastbalanseraren, och från andra appar i miljön. Inte tillgängligt från det offentliga internet. Endast tillgänglig från andra appar i samma miljö. Klienter på andra håll i det virtuella nätverket får ett HTTP 404-svar.

Important

Appens ingressinställningar beskriver appens relation till sin miljö, inte till internet. I en intern miljö publicerar att acceptera trafik från var som helst inte din app på internet, eftersom miljön inte har någon offentlig slutpunkt. Istället publicerar den appen i miljöns interna lastbalanserare så att klienter i ditt virtuella nätverk kan nå den.

Att välja Limited to Container Apps Environment för en intern miljö är mer restriktivt än du kanske förväntar dig. Den döljer appen från resten av ditt virtuella nätverk samt från internet.

Anmärkning

En app med intern inkommande åtkomst kan fortfarande ta emot trafik från utsidan av miljön om den anges som mål i en HTTP-ruttkonfiguration på miljönivå. För mer information, se Använd regelbaserad routing med Azure Container Apps.

Begränsa en app till endast virtuell nätverksåtkomst

Ett vanligt krav är en app som det publika internet inte kan nå, men som virtuella maskiner, privata endpoints, peerade nätverk och lokala nätverk kopplade via VPN eller Azure ExpressRoute kan nå. Denna konfiguration kräver att du ställer in både miljöns tillgänglighetsnivå och appens ingångssynlighet.

  1. Skapa miljön som intern, så att miljön inte har någon publik slutpunkt. Internetisolering kommer från denna inställning, och du kan inte ändra det efter att du skapat miljön. För mer information, se Använd ett virtuellt nätverk med Azure Container Apps.

    az containerapp env create \
        --name <ENVIRONMENT_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --infrastructure-subnet-resource-id <SUBNET_RESOURCE_ID> \
        --internal-only true
    
  2. Ställ in appens ingång till extern, så att appen publiceras på miljöns interna lastbalanserare och klienter i det virtuella nätverket kan nå den.

    az containerapp ingress enable \
        --name <APP_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --target-port <PORT_NUMBER> \
        --type external
    

Använd intern appingång endast för appar som andra containerappar i samma miljö anropar, till exempel en backend-tjänst i en mikrotjänstapplikation.

Protokolltyper

Container Apps stöder två protokoll för inkommande: HTTP och TCP.

HTTP

När HTTP-ingressen är aktiverad har containerappen:

  • Stöd för TLS-avslutning (Transport Layer Security)
  • Stöd för HTTP/1.1 och HTTP/2
  • Stöd för WebSocket och gRPC
  • HTTPS-slutpunkter som alltid använder TLS 1.2 eller 1.3, avslutade vid ingresspunkten
  • Slutpunkter som exponerar portarna 80 (för HTTP) och 443 (för HTTPS)
    • Som standard omdirigeras HTTP-begäranden till port 80 automatiskt till HTTPS på 443
  • Ett fullständigt domännamn (FQDN)
  • Tidsgränsen för begäran är 240 sekunder

HTTP-rubriker

HTTP-ingress lägger till rubriker för att skicka metadata om klientbegäran till containerappen. Till exempel används X-Forwarded-Proto-huvudet för att identifiera vilket protokoll klienten använde för att ansluta till Container Apps-tjänsten. I följande tabell visas de HTTP-huvuden som är relevanta för ingress i Container Apps:

Rubrik Beskrivning Värden
X-Forwarded-Proto Protokoll som används av klienten för att ansluta till Container Apps-tjänsten. http eller https. Det här värdet skrivs över om det skickas av klienten.
X-Forwarded-For IP-adresserna för klienten och/eller mellanliggande proxyservrar som skickade begäran. IP-adresser för avsändare. Om det anges i den första begäran läggs den till. Endast den högra IP-adressen tillhandahålls av Azure Container Apps. Andra värden måste verifieras av användaren för att förhindra IP-förfalskning.
X-Forwarded-Client-Cert Klientcertifikatet om clientCertificateMode är satt. Semikolonavgränsad lista över hash, certifikat och kedja. Till exempel: Hash=....;Cert="...";Chain="...";. Det här värdet skrivs över om det skickas av klienten.

TCP

Container Apps stöder TCP-baserade protokoll som inte är HTTP- eller HTTPS-baserade. Du kan till exempel använda TCP-ingress för att exponera en containerapp som använder Redis-protokollet.

Anmärkning

Extern TCP-ingress stöds endast för Container Apps-miljöer som använder ett virtuellt nätverk.

När TCP-ingressen är aktiverad kan din containerapp:

  • Är tillgänglig för andra containerappar i samma miljö via dess namn (definieras av name egenskapen i Container Apps-resursen) och exponerat portnummer.
  • Är tillgänglig externt via dess fullständigt kvalificerade domännamn (FQDN) och exponerat portnummer om ingressen är inställd på external.

Ytterligare TCP-portar

Förutom den huvudsakliga HTTP/TCP-porten för dina containerappar kan du exponera ytterligare TCP-portar för att aktivera program som accepterar TCP-anslutningar på flera portar.

Anmärkning

Om du vill använda den här funktionen måste du ha CLI-tillägget för containerappar. Kör az extension add -n containerapp för att installera den senaste versionen av CLI-tillägget för containerappar.

Följande gäller för ytterligare TCP-portar:

  • Fler TCP-portar kan bara vara externa om själva appen har angetts som extern och containerappen använder ett virtuellt nätverk.

  • Alla externt exponerade extra TCP-portar måste vara unika i hela Container Apps-miljön. Detta omfattar alla extra externa TCP-portar, huvudsakliga externa TCP-portar och 80/443-portar som används av inbyggd HTTP-åtkomst. Om de extra portarna är interna kan du dela samma port mellan flera appar.

  • Om en exponerad port inte tillhandahålls, ställs den som standard in att matcha målporten.

  • Varje målport måste vara unik och samma målport kan inte exponeras på olika exponerade portar.

  • Det finns högst fem ytterligare portar per app. Om ytterligare portar krävs öppnar du en supportbegäran.

  • Endast den huvudsakliga ingressporten stöder inbyggda HTTP-funktioner som CORS och sessionstillhörighet. När du kör HTTP ovanpå de extra TCP-portarna stöds inte dessa inbyggda funktioner.

  • Portnumret 36985 är reserverat för interna hälsokontroller och är inte tillgängligt för TCP-program eller extra exponerade portar i HTTP-program.

Mer information om hur du aktiverar extra portar finns i Konfigurera ingress för din app.

Domännamn

Du kan komma åt din app på följande sätt:

Information om hur du hämtar FQDN för din app finns i Containerappens plats (FQDN).

IP-begränsningar

Container Apps stöder IP-begränsningar för ingress. Du kan skapa regler för att antingen konfigurera IP-adresser som tillåts eller nekas åtkomst till din containerapp. Mer information finns i Konfigurera IP-begränsningar.

Autentisering

Azure Container Apps tillhandahåller inbyggda funktioner för autentisering och auktorisering för att skydda din externa ingressaktiverade containerapp. Mer information finns i Autentisering och auktorisering i Azure Container Apps.

Du kan konfigurera din app så att den stöder klientcertifikat (mTLS) för autentisering och trafikkryptering. Mer information finns i Konfigurera klientcertifikat.

Mer information om hur du använder nätverkskryptering på peer-to-peer-miljönivå finns i Nätverkskonfiguration.

Trafikdelning

Med Containers Apps kan du dela upp inkommande trafik mellan aktiva revisioner. När du definierar en delningsregel, fördelar du den procentandel av inkommande trafik som ska skickas till olika revisioner. Mer information finns i Trafikdelning.

Sessionstillhörighet

Sessionstillhörighet, även kallat klibbiga sessioner, är en funktion som gör att du kan dirigera alla HTTP-begäranden från en klient till samma containerappreplik. Den här funktionen är användbar för tillståndskänsliga program som kräver en konsekvent anslutning till samma replik. Mer information finns i Sessionstillhörighet.

Delning av resurser mellan olika ursprung (CORS)

Som standard blockeras alla begäranden som görs via webbläsaren från en sida till en domän som inte matchar sidans ursprungsdomän. För att undvika den här begränsningen för tjänster som distribueras till Container Apps kan du aktivera resursdelning mellan ursprung (CORS).

Mer information finns i Konfigurera CORS i Azure Container Apps.

Nästa steg