Ingress v Azure Container Apps

Azure Container Apps umožňuje vystavit vaši kontejnerovou aplikaci na veřejný web, vaši virtuální síť (VNET) a další kontejnerové aplikace uvnitř vašeho prostředí povolením příchozí komunikace. Nastavení vstupního provozu se vynucuje prostřednictvím sady pravidel, která řídí směrování externího a interního provozu do vaší kontejnerové aplikace. Když povolíte ingress, nemusíte vytvářet Azure Load Balancer, veřejnou IP adresu ani jiné prostředky Azure, abyste umožnili příchozí HTTP požadavky nebo přenosy protokolu TCP (Transmission Control Protocol).

Ingress podporuje:

Příklad konfigurace ingressu znázorňující rozdělení ingressu mezi dvě revize:

Diagram znázorňující konfiguraci příchozího provozu, která rozděluje provoz mezi dvě revize.

Podrobnosti o konfiguraci najdete v tématu Konfigurace příchozího přenosu dat.

Externí a interní vstup

Když povolíte příchozí přenos dat, můžete si vybrat mezi dvěma typy příchozího přenosu dat:

  • Externí: Zpřístupňuje aplikaci prostřednictvím příchozí IP adresy prostředí Container Apps. Pokud prostředí používá veřejnou příchozí IP adresu, může aplikace přijímat provoz z veřejného internetu a je také dosažitelná z jiných kontejnerových aplikací ve stejném prostředí.

  • Interní: Umožňuje dosažitelnost vlastního plně kvalifikovaného doménového jména (FQDN) pouze ze stejného prostředí Container Apps, například z jiných kontejnerových aplikací. FQDN aplikace není přímo přístupná z veřejného internetu. Aplikace však stále může přijímat externí provoz, pokud je v nastavení HTTP tras na úrovni prostředí označena jako cíl. Pro úplnou izolaci aplikace od externího provozu se ujistěte, že není zahrnuta jako cíl v žádné konfiguraci HTTP trasy, nebo ji umístěte do samostatného prostředí. Pro více informací viz Použít pravidlově založené směrování s Azure Container Apps.

Každá kontejnerová aplikace v prostředí může být nakonfigurována s různými nastaveními příchozího přenosu dat. Například ve scénáři s několika aplikacemi mikroslužeb můžete zvýšit zabezpečení, že máte jednu aplikaci typu kontejner, která přijímá veřejné požadavky a předává požadavky do služby na pozadí. V tomto scénáři byste nakonfigurovali veřejně přístupnou aplikaci kontejneru s externím příchozím přenosem dat a interní kontejnerovou aplikací s interním příchozím přenosem dat.

Jak vstupní viditelnost interaguje s typem prostředí

Dvě samostatná nastavení určují, kdo může přistupovat k vaší aplikaci kontejnerů:

  • Úroveň přístupnosti prostředí: Nastavuje se při vytváření prostředí. Interní prostředí (vytvořené s --internal-only) nemá žádný veřejný koncový bod. Je dostupný pouze prostřednictvím interního nástroje pro vyrovnávání zatížení ve vaší virtuální síti. Pro více informací viz Úroveň přístupnosti.

  • Viditelnost příchozího provozu aplikace: Vlastnost pro jednotlivé aplikace external, která se nastavuje pomocí --type external nebo --type internal a v portálu se zobrazuje jako Příchozí provoz.

Úroveň přístupnosti prostředí určuje vnější hranici sítě. Viditelnost vstupu aplikace určuje, zda je aplikace publikována na této hranici, nebo uchovávána v prostředí.

Úroveň přístupnosti prostředí Externí vstup aplikace
(Přijímáme provoz odkudkoliv)
Interní vstup aplikace
(Omezeno na prostředí kontejnerových aplikací)
Externí Dostupný z veřejného internetu a dalších aplikací v prostředí. Dostupný pouze z jiných aplikací ve stejném prostředí.
Interní Dostupný z virtuální sítě přes interní load balancer a z dalších aplikací v prostředí. Není dostupné z veřejného internetu. Dostupný pouze z jiných aplikací ve stejném prostředí. Klienti jinde ve virtuální síti obdrží odpověď HTTP 404.

Important

Nastavení vstupu aplikace popisuje vztah aplikace k jejímu prostředí, nikoli k internetu. V interním prostředí Povolení provozu odkudkoli nezpřístupní vaši aplikaci na internetu, protože prostředí nemá veřejný koncový bod. Místo toho zveřejní aplikaci v interním load balanceru prostředí, aby ji klienti ve vaší virtuální síti mohli získat.

