Komunikace mezi kontejnerovými aplikacemi v Azure Container Apps

Azure Container Apps poskytuje integrované zjišťování a směrování služeb, aby vaše kontejnerové aplikace mohly vzájemně komunikovat bez správy infrastruktury. Když do stejného prostředí nasadíte více kontejnerových aplikací, platforma automaticky zpracovává překlad DNS, vyrovnávání zatížení a zabezpečené směrování provozu.

Pokud je povolený ingres, získá každá kontejnerová aplikace název domény. Tento koncový bod můžete zpřístupnit veřejně nebo ho omezit na jiné kontejnerové aplikace ve stejném prostředí.

Kontejnerové aplikace se můžou vzájemně spojit prostřednictvím některé z těchto metod:

  • Plně kvalifikovaný název domény (FQDN): výchozí vygenerovaná doména
  • Název aplikace: krátká adresa http://<APP_NAME> pro interní volání
  • Vyvolání služby Dapr: přístup na principu vedlejšího procesu s integrovanými opakováními a pozorovatelností
  • Vlastní doména: Vlastní název domény se spravovaným certifikátem

Poznámka:

Když zavoláte jinou kontejnerovou aplikaci ve stejném prostředí s využitím plně kvalifikovaného názvu domény nebo názvu aplikace, síťový provoz nikdy neopustí prostředí.

Proč je to důležité

V architektuře mikroslužeb musí služby spolehlivě volat. Azure Container Apps eliminuje provozní zátěž při nastavování zjišťování služeb, správě záznamů DNS a konfiguraci reverzních proxy serverů.

Tady je, co za vás platforma zpracovává:

  • Automatická registrace DNS: Každá aplikace kontejneru získá přeložitelný název hostitele hned po nasazení.
  • Směrování spravované proxy serverem: Veškerý provoz mezi aplikacemi prochází integrovanou vrstvou proxy serveru Envoy, která zpracovává ukončení protokolu TLS, rozdělení provozu a vyrovnávání zatížení.
  • Izolace v rozsahu prostředí: Interní koncové body jsou dostupné pouze ze stejného prostředí a vytvářejí přirozenou hranici zabezpečení.
  • Flexibilita protokolu: Komunikace přes PROTOKOL HTTP/1.1, HTTP/2 (pro gRPC) nebo nezpracovaný tcp v závislosti na vašich potřebách úloh.

Tyto funkce znamenají, že se můžete soustředit na logiku aplikace, nikoli na síťové instalace.

Umístění aplikace kontejneru (FQDN)

Plně kvalifikovaný název domény každé aplikace kontejneru se skládá z názvu aplikace, jedinečného identifikátoru prostředí a oblasti. Všechny tyto fragmenty domény spadají do azurecontainerapps.io domény nejvyšší úrovně.

Plně kvalifikovaný název domény kontejnerové aplikace Azure Container Apps.

Externí a interní plně kvalifikované názvy domén

Nastavení viditelnosti příchozího přenosu dat určuje, jestli je vaše aplikace dostupná mimo prostředí:

Viditelnost Model plně kvalifikovaného názvu domény Dosažitelné z
Externí <APP_NAME>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Kdekoli (veřejný internet)
Interní <APP_NAME>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io Pouze stejné prostředí

Když nastavíte příchozí přenos dat na interní, plně kvalifikovaný název domény zahrnuje .internal. segment. Ostatní kontejnerové aplikace ve stejném prostředí se k aplikaci stále dostanou pomocí této adresy, ale požadavky mimo prostředí obdrží 404 odpověď z proxy serveru prostředí. Název DNS se přeloží na sdílenou IP adresu prostředí, ale proxy požadavek odmítne, protože aplikace je určená pouze pro interní použití.

Získání plně kvalifikovaného názvu domény

Příkaz az containerapp show vrátí plně kvalifikovaný název domény aplikace kontejneru.

az containerapp show \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <CONTAINER_APP_NAME> \
  --query properties.configuration.ingress.fqdn

V tomto příkladu nahraďte zástupné symboly ohraničené <> hodnotami.

Hodnota vrácená z tohoto příkazu se podobá názvu domény jako v následujícím příkladu:

myapp.happyhill-70162bb9.canadacentral.azurecontainerapps.io

Revizní popisky FQDN

Když přiřadíte popisky ke konkrétním revizím, každý popisek získá vlastní jedinečný plně kvalifikovaný název domény pomocí oddělovače se třemi pomlčkami.

<APP_NAME>---<LABEL>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

V případě interních aplikací model zahrnuje .internal. segment:

<APP_NAME>---<LABEL>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

FQDN popisků umožňují směřovat provoz přímo do konkrétní revize. Tento postup je užitečný pro testování nových verzí, spouštění experimentů A/B nebo poskytování stabilních koncových bodů pro konkrétní nasazení revizí.

Volání aplikace typu kontejner podle názvu

