Přeskočit obsah

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í:

  1. "Moje webová aplikace" bude nasazena do umístění / na HTTPS serveru
  2. "SeaCat Auth WebUI" bude nasazena do umístění /auth na HTTPS serveru
  3. "InfluxDB UI" bude nasazena do umístění /influxdb na HTTPS serveru

Podporované typy webových aplikací: