Nebula Elastic LoadBalancerin eli NELB:in voi ottaa käyttöön Cloud9:n hallinnasta tai vaihtoehtoisesti käyttäen NELB:in hallintaan tarkoitettu API-rajapintaa.

Cloud9 projekteilla on oletuksena rajattu 5 kpl NELB-kuormantasaajia ja 50 kpl SSL-sertifikaattiketjuja.
Rajojen nostoa voi tarvittaessa pyytää asiakaspalvelumme kautta.

NELB API on Swagger 2.0 yhteensopiva rajapinta, jonka spesifikaatio löytyy osoitteesta: https://nelb.fi-1.nebulacloud.fi/v1/swagger.yml
Autentikoinnissa käytetään samaa OpenStack Keystone Tokenia (OS_TOKEN), kuin OpenStackClient-komentorivityökalujen kanssa autentikoituessa.

Yleiset termit selitettynä

TermiSelitys
NELBNebula Elastic LoadBalancer -kuormantasauspalvelu
MemberKuormantasattava palvelin. Näitä on yleensä monta esim. WWW-palvelimen muodossa, joiden kuorma jaetaan palvelimien eli Memberien kesken tasaisesti.
ListenerKuormantasaajan kuuntelema portti, josta liikenne ohjataan Memberille.
Admin StateKuormantasaajan eli NELB:in “virtakatkaisin”.
HUOM! Tämä ei vaikuta laskutukseen.
Default PolicyNELB Listenereiden oletusasetukset.
Default CertificatesNELB Listenereiden oletussertifikaatit.
Listener PolicyYksittäisen Listenerin erilliset asetukset, jotka yliajavat oletusasetukset.
Listener CertificatesYksittäisen Listenerin erilliset sertifikaatit, jotka yliajavat oletussertifikaatit.
Member WeightYksittäisen Memberin painoarvo 0-256 välillä. 0 = Member on pois käytöstä.

NELB-kuormantasaus (Network -> Nebula Elastic LoadBalancer)

Uuden NELB:in voi luoda klikkaamalla ”Create Load Balancer” ja nimen määrityksen jälkeen ”Save changes”, jonka jälkeen NELB provisioituu projektille ja käynnistää automaattisen On-Demand laskutuksen.

Provisionnissa projektille varataan kahdennettu NELB-instanssi, joka sisältää yhden julkisen IPv4-osoitteen, yhden julkisen IPv6-osoitteen ja kaksi sisäistä IPv4-osoitetta, joista liikenne saapuu kohdepalvelimelle.

Sisäiset IP-osoitteet on sallittava instanssien palomuuriasetuksista (mm. Security Groupilla ja ohjelmistopalomuurista), jotta NELB voi liikennöidä Memberien kanssa.

NELB:in provisioiduttua se ilmestyy alla näkyvään listaan, josta sen asetuksia pääsee muokkaamaan joko klikkaamalla ”Edit load balancer” ja klikkaamalla sen nimestä Listener ja Member-määrityksiä varten.

Tässä esimerkissä NELB:in julkinen IPv4-osoite on 203.0.113.123, jonka voi määrittää esimerkiksi verkkotunnuksen DNS-tietueeseen.
Sisäiset IPv4-osoitteet ovat 233.252.0.100 ja 198.51.100.200, jotka on sallittava kohdepalvelimien päästä.
NELB:in julkiseen IP-osoitteeseen kohdistuva liikenne näkyy kuormantasatuille palvelimille näistä sisäisistä IPv4-osoitteista (yhteyden todellinen IP-osoite on mahdollista saada, ohjeessa alempana lisää asiasta).

NELB:in asetuksien kautta pystyy muun muassa asettamaan NELB:in inaktiiviseksi (Admin State), määrittämään kuormantasauksen tyypin ja tilan (Edit Default Policy) sekä liittämään MyNebulan kautta lisättyjä SSL-sertifikaatteja NELB:in SSL-purkua varten (Edit Default/Listener Certificates).

HUOM! NELB:in laskutus ei pysähdy vaikka sen asettaisi inaktiiviseksi. On-Demand laskutus perustuu projektille varattuihin resursseihin ja kapasiteettiin.

NELB:in oletuskonfiguraatio (Edit Default Policy)

Asetukset ja vaihtoehdot on selitetty tarkemmin kuvan alapuolella.

Default Policyn asetukset ja vaihtoehdot selitettynä:

  • Load Balancing Mode
    • TCP: Layer 4 kuormantasaus, jossa TCP-paketit ohjataan suoraan Memberille.
    • HTTP: Layer 7 kuormantasaus, jossa yhteys ohjataan Memberille samalla HTTP Headerit säilyttäen.
    • TCP-Proxy: Layer 7 yhteensopiva kuormantasaus, jolla on mahdollista kuljettaa mm. HTTP Headerit, myös salattuna.

      Tällä pystyy toteuttemaan mm. SSL-purun Memberillä NELB:in sijaan, mutta Memberin ohjelmiston on tuettava HAProxy Proxy Protocol -kommunikaatiota.
    • Load Balancing Method
      • Round-Robin: Tasaa yhteyksiä Memberin kuormituksen ja Weight-arvon perusteella.
      • Least Connections: Ohjaa yhteyden pienimällä kuormituksella olevalle Memberille.
      • Source IP Address: Ohjaa yhteyden samalle Memberille yhteyden avaajan IP-osoitteen perusteella.
        HUOM! Tämä ei ole sama asia, kuin ”Sticky session”. Tämä logiikka on toteutettava NELB:in ulkopuolella.
    • Inactivity Timeout
      • Aikakatkaisun pituus sekunneissa, kunnes avoin liikennöimätön yhteys katkaistaan.
    • Health Check Mode
      • TCP: Tarkistuksessa tarkistetaan Memberin portin vastaaminen.
      • HTTP: Tarkistuksessa tarkistetaan Memberin palauttama HTTP status code.
      • Health Checks Disabled: Kaikki Memberit ovat aina käytössä toimivuudesta riippumatta.
    • Health Check Interval
      • Tarkastuksien välinen viive sekunneissa.
    • Health Check Port
      • Tarkastukseen käytettävän TCP-portin numero. Mikäli tyhjä tai ”0”, tarkastuksessa käytetään Memberin porttia/portteja.
    • Health Check HTTP URI
      • HTTP GET pyynnöllä tehtävän tarkistuksen URI-osoite, jonka on vastattava HTTP 2XX/3XX normaalissa tilanteessa.
      • HUOM! Tämän arvon on oltava vähintään “/” vaikka Health Check ei olisi käytössä. Tyhjästä tai väärästä arvosta aiheutuu virhe asetuksia tallentaessa.
    • Health Check HTTP Host
      • HTTP GET pyynnössä käytettävä ”Host” header. Tämä voi olla hyödyllinen, mikäli tarkistus halutaan esimerkiksi ajaa tiettyyn sivustoon verkkotunnuksen/hostnamen perusteella.
    • Health Check Expect
      • HTTP GET pyynnön vastaanotetun datan (body) tarkistus, jossa kuormantasattu palvelin vastaa tietyn tekstin (string) tarkistuksen yhteydessä.
      • Mikäli tämä ei ole käytössä, Membereistä tarkistetaan vain HTTP 2XX/3XX vastausta eikä vastaanotetun datan sisältöä.
    • Health Check Expect Negate
      • Alemman määrityksen negaatio eli Memberille ei ohjata yhteyksiä, mikäli Memberin palauttama data (body) täsmää.
    • Health Check Expect String
      • Memberin HTTP GET pyynnön vastaanotettavan datan (body) täsmällinen arvo. Isot ja pienet kirjaimet on myös täsmättävä eli tarkistus on ns. Case-Sensitive.
        HUOM! Älä määritä tähän HTTP Headereita vastaanotettavan datan (body) lisäksi.

Create new Listener

Listeners-välilehdeltä voi määrittää Listenereitä eli ulospäin näkyviä portteja, joista yhteydet ohjataan Membereille.
Yksittäiselle Listenerille voi määrittää myös erillisen Listener Policyn, joka yliajaa Default Policyn määritykset.
Listener Policyä voi muokata sen jälkeen, kuten Listener on luotu (Edit Listener).
Listener Policyn voi poistaa valinnasta “Revert to Default Policy“.

Tässä esimerkiksi HTTP-yhteyksien ohjaamiseen tarkoitettu Listener, jolla NELB:in Julkinen IP-osoite vastaa portilla 80 (HTTP) ja ohjaa liikenteen Memberin porttiin 80 (HTTP). Porttien ei tarvitse olla samat Listenerin ja Memberin kesken.

Standardiporttien numerot löytyvät mm. täältä (https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)

Create new Member

Listenereitä varten tarvitaan myös Membereitä eli osoitteita, joihin NELB ohjaa liikenteen mikäli esim. Default Policyn tai Listener Policyn ehdot (Health Check) täyttyvät.

Memberiksi voi määrittää esimerkiksi suoraan instanssin sen Floating IP:n perusteella.
Member weight arvolla voi määrittää Memberin painoarvon suhteessa muihin Membereihin.
Mikäli arvo on sama kaikilla Membereillä, yhteydet ohjataan tasa-arvoisesti kaikkien Membereiden välillä.

HUOM! Varmista, että NELB:in Internal IP-osoitteet on sallittu kohteen päässä.

Voit myös vaihtoehtoisesti valita kohteeksi IP-osoitteen, johon yhteydet ohjataan. IP-osoitteeksi kelpaa myös muissa alustoissa ja palveluntarjoajilla sijaitsevat palvelimet.

Tämä määritys voi olla hyödyllinen silloin, kun IP-osoite siirtyy usein toiselle instanssille tai jos ympäristö halutaan toteuttaa automaattisesti skaalautuvaksi NELB:in kanssa.

HUOM! Varmista, että NELB:in Internal IP-osoitteet on sallittu kohteen päässä.

NELB-kuormantasaus SSL-suojauksella (HTTPS)

Vaihtoehto 1

  • Lisää SSL-sertifikaatti sopimuksellesi MyNebulasta käsin ja linkitä SSL-sertifikaatti tarvitsemaasi Cloud9 projektiin.
    Ohjeet tähän löytyvät tukikeskuksen sivulta MyNebula: SSL-sertifikaatit.
  • Varmista, että NELB:istä löytyy Listener, joka ohjaa Listener portin 443 liikenteen Memberin porttiin 80 (alempana esimerkki).
  • HUOM! Mikäli haluat HTTPS-yhteyden todellisen IP-osoitteen (“X-Forwarded-For” headerin), niin määritä Listener portti 443 Listener Policy erikseen Load Balacing Mode = HTTP -tilaan.
    Listener policy menee automaattisesti TCP-tilaan, kun Listenerille määrittää erikseen sertifikaatin.

  • Liitä projektille linkitetty SSL-sertifikaatti NELB:iin ja ota TLS/SSL käyttöön seuraavasti:
  1. Edit Load Balancer -> Listeners -> [Itse luomasi HTTPS listener] -> Edit Listener -> Edit Listener Certificates

2. Valitse “Certificate Bundles” otsikon alta käyttöön otettavat sertifikaatit. Tässä esimerkissä “myinstance01” on sertifikaatin Common Name (CN).

3. Määritä ”Enable Frontend TLS” tilaan ”True

4. Määritä “Enable Backend TLS” tilaan “False

5. Tallenna asetukset “Save changes” painikkeesta ja testaa suojattua yhteyttä NELB:in julkisen IP-osoitteen kautta.


Vaihtoehto 2

  • Asenna SSL-sertifikaatti (esim. Let’s Encrypt) kohdepalvelimiin (esim. Apache2 tai Nginx).
  • Konfiguroi kohdepalvelimet käsittelemään HAProxy Proxy Protocol -yhteyksiä.

Esimerkki Apache versiossa 2.4.31 ja uudemmissa (dokumentaatio)

RemoteIPProxyProtocol On
RemoteIPTrustedProxy 233.252.0.100 -> NELB:in sisäinen IPv4-osoite.
RemoteIPTrustedProxy 198.51.100.200 -> NELB:in toinen sisäinen IPv4-osoite.
RemoteIPProxyProtocolExceptions 127.0.0.1 ::1 -> Tähän listaan voi määrittää poikkeuksia, jolloin Proxy Protocol ei ole käytössä, niin yksittäisen instanssin sivuston toimivuuden voi testata suoraan instanssin IP-osoitteella.

Esimerkki Nginx versiossa 1.13.11 ja uudemmissa (dokumentaatio)

listen 443 ssl http2 proxy_protocol;
set_real_ip_from 233.252.0.100; -> NELB:in sisäinen IPv4-osoite.
set_real_ip_from 198.51.100.200; -> NELB:in toinen sisäinen IPv4-osoite.
real_ip_header proxy_protocol; -> HTTP Headerin NELB:in sisäinen IP-osoite korvataan todellisella IP-osoitteella.
  • Määritä NELB:in ”Load Balancing Mode” tilaan ”TLS-Proxy” ja määritä tarvittaessa esim. HTTP Health Check.

    Esimerkki NELB Default Policy HTTP ja HTTPS-yhteyksiä varten HTTP Health Checkin kanssa

Testaa yhteyksiä NELB:in julkisen IP-osoitteen (esimerkissä 203.0.113.123) kautta kohdepalvelimille (esimerkissä MyInstance01 [192.0.2.111] ja MyInstance02 [192.0.2.222]).

Kaikkien Membereiden toimivuutta voi testata esimerkiksi nostamalla yhden Memberin painoarvoa (Member weight) väliaikaisesti korkeammaksi.

Health Checkin toimivuus on myös hyvä testata esim. sammuttamalla Memberiltä kuormantasattu sovellus tai muuttamalla mahdollisen HTTP Health Checkin palauttamaa arvoa väliaikaisesti, mikäli “Except String” on käytössä.