Použití bran rozhraní API v mikroslužbách

Azure Application Gateway
Azure API Management

V architektuře mikroslužeb může klient pracovat s více než jednou front-endovou službou. Vzhledem k tomu, jak klient ví, jaké koncové body se mají volat? Co se stane, když se zavádějí nové služby nebo se refaktorují stávající služby? Jak služby zpracovávají ukončení protokolu SSL, ověřování a další obavy? Brána rozhraní API vám může pomoct tyto problémy vyřešit.

Diagram of an API gateway

Stáhněte si soubor aplikace Visio s touto architekturou.

Co je brána rozhraní API?

Brána rozhraní API se nachází mezi klienty a službami. Funguje jako reverzní proxy server a směruje požadavky klientů na služby. Může také provádět různé křížové úlohy, jako je ověřování, ukončení protokolu SSL a omezování rychlosti. Pokud bránu nenasazujete, klienti musí odesílat požadavky přímo do front-endových služeb. Existují však některé potenciální problémy s zveřejněním služeb přímo klientům:

  • Výsledkem může být složitý klientský kód. Klient musí sledovat více koncových bodů a zpracovávat chyby odolným způsobem.
  • Vytvoří spojení mezi klientem a back-endem. Klient potřebuje vědět, jak jsou jednotlivé služby rozložené. To znesnadňuje údržbu klienta a také znesnadňuje refaktoring služeb.
  • Jedna operace může vyžadovat volání více služeb. To může vést k několika síťovým odezvě mezi klientem a serverem a tím se zvýší významná latence.
  • Každá veřejná služba musí zpracovávat obavy, jako je ověřování, SSL a omezování rychlosti klientů.
  • Služby musí vystavit protokol, který je přívětivý pro klienta, jako je HTTP nebo WebSocket. Tím se omezí volba komunikačních protokolů.
  • Služby s veřejnými koncovými body představují potenciální prostor pro útoky a musí být posíleny.

Brána pomáhá tyto problémy řešit oddělením klientů od služeb. Brány můžou provádět řadu různých funkcí a nemusíte je potřebovat. Funkce je možné seskupit do následujících vzorů návrhu:

Směrování brány Bránu použijte jako reverzní proxy server ke směrování požadavků do jedné nebo více back-endových služeb pomocí směrování vrstvy 7. Brána poskytuje pro klienty jeden koncový bod a pomáhá oddělit klienty od služeb.

Agregace brány Pomocí brány můžete agregovat více jednotlivých požadavků do jednoho požadavku. Tento model platí, když jedna operace vyžaduje volání více back-endových služeb. Klient odešle bráně jeden požadavek. Brána odešle požadavky na různé back-endové služby a pak agreguje výsledky a odešle je zpět klientovi. To pomáhá snížit chattivost mezi klientem a back-endem.

Přesměrování zpracování brány Pomocí brány můžete přesměrovat funkce z jednotlivých služeb na bránu, zejména pokud jde o průřezové aspekty. Může být užitečné tyto funkce konsolidovat na jednom místě, místo aby každá služba byla zodpovědná za jejich implementaci. To platí zejména pro funkce, které vyžadují správné implementace specializovaných dovedností, jako je ověřování a autorizace.

Tady je několik příkladů funkcí, které je možné přesměrovat na bránu:

  • Ukončení protokolu SSL
  • Authentication
  • Seznam povolených IP adres nebo seznam blokovaných adres
  • Omezování rychlosti klienta (omezování)
  • Protokolování a monitorování
  • Ukládání odpovědí do mezipaměti
  • Brána firewall webových aplikací
  • Komprese GZIP
  • Údržba statického obsahu

Volba technologie brány