Nejjednodušší způsob, jak volat jinou aplikaci kontejneru ze stejného prostředí, je její název. Odešlete požadavek na http://<CONTAINER_APP_NAME>, a integrovaná služba DNS prostředí automaticky vyřeší název.

http://my-backend-api

Jak funguje řešení DNS

Na pozadí Azure Container Apps používá vlastní konfiguraci DNS, která překládá názvy aplikací kontejnerů na směrovatelné adresy. Když vaše aplikace odešle požadavek na jméno nebo plně kvalifikovaný název domény jiné aplikace:

  1. DNS server prostředí přeloží název hostitele na adresu proxy serveru Envoy.
  2. Proxy server Envoy identifikuje cílovou aplikaci z originálního hostitelského jména.
  3. Proxy server směruje požadavek na správné revize na základě vaší konfigurace provozu.

Tato architektura znamená, že kontejnerové aplikace nikdy nekomunikují přímo s pody jednotlivých kontejnerů. Veškerý provoz prochází přes vrstvu proxy serveru, která zajišťuje ukončení protokolu TLS, vyrovnávání zatížení a rozdělení provozu.

Návod

Pro volání mezi kontejnerovými aplikacemi ve stejném prostředí použijte krátký název aplikace (http://<APP_NAME>). Je jednodušší než úplný plně kvalifikovaný název domény a funguje stejně, protože DNS překládá oba vzory přes stejný proxy server.

Přenosové protokoly

Kontejnerové aplikace podporují tři režimy přenosu dat pro příchozí přenos nakonfigurované prostřednictvím vlastnosti transport.

Přeprava Případ použití Podrobnosti
Automaticky (výchozí) Standardní webová rozhraní API a služby Automaticky vyjednává o HTTP/1.1 a HTTP/2.
HTTP/2 služby gRPC Povolí end-to-end podporu HTTP/2, což je vyžadováno pro gRPC.
TCP Jiné protokoly než HTTP (databáze, vlastní protokoly) Nezpracovaná připojení TCP s mapováním portů

Poznámka:

Externí příchozí přenos dat TCP vyžaduje vlastní virtuální síť. Pokud se pokusíte vytvořit externí aplikaci TCP bez vlastní virtuální sítě, zobrazí se ContainerAppTcpRequiresVnet chyba. Interní příchozí přenos dat TCP funguje bez vlastní virtuální sítě.

Pokud používáte přenos TCP, můžete také vystavit další porty nad rámec primárního portu příchozího přenosu dat. Každý další port vytvoří samostatný koncový bod TCP, ke kterému se ostatní aplikace v prostředí můžou připojit.

Rozdělení síťového provozu a směrování revizí

Azure Container Apps podporuje tři režimy revizí, které ovlivňují způsob distribuce provozu mezi aplikacemi kontejnerů:

Mode Chování
Single Veškerý provoz přejde na nejnovější aktivní revizi.
Vícenásobný Provoz se rozdělí mezi jednotlivé revize podle procenta, v souladu s vašimi pravidly pro provoz.
Labels Každá revize s popiskem získá jedinečný plně kvalifikovaný název domény pro přímý přístup.

V režimu vícečetném, když jiná aplikace kontejneru volá plně kvalifikovaný název domény vaší aplikace, proxy automaticky distribuuje požadavky napříč revizemi podle vašich nakonfigurovaných váh. V režimu štítků můžou volající cílit na konkrétní revizi pomocí plně kvalifikovaného názvu domény štítku.

Další informace najdete viz Revize v Azure Container Apps.

Vyvolání služby Dapr

Dapr (Distributed Application Runtime) poskytuje přístup založený na vedlejším kontejneru ke komunikaci mezi aplikacemi. Povolením Dapr získávají vaše aplikace kontejnerů integrované vyvolání služby pomocí vzájemného protokolu TLS, automatického opakování a distribuovaného trasování prostřednictvím Azure Application Insights.

Diagram zobrazující umístění aplikace kontejneru Azure Container Apps s dapr.

Jak funguje vyvolání Dapr

Každá kontejnerová aplikace s podporou Dapr spouští pomocný proces společně s vaší aplikací. Pokud chcete volat jinou aplikaci s podporou Dapr, vytvořte místní požadavek HTTP na sajdkáru Dapr, který zpracovává zjišťování a směrování služby:

http://localhost:3500/v1.0/invoke/<DAPR_APP_ID>/method/<METHOD_NAME>

Pokud chcete například volat metodu catalog v aplikaci s ID order-processoraplikace Dapr:

http://localhost:3500/v1.0/invoke/order-processor/method/catalog

Sidecar překládá cílovou aplikaci přes vyhrazenou doménu DNS a směruje požadavek přes vrstvu proxy Envoy. Jedná se o stejnou infrastrukturu, která zpracovává směrování založené na plně kvalifikovaném názvu domény.

Poznámka:

Dapr používá vlastní cestu pro rozlišení DNS (.dapr doména), oddělenou od standardního rozlišování FQDN. Infrastruktura proxy v prostředí zajišťuje směrování obou cest.

ID aplikace Dapr

ID aplikace Dapr je identita, která ostatní aplikace používají k vyvolání vaší služby. Pokud explicitně nenastavíte ID aplikace, Dapr runtime použije výchozí název vaší kontejnerové aplikace. Rozhraní API ARM zobrazí appId: null, když nenakonfigurujete vlastní ID, ale modul runtime automaticky použije název aplikace. Pokud potřebujete jiný identifikátor, nastavte v konfiguraci Dapr vlastní ID aplikace.

ID aplikací Dapr musí být v rámci prostředí jedinečná. Pokud se pokusíte nasadit kontejnerovou aplikaci s ID aplikace Dapr, které už používá jiná aplikace, vytvoří se prostředek kontejnerové aplikace, ale jeho revizi se nepodaří zřídit (provisioningState: Failed). Chybová zpráva identifikuje konfliktní ID aplikace a aplikaci, která ji vlastní.

Aplikace jen pro dapr (bez příchozího přenosu dat HTTP)

Dapr můžete povolit v aplikaci kontejneru bez konfigurace příchozího přenosu dat HTTP. V tomto případě není aplikace dostupná prostřednictvím plně kvalifikovaného názvu domény nebo názvu aplikace, ale jiné aplikace s podporou Dapr ji stále můžou vyvolat prostřednictvím vyvolání služby Dapr. Tento model je užitečný pro pracovníky na pozadí nebo procesory událostí, které potřebují přijímat pouze volání z jiných služeb v síti.

Návod

Když vytvoříte aplikaci typu no-ingress s Azure CLI, vynecháte příznaky --ingress i --target-port. Vložení --target-port bez --ingress vede k chybě použití.

Konfigurace sajdkáru Dapr

Sajdkár Dapr nakonfigurujete prostřednictvím vlastností vaší aplikace kontejneru. Klíčová nastavení zahrnují:

Setting Description
appId ID aplikace Dapr (výchozí hodnota je název aplikace kontejneru)
appPort Port, na který vaše aplikace naslouchá (vrátí se k cílovému portu příchozího přenosu dat)
appProtocol Protokol pro komunikaci mezi Dapr a aplikací (například http, grpc)
logLevel Podrobnosti protokolu sajdkáru Dapr
enableApiLogging Jestli se mají protokolovat volání rozhraní DAPR API
httpMaxRequestSize Maximální velikost textu požadavku v MB pro server HTTP dapr
httpReadBufferSize Maximální velikost vyrovnávací paměti HTTP pro čtení v kB

Další informace o konfiguraci dapr s Azure Container Apps najdete v tématu Integrace Datapr s Azure Container Apps.

Zabezpečení komunikace mezi aplikacemi

Azure Container Apps obsahuje několik funkcí zabezpečení, které ovlivňují způsob komunikace aplikací typu kontejner:

  • Tls ve výchozím nastavení: Veškerý provoz mezi kontejnerovými aplikacemi směruje přes proxy server envoy, který zpracovává ukončení protokolu TLS. Nastavte allowInsecure na false (výchozí) pro vynucení přesměrování HTTPS.
  • Režim klientského certifikátu (mTLS):: Nakonfigurujte vzájemné tls nastavením režimu klientského certifikátu na require, acceptnebo ignore.
  • Omezení IP adres: Definujte pravidla povolení nebo zamítnutí, která omezují, které IP adresy se můžou spojit s vaší aplikací.
  • Zásady CORS: Konfigurujte pravidla sdílení prostředků mezi zdroji pro klienty využívající prohlížeč, kteří volají vaše kontejnerové aplikace.

Poznámka:

Když používáte vyvolání služby Dapr, sidecary Dapr automaticky zabezpečují komunikaci s vzájemným TLS mezi službami. Pro volání Dapr-to-Dapr nemusíte konfigurovat MTLS samostatně.

Další informace najdete v tématu Ingress v Azure Container Apps.

Vlastní domény

Vlastní názvy domén můžete mapovat na aplikaci kontejneru tak, že nakonfigurujete vlastní domény v nastavení příchozího přenosu dat. Každá vlastní doména může odkazovat na spravovaný nebo nahraný certifikát TLS.

Vlastní domény se registrují společně s výchozím FQDN, takže vaše aplikace odpovídá na obě adresy. Když se k vaší aplikaci potřebují dostat jiné aplikace typu kontejner, můžou použít buď výchozí plně kvalifikovaný název domény, název aplikace nebo vaši vlastní doménu.

Další informace najdete v tématu Custom domains in Azure Container Apps.

Ukázkové řešení

Ukázka znázorňující, jak volat mezi kontejnery pomocí plně kvalifikovaného názvu domény a Dapr, je k dispozici na Azure Samples.

Porozumění komunikaci mezi aplikacemi v Azure Container Apps je propojeno s několika souvisejícími tématy:

Další krok