Alles anzeigenSoweit korrekt. Keepalived läuft auf der Node selber tatsächlich, konfiguriert / installiert per Ansible. Ich habe 3 Master. Die Worker Nodes sprechen immer lokal gegen einen HAProxy, der als Backends alle 3 API Endpunkte der Master hat.
Wenn jetzt Master 1 ausfällt, kratzt den Worker das nicht, weil er über den HAProxy immer noch mit den beiden anderen Mastern sprechen kann (loadbalanced API). Soweit zum Cluster internen Ablauf.
Externer Ablauf:
- Sowohl die IPv4 als auch die IPv6 werden über die Shellskripte umgeschaltet. Die IP Konfiguration ist in Keepalived hinterlegt, sodass nur der aktive Master auch wirklich die Floating IP auf dem Interface konfiguriert hat. In dem Moment wo ich keepalived beende, verschwindet auch die FloatingIP vom Interface, falls die Node Master war. Die Shellskripte prüfen jede Minute den Status von Keepalived und falls die Node Master ist, wird zusätzlich geprüft ob der Node die Floating IP zugewiesen ist. Falls nicht, wird diese zugewiesen. Dies trifft sowohl auf die Kubernetes API IP zu, als auch die Ingress IP über welche ich dann meine Seiten erreiche.
Bis auf die bereits erwähnten ca. 20 Sekunden fällt es mir nicht aktiv auf, wenn die IP rumgeschoben wird. Mein externes Monitoring prüft alle Seiten im 30 Sekundentakt und selbst dort ist es selten zu sehen. Mittlerweile hab ich auch in Icinga2 ein dynamisches Monitoring Skript für keepalived:
- prüfe ob Node master ist (keepalived status)
- Falls master. sind die FlaotingIPs auf dem Interface up
- Falls slave, Node sollte keine FloatingIP haben
Gruß
Hallo,
vielen Dank für die super Erklärung des HA Setup für die ControlPlane
aber wie macht ihr das mit Kubernetes LoadBalancern / Ingress im HA Umfeld?
wie kriege ich den Traffic von example.org auf meinem Frontend Service im Cluster?
Zeigt eure Frontend Domain dann per DNS auf die Failover IPv4? und die Master übernehmen das Routing per NGINX Ingress Controller? oder gebt ihr euch über BareMetal LoadBalancer wie MetalLB dann die Failover IP manuell?
Wie genau habt ihr das eingerichtet?
Es macht ja keinen Sinn einen speziellen Worker manuell anzusprechen per DNS von example.org, wenn ich HA haben will ![]()
Lieber Gruss