Zum Inhalt

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:

  1. LoadBalancer → Neu (scoped auf Organisation + Workspace).
  2. IP-Adresse aus dem IPAM-Pool auswählen.
  3. Ports hinzufügen: pro Eintrag Frontend-Port, Protokoll, Backend-Pool.
  4. Optional freie Config hinzufügen — das Fragment wird beim Rendern des Blocks eingemischt.
  5. Deployments pro Region anlegen: pro Region eine K8sApp angeben, auf der der LBI läuft.
  6. 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