Výběr možnosti Limited to Container Apps Environment v interním prostředí je omezující více, než byste mohli očekávat. Aplikace se skryje před zbytkem vaší virtuální sítě i před internetem.

Poznámka:

Aplikace s interním vstupem může stále přijímat provoz zvenčí, pokud je v nastavení HTTP trasy na úrovni prostředí označena jako cíl. Pro více informací viz Použít pravidlově založené směrování s Azure Container Apps.

Omezit aplikaci pouze na přístup do virtuální sítě

Běžným požadavkem je aplikace, ke které veřejný internet nemá přístup, ale virtuální stroje, privátní koncové body, peerované sítě a on-premises sítě připojené přes VPN nebo Azure ExpressRoute mohou dosáhnout. Tato konfigurace vyžaduje nastavení jak úrovně přístupnosti prostředí, tak viditelnosti vstupu aplikace.

  1. Vytvořte prostředí jako interní, aby prostředí nemělo žádný veřejný koncový bod. Izolace internetu vychází z tohoto nastavení a po vytvoření prostředí ji už nemůžete změnit. Pro více informací viz Používejte virtuální síť s 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. Nastavte vstup aplikace na externí, aby byla publikována v interním load balanceru prostředí a klienti ve virtuální síti ji mohli získat.

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

Interní vstup aplikací používejte pouze pro aplikace, které volají jiné kontejnerové aplikace ve stejném prostředí, například backendovou službu v mikroservisní aplikaci.

Typy protokolů

Container Apps podporuje dva protokoly pro příchozí přenos dat: HTTP a TCP.

HTTP

S povoleným HTTP vstupem má vaše kontejnerová aplikace:

  • Podpora ukončení protokolu TLS (Transport Layer Security)
  • Podpora pro HTTP/1.1 a HTTP/2
  • Podpora pro WebSocket a gRPC
  • Koncové body HTTPS, které vždy používají protokol TLS 1.2 nebo 1.3, se ukončí v bodě příchozího přenosu dat.
  • Koncové body, které zpřístupňují porty 80 (pro HTTP) a 443 (pro HTTPS)
    • Ve výchozím nastavení se požadavky HTTP na port 80 automaticky přesměrují na HTTPS na port 443.
  • Plně kvalifikovaný název domény (FQDN)
  • Časový limit požadavku je 240 sekund.

Záhlaví HTTP

HTTP vstup přidává hlavičky, které předávají metadata o požadavku klienta do vaší kontejnerové aplikace. Hlavička X-Forwarded-Proto se například používá k identifikaci protokolu, který klient použil pro připojení ke službě Container Apps. Následující tabulka uvádí hlavičky HTTP, které jsou relevantní pro vstupní provoz v Container Apps:

Hlavička Popis Hodnoty
X-Forwarded-Proto Protokol používaný klientem pro připojení ke službě Container Apps http nebo https. Tato hodnota se přepíše, pokud je odeslána klientem.
X-Forwarded-For IP adresy klienta nebo zprostředkujících proxy serverů, které požadavek odeslaly. IP adresy odesílatelů. Pokud je zadaný v počátečním požadavku, připojí se k němu. Azure Container Apps poskytuje pouze ip adresu úplně vpravo. Aby se zabránilo falšování identity PROTOKOLU IP, musí uživatel ověřit všechny ostatní hodnoty.
X-Forwarded-Client-Cert Klientský certifikát, pokud clientCertificateMode je nastavený. Seznam hodnot Hash, Cert a Chain oddělených středníkem. Například: Hash=....;Cert="...";Chain="...";. Tato hodnota se přepíše, pokud je odeslána klientem.

protokol TCP

Container Apps podporuje jiné protokoly založené na protokolu TCP než HTTP nebo HTTPS. Příchozí přenos dat TCP můžete například použít ke zpřístupnění kontejnerové aplikace, která používá Redis protokol.

Poznámka:

Externí příchozí přenos dat TCP se podporuje jenom pro prostředí Container Apps, která používají virtuální síť.

S povoleným příchozím přenosem dat TCP vaše aplikace kontejneru:

  • Je přístupný pro jiné kontejnerové aplikace ve stejném prostředí prostřednictvím názvu (definovaného vlastností name v prostředku Container Apps) a čísla otevřeného portu.
  • Je přístupná externě prostřednictvím plně kvalifikovaného názvu domény (FQDN) a vystaveného čísla portu, pokud je ingress nastaven na external.

Další porty TCP

Kromě hlavního portu HTTP/TCP pro vaše kontejnerové aplikace můžete vystavit další porty TCP, abyste umožnili aplikacím, které přijímají připojení TCP na více portech.

Poznámka:

Pokud chcete tuto funkci použít, musíte mít rozšíření rozhraní příkazového řádku pro aplikace typu kontejner. Spusťte az extension add -n containerapp , abyste nainstalovali nejnovější verzi rozšíření příkazového řádku pro kontejnerové aplikace.

Následující platí pro další porty TCP:

  • Více portů TCP může být externí jenom v případě, že je samotná aplikace nastavená jako externí a aplikace kontejneru používá virtuální síť.

  • Všechny externě vystavené nadbytečné porty TCP musí být jedinečné v celém prostředí Container Apps. To zahrnuje všechny externí další porty TCP, externí hlavní porty TCP a porty 80/443 používané integrovaným příchozím přenosem dat HTTP. Pokud jsou další porty interní, můžete stejný port sdílet mezi více aplikacemi.

  • Pokud není k dispozici vystavený port, výchozí vystavený port odpovídá cílovému portu.

  • Každý cílový port musí být jedinečný a stejný cílový port se nedá vystavit na různých vystavených portech.

  • Pro každou aplikaci je maximálně pět dalších portů. Pokud jsou vyžadovány další porty, otevřete žádost o podporu.

  • Pouze hlavní vstupní port podporuje integrované funkce HTTP, jako je CORS a spřažení relací. Při spouštění protokolu HTTP nad extra porty TCP se tyto integrované funkce nepodporují.

  • Číslo 36985 portu je vyhrazené pro interní kontroly stavu a není k dispozici pro aplikace TCP ani pro extra vystavené porty v aplikacích HTTP.

Další informace o povolení dalších portů najdete v tématu Konfigurace příchozího přenosu dat pro vaši aplikaci.

Názvy domén

K aplikaci se dostanete následujícími způsoby:

  • Výchozí plně kvalifikovaný název domény (FQDN): Každá aplikace v prostředí Container Apps se automaticky přiřadí plně kvalifikovaný název domény na základě přípony DNS (Domain Name System) prostředí. Tato přípona je určena proměnnouCONTAINER_APP_ENV_DNS_SUFFIX prostředí. Pokud chcete přizpůsobit příponu DNS prostředí, přečtěte si téma Vlastní přípona DNS prostředí.

  • Vlastní název domény: Můžete nakonfigurovat vlastní doménu DNS pro vaše prostředí Container Apps. Další informace naleznete v tématu Vlastní názvy domén a certifikáty.

  • Název aplikace: Název aplikace můžete použít ke komunikaci mezi aplikacemi ve stejném prostředí.

Pokud chcete získat plně kvalifikovaný název domény (FQDN) pro vaši aplikaci, viz téma Umístění aplikace kontejneru (FQDN).

Omezení IP adres

Container Apps podporuje omezení IP pro příchozí přenos dat. Můžete vytvořit pravidla pro konfiguraci IP adres, které mají povolený nebo zakázaný přístup k vaší aplikaci kontejneru. Další informace najdete v tématu Konfigurace omezení IP adres.

Ověřování

Azure Container Apps poskytuje integrované funkce ověřování a autorizace pro zabezpečení vaší kontejnerové aplikace s povoleným externím příchozím přístupem. Další informace najdete v tématu Authentication a authorization v Azure Container Apps.

Aplikaci můžete nakonfigurovat tak, aby podporovala klientské certifikáty (mTLS) pro ověřování a šifrování provozu. Další informace naleznete v tématu Konfigurace klientských certifikátů.

Podrobnosti o tom, jak používat šifrování sítě na úrovni prostředí peer-to-peer, najdete v tématu Konfigurace sítě.

Rozdělení provozu

Kontejnerové aplikace umožňují rozdělit příchozí provoz mezi aktivní revize. Když definujete pravidlo rozdělení, přiřadíte procenta příchozího provozu, aby směřovalo do různých revizí. Další informace najdete v tématu Rozdělení provozu.

Spřažení relací

Spřažení relací, také známé jako lepkavé relace, je funkce, která umožňuje směrovat všechny požadavky HTTP od klienta do stejné kopie aplikace v kontejneru. Tato funkce je užitečná pro stavové aplikace, které vyžadují konzistentní připojení ke stejné replice. Další informace naleznete v tématu afinitu relace.

Sdílení prostředků mezi různými zdroji (CORS - Cross-Origin Resource Sharing)

Ve výchozím nastavení jsou všechny požadavky provedené v prohlížeči ze stránky do domény, která neodpovídá původní doméně stránky, blokované. Abyste se vyhnuli tomuto omezení pro služby nasazené do Container Apps, můžete povolit sdílení prostředků mezi zdroji (CORS).

Další informace najdete v tématu Konfigurování CORS v Azure Container Apps.

Další kroky