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 }