LoadBalancer¶
Ein LoadbalancerInstance (LBI) ist ein logischer HAProxy-artiger LoadBalancer, der in Polycrate als erstklassiges ManagedObject verwaltet wird. Er gehört zu einer Organisation und einem Workspace, hat eine eigene öffentliche IP-Adresse aus der IPAM-Verwaltung und leitet Traffic auf einen oder mehrere Backend-Endpunkte um.
Polycrate modelliert:
- den logischen LoadBalancer (
LoadbalancerInstance), - die Regionen, in denen er deployt ist (
LoadbalancerRegion), - die tatsächlichen Deployments auf Kubernetes-Apps (
LoadbalancerInstanceDeployment).
Damit lässt sich ein LoadBalancer z. B. aktiv-aktiv in zwei PoPs betreiben, ohne dass die Applikation zwei unterschiedliche Zielobjekte in der API kennen muss.
Was ein LBI kann¶
| Feature | Beschreibung |
|---|---|
| Dedizierte öffentliche IP | FK auf einen IPAM-Eintrag; diese IP ist dem LBI fest zugeordnet |
| Mehrere Ports | JSON-Liste von Port-Mappings (Frontend-Port → Backend-Pool) |
| Freie Config | Zusätzliches HAProxy-/Config-Fragment als Text, das in das Rendering fließt |
| Endpoints | Generic-Relation auf Endpoint-Objekte, die den LBI nach außen probieren |
| Metriken | Bandbreite, Connections, HTTP-Responses — rollup-genau in VictoriaMetrics |
| Multi-Region-Deployment | Pro Region ein LoadbalancerInstanceDeployment, das auf eine K8sApp zeigt |
Modell-Übersicht¶
┌────────────────────────────┐
│ LoadbalancerInstance │
│ (Org + Workspace scoped) │
│ │
│ ip_address ──► IPAM │
│ ports (JSON) │
│ config (Text) │
│ │
│ metrics_data (rollups) │
└──────────────┬─────────────┘
│
│ 1..n
▼
┌────────────────────────────┐ ┌──────────┐
│ LoadbalancerInstanceDeploy │───────▶│ K8sApp │
│ (region: LoadbalancerRegion│ └──────────┘
│ app: K8sApp) │
└────────────────────────────┘
│
│
▼
┌───────────────┐
│ LoadbalancerRegion │
│ (z. B. fra, hel, fsn)
└───────────────┘
LoadbalancerRegion¶
Eine Region ist ein logisches Label (z. B. fsn, hel, ams), in das ein LBI deployt werden kann. Regionen werden systemweit gepflegt und dienen als Ziel für die Deployments eines LBI.
LoadbalancerInstanceDeployment¶
Für jede Region, in der der LBI aktiv ist, gibt es einen LoadbalancerInstanceDeployment-Eintrag, der auf die konkrete K8sApp zeigt, die diesen LoadBalancer auf dem Kubernetes-Cluster rendert. Dadurch ist klar:
- ein LBI — die Anwendersicht ("mein LoadBalancer lbi-prod-01"),
- n Deployments — die technische Sicht ("er läuft in fsn und hel").
Anlegen & Konfigurieren¶
In der UI:
- LoadBalancer → Neu (scoped auf Organisation + Workspace).
- IP-Adresse aus dem IPAM-Pool auswählen.
- Ports hinzufügen: pro Eintrag Frontend-Port, Protokoll, Backend-Pool.
- Optional freie Config hinzufügen — das Fragment wird beim Rendern des Blocks eingemischt.
- Deployments pro Region anlegen: pro Region eine
K8sAppangeben, auf der der LBI läuft. - Optional Endpoints anhängen, die den LBI von außen prüfen (ICMP, HTTP, TCP). Diese werden automatisch für die Zustandsermittlung des ManagedObjects herangezogen.
Über die API laufen dieselben Operationen über den Endpunkt-Pfad api/v1/loadbalancers/....
Metrik-Tabs im Detail-View¶
Ein LBI hat mehrere Metrik-Tabs, alle gespeist aus VictoriaMetrics-Rollups und — wo nötig — in Echtzeit pro Anfrage aggregiert:
| Tab | metric_function | Was es zeigt |
|---|---|---|
| Bandbreite | bandwidth | eingehende/ausgehende Bytes pro Sekunde, pro Port und Backend |
| Connections | connections | aktive und neue Verbindungen, inkl. Fehlschlägen |
| HTTP-Responses | http_responses | Statuscode-Verteilung (2xx/3xx/4xx/5xx) |
Alle drei Funktionen folgen der Standard-Metrik-Schnittstelle (GET /api/v1/loadbalancer/{id}/metrics/?function=...) und berücksichtigen auto-step für beliebige Zeiträume (siehe Metriken).
Endpoints für Health¶
Ein LBI sollte mindestens einen Endpoint tragen (z. B. HTTPS auf Port 443 gegen die öffentliche IP). Polycrate probiert diesen Endpoint über alle zuständigen Agents und Operatoren und leitet daraus den state des LBI ab:
- Alle Probes OK →
state=OK - Teilweise Fehler →
state=WARNING - Kritische Schwellen verletzt →
state=CRITICAL(löst eine Downtime aus)
Relation zur Infrastruktur¶
- Jede Region des LBI zeigt auf eine
K8sApp(Block-Action-Instanz auf einem Cluster). - Das eigentliche HAProxy-Rendering ist Aufgabe des entsprechenden Polycrate-Blocks und wird über den Operator ausgerollt. Polycrate verfolgt dabei den Installationszustand (installed_version) pro Deployment.
- IP-Adresse und Ports werden beim Deploy als Kubernetes-Service-Konfiguration umgesetzt.
Aktivitäts-Trail¶
Auf Organisation/Workspace-Ebene erscheinen Aktivitäten wie loadbalancerinstance_created, loadbalancerinstance_updated und loadbalancerinstance_deleted im Activity-Feed. Änderungen an ports und config werden eingecheckt und sind im Objekt-Log nachvollziehbar.
Verwandte Themen¶
- Endpoint-Monitoring — wie die Health-Probes eines LBI funktionieren.
- Metriken — welche Prometheus-Metriken ein LBI exportiert.
- Operator-Deployment — wie das Rendering in die Cluster kommt.