KeyHub cluster (High availability)

Topicus KeyHub kan in een cluster draaien voor hoge beschikbaarheid. Voor de hoogste betrouwbaarheid dient dit cluster te bestaan uit een oneven aantal nodes met een minimum van 3. Een externe load balancer is nodig voor inkomend verkeer.

Voor een uitgebreide beschrijving van de KeyHub clustering raden wij aan om de handleiding goed door te nemen. 

In dit artikel zal een voorbeeld gegeven worden van de load balance configuratie met HAProxy.

High level design

Detail plaatje nodes

KeyHub poorten overzicht

443/tcp (Console): Endpoint voor de user interface.

50443/tcp (Appliance manager): Endpoint voor de appliance manager (beheer interface).

50022/tcp (ssh): SSH toegang en communicatie poort voor nodes onderling.

51871/udp (wireguard): Communicatiepoort voor de nodes onderling (Data).

Certificaten

Server certificate (per node): Alle nodes hebben een geldig certificaat nodig met een correct subject alternative name.

Root Certificate bundle (1st node & loadbalancer): Alle serveer certificates moeten door hetzelfde root certificate getekend worden. Dit root certificate moet ook aanwezig zijn in de loadbalancers voor de communicatie met de nodes.

KeyHub certificate (single node or loadbalancer): Er moet een geldig certificaat aanwezig zijn op de loadbalancer voor de communicatie met de eindgebruiker.

Allow Lists

KeyHub heeft 3 separate allow lists. Voor het management geldt deze voor een aantal standaard poorten. Voor de monitoring en backup zijn deze configureerbaar.

  • Management standaard 389/tcp, 50022/tcp, 50443/tcp
  • Backup geen standaard
  • Monitoringstandaard 9443/tcp

HAProxy config example

Onderstaande is een voorbeeld van de HAProxy config van een clustered setup met 3 nodes. De sticky sessions zijn nodig omdat in deze setup gebruik wordt gemaakt van round robin load balancing. De option httpchk leest de status op het endpoint op poort 9443. De status “up” is geeft http code 200 en de status “down” geeft http code 503. 

De HAProxy handelt in dit voorbeeld de SSL af. Het externe certificaat en key zijn gebundeld in keyhub.keyhub.local.crt op de frontend.

Alle nodes hebben hun eigen certificaat. Het trusted root certificate wordt opgegeven in de backend in dit voorbeeld rootCA.pem

haproxy.cfg

global
    tune.ssl.default-dh-param 2048

frontend  demo-keyhub
    bind :443 ssl crt /etc/haproxy/keyhub.keyhub.local.crt
    default_backend keyhub

backend keyhub
    http-request set-header X-Forwarded-For %[src]
    http-request set-header X-Forwarded-Proto https
    http-request set-header X-Forwarded-Port %[dst_port]
    option httpchk GET /health/ready HTTP/1.1\r\nHost:\ keyhub.keyhub.local
    balance roundrobin
    cookie JSESSIONID prefix nocache
    server tkh-node-01 tkh-node-01.keyhub.local:443 ssl verify required ca-file /etc/haproxy/rootCA.pem cookie tkh-node-01 check check-ssl port 9443
    server tkh-node-02 tkh-node-02.keyhub.local:443 ssl verify required ca-file /etc/haproxy/rootCA.pem cookie tkh-node-02 check check-ssl port 9443
    server tkh-node-03 tkh-node-03.keyhub.local:443 ssl verify required ca-file /etc/haproxy/rootCA.pem cookie tkh-node-03 check check-ssl port 9443

 

NOTE: Als SELinux aanstaat kan het nodig zijn om HAProxy toestemming te geven om meerdere uitgaande sessies te starten. Gebruik hiervoor het volgende commando:

sudo setsebool -P haproxy_connect_any 1