Tady jsou některé možnosti implementace brány rozhraní API ve vaší aplikaci.

  • Reverzní proxy server. Nginx a HAProxy jsou oblíbené reverzní proxy servery, které podporují funkce, jako je vyrovnávání zatížení, SSL a směrování vrstvy 7. Jsou to bezplatné opensourcové produkty s placenými edicemi, které poskytují další funkce a možnosti podpory. Nginx a HAProxy jsou vyspělé produkty s bohatými sadami funkcí a vysokým výkonem. Můžete je rozšířit o moduly třetích stran nebo psát vlastní skripty v Lua. Nginx také podporuje skriptovací modul založený na JavaScriptu, který se označuje jako NGINX JavaScript. Tento modul byl formálně pojmenován nginScript.

  • Kontroler příchozího přenosu dat sítě služby. Pokud používáte síť služeb, jako je Linkerd nebo Istio, zvažte funkce poskytované kontrolerem příchozího přenosu dat pro tuto síť služeb. Například kontroler příchozího přenosu dat Istio podporuje směrování vrstvy 7, přesměrování HTTP, opakování a další funkce.

  • Aplikace Azure Gateway. Application Gateway je spravovaná služba vyrovnávání zatížení, která může provádět směrování vrstvy 7 a ukončení protokolu SSL. Poskytuje také firewall webových aplikací (WAF).

  • Azure Front Door je moderní cloudová síť CDN (Cloud Content Delivery Network) od Microsoftu, která poskytuje rychlý, spolehlivý a zabezpečený přístup mezi uživateli a statickým a dynamickým webovým obsahem vašich aplikací po celém světě. Azure Front Door poskytuje váš obsah pomocí globální hraniční sítě Microsoftu se stovkami globálních a místních bodů přítomnosti (PoPs) distribuovaných po celém světě blízko podnikovým i koncovým uživatelům uživatelů.

  • Azure API Management. API Management je řešení na klíč pro publikování rozhraní API pro externí a interní zákazníky. Poskytuje funkce, které jsou užitečné pro správu veřejně přístupného rozhraní API, včetně omezování rychlosti, omezení IP adres a ověřování pomocí Microsoft Entra ID nebo jiných zprostředkovatelů identity. Služba API Management neprovádí žádné vyrovnávání zatížení, takže by se měla používat ve spojení s nástrojem pro vyrovnávání zatížení, jako je Application Gateway nebo reverzní proxy server. Informace o používání služby API Management se službou Application Gateway najdete v tématu Integrace služby API Management do interní virtuální sítě se službou Application Gateway.

Při výběru technologie brány zvažte následující:

Funkce. Výše uvedené možnosti podporují směrování vrstvy 7, ale podpora dalších funkcí se bude lišit. V závislosti na funkcích, které potřebujete, můžete nasadit více než jednu bránu.

Nasazení: Aplikace Azure Gateway a API Management jsou spravované služby. Nginx a HAProxy se obvykle spouštějí v kontejnerech uvnitř clusteru, ale dají se také nasadit na vyhrazené virtuální počítače mimo cluster. Tím se brána izoluje od zbytku úlohy, ale způsobuje vyšší režii na správu.

Správa. Když se služby aktualizují nebo přidají nové služby, možná bude potřeba aktualizovat pravidla směrování brány. Zvažte, jak se bude tento proces spravovat. Podobné aspekty se týkají správy certifikátů SSL, seznamů povolených IP adres a dalších aspektů konfigurace.

Nasazení Nginx nebo HAProxy do Kubernetes

Nginx nebo HAProxy můžete nasadit do Kubernetes jako replikační sadu nebo daemonSet, která určuje image kontejneru Nginx nebo HAProxy. Pomocí objektu ConfigMap uložte konfigurační soubor pro proxy server a připojte objekt ConfigMap jako svazek. Vytvořte službu typu LoadBalancer, která bránu zpřístupní prostřednictvím Azure Load Balanceru.

Alternativou je vytvoření kontroleru příchozího přenosu dat. Kontroler příchozího přenosu dat je prostředek Kubernetes, který nasazuje nástroj pro vyrovnávání zatížení nebo reverzní proxy server. Existuje několik implementací, včetně Nginx a HAProxy. Samostatný prostředek označovaný jako Příchozí přenos dat definuje nastavení kontroleru příchozího přenosu dat, jako jsou pravidla směrování a certifikáty TLS. Tímto způsobem nemusíte spravovat složité konfigurační soubory specifické pro konkrétní technologii proxy serveru.

Brána je potenciální kritický bod nebo kritický bod selhání v systému, takže vždy nasaďte aspoň dvě repliky pro zajištění vysoké dostupnosti. V závislosti na zatížení možná budete muset škálovat repliky dál.

Zvažte také spuštění brány na vyhrazené sadě uzlů v clusteru. Mezi výhody tohoto přístupu patří:

  • Izolace. Veškerý příchozí provoz směřuje do pevné sady uzlů, které je možné izolovat od back-endových služeb.

  • Stabilní konfigurace. Pokud je brána chybně nakonfigurovaná, může být celá aplikace nedostupná.

  • Výkon. Z důvodů výkonu můžete chtít pro bránu použít konkrétní konfiguraci virtuálního počítače.

Další kroky

Předchozí články se podívaly na rozhraní mezi mikroslužbami nebo mezi mikroslužbami a klientskými aplikacemi. Tato rozhraní záměrně zachází s každou službou jako neprůsedným rámečkem. Konkrétně by mikroslužby neměly nikdy zveřejňovat podrobnosti implementace o tom, jak spravují data. To má vliv na integritu dat a konzistenci dat, které jsme prozkoumali v dalším článku.