NGINX v ASAB Maestro¶
Technologie NGINX poskytuje:
- Schopnosti aplikační brány
- Vyvažování zátěže
- Průzkumník služeb
- Autorizaci pro další služby v clusteru
Servery¶
ASAB Maestro organizuje konfiguraci NGINX do následující struktury:
- HTTP server:
http, viz config - HTTPS server:
https, viz config - Interní HTTP server na portu tcp/8890:
internal, viz config - Upstreamy
Konfigurace NGINX v deskriptorech¶
Sekce nginx deskriptoru poskytuje informace o tom, jak očekává příslušná služba, že bude NGINX nakonfigurován.
To znamená, že specifikuje pravidla proxy přeposílání, která zpřístupňují API mikroslužby.
Příklad deskriptoru /Site/.../Descriptors/foobar.yaml:
define:
type: rc/descriptor
...
nginx:
api:
port: 5678
upstreams:
upstream-foobar-extra: 1234
https:
location = /_introspect:
- internal
- proxy_method POST
- proxy_pass http://{{UPSTREAM}}/introspect
- proxy_ignore_headers Cache-Control Expires Set-Cookie
location /subpath/api/foobar:
- rewrite ^/subpath/api/(.*) /$1 break
- proxy_pass http://upstream-foobar-extra
server:
- ssl_client_certificate shared/custom-certificate.pem
- ssl_verify_client optional
Konverze konfigurace NGINX do YAML
Konfigurace NGINX v ASAB Maestro je přeložena do YAML, aby mohla být zahrnuta v modelu nebo deskriptorech.
Následující úryvek konfigurace NGINX:
location /api/myapp {
rewrite ^/api/myapp/(.*) /myapp/$1 break;
proxy_pass http://my-server:8080;
}
se stane v souborech YAML ASAB Maestro:
location /api/myapp:
- rewrite ^/api/myapp/(.*) /myapp/$1 break
- proxy_pass http://my-server:8080
Podobně můžete přidat konfiguraci do bloku serveru:
server:
- ssl_client_certificate shared/lmio-receiver/client-ca-cert.pem
- ssl_verify_client optional
Sekce api¶
Sekce api umožňuje rychlé specifikování "hlavního" API služby.
Klíč port specifikuje TCP port, na kterém je API vystaveno službou.
Tato položka vygeneruje příslušné položky location a upstream.
Plná automatizace
Sekce api může být snadno jedinou sekcí v části nginx deskriptoru služby.
Sekce upstream¶
Definuje specifické upstreamy pro službu. Každá instance služby bude přidána do záznamu upstreamů v konfiguraci NGINX.
Navštivte dokumentaci Nginx, abyste se dozvěděli více o upstream direktivě.
Příklad:
nginx:
upstreams:
upstream-foobar: 1234
Služba foobar má publikované API na portu tcp/1234. Další záznam upstream je definován a pojmenován upstream-foobar.
Předpokládáme-li tři instance služby foobar na třech uzlech, výsledná konfigurace upstream je:
upstream upstream-foobar {
keepalive 32;
server server1:3081;
server server2:3081;
server server3:3081;
}
Pokročilé použití upstreamů
Můžete definovat upstream jako seznam pro přidání dalších konfiguračních možností.
Například SeaCat Auth, server pro autorizaci, vyžaduje, aby požadavky od jednoho uživatele během jedné relace byly odesílány na stejnou instanci služby. NGINX to může zajistit pomocí metody vyvažování ip_hash.
Zde je sekce deskriptoru definující upstreamy pro SeaCat Auth:
nginx:
upstreams:
upstream-seacat-auth-public:
- port 3081
- ip_hash
upstream-seacat-auth-private:
- port 8900
- ip_hash
Předpokládáme-li, že node1 a node2 jsou názvy uzlů v clusteru, výsledná konfigurace NGINX pro upstreamy bude:
upstream upstream-seacat-auth-public {
keepalive 32;
server node1:3081;
server node2:3081;
ip_hash;
}
upstream upstream-seacat-auth-private {
keepalive 32;
server node1:8900;
server node2:8900;
ip_hash;
}
V seznamu můžete specifikovat jakoukoli další konfiguraci, kterou chcete přidat do konfigurace upstream.
Direktiva port není přímo používána NGINX, ale zpracovává ji Maestro.
Konfigurace server je přidána pro každou instanci služby (v tomto případě SeaCat Auth) přítomnou v clusteru.
Konfigurace serveru¶
Další možnosti jsou implementovány pro každý server zvlášť (http, https, internal).
Dodatečné lokace mohou být specifikovány pro server.
Sekce location¶
Typicky, proxy konfigurace konkrétní komponenty nebo lokace staticky obsluhovaného obsahu.
Každá další lokace je přidána do konfigurace nginx jednou za službu, pokud není parametr INSTANCE_ID použit v hlavičce lokace. Pak je lokace zavedena pro každou instanci.
Sekce server¶
Konfigurace bloku serveru.
Konfigurace NGINX na úrovni modelu¶
Na úrovni modelu můžete specifikovat vlastní konfiguraci NGINX, která přepíše vygenerovanou konfiguraci.
V příkladu přidává extra sekce v model.yaml location "/my-special-location" na https server.
define:
type: rc/model
...
nginx:
https:
location /my-special-location:
- gzip_static on
- alias /webroot/lmio-webui/dist
Můžete také nastavit konfiguraci serveru a upstream. Možnost port v konfiguraci upstream není podporována v přepsání modelu.
Distribuce webových aplikací¶
Technologie NGINX slouží pro webové aplikace.
sherpa webapp-dist stahuje a instaluje webové aplikace definované v modelu.
Webové aplikace budou nasazeny (pokud je to potřeba) pokaždé, když je model aplikován (tj. je vydán příkaz "up").
Příklad model.yaml:
define:
type: rc/model
...
webapps:
/: Moje webová aplikace
/auth: SeaCat Auth WebUI
/influxdb: InfluxDB UI
...
Sekce webapps v modelu předepisuje nasazení tří webových aplikací:
- "Moje webová aplikace" bude nasazena do umístění
/na HTTPS serveru - "SeaCat Auth WebUI" bude nasazena do umístění
/authna HTTPS serveru - "InfluxDB UI" bude nasazena do umístění
/influxdbna HTTPS serveru
Podporované typy webových aplikací: