Teckids-Wiki

HAProxy

HAProxy ist ein TCP/HTTP-Loadbalancer.

Wir nutzen HAProxy um interne Dienste nach außen erreichbar zu machen, oder Requests auf mehrere Backends zu verteilen.

Konfiguration

Die gesamte Konfiguration wird von Ansible verwaltet. Änderungen müssen dort nachgezogen werden.

Backend

Modus

Ein Backend ist immer entweder im Modus http oder im Modus tcp:

mode http bzw. mode tcp

Der Modus des Front- und Backends muss übereinstimmen.

Server

Ein Backend kann einen oder mehrere Server haben:

server commu-intern 91.184.37.228:9191

Wenn das Backend mehrere Server hat, sollten diese mit Checking versehen werden, damit der HAProxy Requests nicht an defekte Backends routet:

    server rz-sp-virt-01 91.184.37.197:7480 check
    server rz-sp-virt-02 91.184.37.202:7480 check
    server rz-sp-virt-04 91.184.37.200:7480 check

Falls das Backend nur mit HTTPS erreichbar ist, muss auch das angegeben werden:

server monitoring 91.184.37.168:8889 check ssl verify none

Das verify none bedeutet, dass das Zeritifikat nicht geprüft wird. Wenn das nicht gew

Frontend

Modus

Ein Frontend ist immer entweder im Modus http oder im Modus tcp:

mode http bzw. mode tcp

Binds

Ein Frontend wird immer auf eine Kombination aus IP-Adresse und Port gebunden. Beispiel:

    bind 91.184.37.236:8448 name 91.184.37.236:8448
    bind 2a01:198:10:2800::14:8448 name 2a01:198:10:2800::14:8448

Der Name sollte immer der Kombination entsprechen.

Backends

Ein Frontend hat immer ein default-Backend:

default_backend my_backend

Gerade bei HTTP-Frontends ist es möglich, mehrere Backends zu haben. Beispiel:

    default_backend local_nginx

    # Backends
    use_backend foreman if { hdr(host) -i foreman.teckids.org }
    use_backend proxmox if { hdr(host) -i rz-sp-virt.teckids.org }
    use_backend ceph_dashboard if { hdr(host) -i ceph.teckids.org }

Hier wird anhand des Host-Headers entschieden, zu welchem Backend die Requests geroutet werden.

SSL

Bei HTTP-Frontends kann zusätzlich zum Bind noch ein SSL-Zertifikat angegeben werden:

    bind 91.184.37.167:443 ssl crt /var/lib/dehydrated/certs/s3.teckids.org/s3.teckids.org.pem
    bind 2a01:198:10:1e00::167:443 ssl crt /var/lib/dehydrated/certs/s3.teckids.org/s3.teckids.org.pem

SSL-Zertifikate werden per dehydrated verwaltet. Neue Domains müssen in /etc/dehydrated/domains.txt eingetragen werden. Auch diese Datei wird per Ansible verwaltet.

Um einen Redirect auf HTTPS zu forcieren muss die folgende Zeile ins Frontend geschrieben werden:

redirect scheme https code 301 if !{ ssl_fc }