HAProxy

Architektura warstwy HA: VIP + 3× HAProxy dla usług LXC oraz Kubernetes
flowchart LR
 subgraph External["External"]
        U["Users"]
  end
 subgraph LB["HA Layer"]
        VIP[("VIP")]
        HA1["HAProxy 1"]
        HA2["HAProxy 2"]
        HA3["HAProxy 3"]
  end
 subgraph CT["LXC"]
        CONSUL["Consul"]
        VAULT["Vault"]
  end
 subgraph K8S["Kubernetes"]
        T["Traefik"]
        M["K8S Masters"]
  end
 subgraph SERVICES["Services"]
    direction TB
        CT
        K8S
  end
    U == "<span style=paddK8S-left:><span style=paddK8S-left:>*.rachuna-net.pl</span></span>" ==> VIP
    VIP ==> HA1 & HA2 & HA3
    HA2 === n1["Small Circle"]
    HA1 === n1
    HA3 === n1
    n1 ==> CONSUL & VAULT & M & T

    n1@{ shape: sm-circ}
    style CT fill:#FFF9C4,color:#000000
    style K8S fill:#C8E6C9,color:#000000
    style n1 fill:#D50000,stroke:#D50000
    linkStyle 0 stroke:#AA00FF,fill:none
    linkStyle 1 stroke:#AA00FF,fill:none
    linkStyle 2 stroke:#AA00FF,fill:none
    linkStyle 3 stroke:#AA00FF,fill:none
    linkStyle 4 stroke:#AA00FF,fill:none
    linkStyle 5 stroke:#AA00FF,fill:none
    linkStyle 6 stroke:#AA00FF,fill:none
    linkStyle 7 stroke:#AA00FF,fill:none
    linkStyle 8 stroke:#AA00FF,fill:none
    linkStyle 9 stroke:#AA00FF,fill:none
    linkStyle 10 stroke:#AA00FF,fill:none

1. Architektura logiczna

Architektura składa się z następujących warstw:

  1. External – klienci (użytkownicy, aplikacje)

  2. HA Layer – VIP + trzy instancje HAProxy

  3. Services – docelowe backendy:

    • LXC: Consul, Vault
    • Kubernetes: Traefik, Masters (API)

2. Warstwa kliencka (External)

2.1. Opis

Warstwa kliencka obejmuje wszystkie podmioty inicjujące połączenia do usług domenowych.

2.2. Punkt wejścia

Użytkownicy łączą się do usług poprzez:

  • *.rachuna-net.pl → VIP

W praktyce oznacza to, że niezależnie od tego, czy celem jest Vault, Consul, aplikacje w K8S czy API Kubernetes, wejście jest spójne i scentralizowane.


3. Warstwa HA (VIP + HAProxy)

3.1. VIP (Virtual IP)

VIP stanowi logiczny adres wejściowy, którego zadaniem jest:

  • zapewnienie stałego endpointu dla DNS (A/AAAA),
  • umożliwienie failover pomiędzy instancjami HAProxy (VRRP/keepalived).

VIP nie realizuje routingu aplikacyjnego; jest jedynie mechanizmem przekierowania do aktywnej instancji warstwy LB.

3.2. HAProxy 1/2/3

Warstwa HA składa się z trzech instancji HAProxy, które zapewniają:

  • terminację lub transparentne przekazanie TLS (w zależności od modelu),
  • routing ruchu do odpowiednich backendów (LXC/K8S),
  • health-check backendów,
  • możliwość rozdzielania ruchu po portach (np. 443/8200/8501/6443) oraz po SNI/Host header.

W modelu z diagramu wszystkie instancje HAProxy są równorzędne, a warstwa HA działa jako „klaster” LB.


4. Warstwa usług (Services)

Warstwa usług jest zbiorem backendów pochodzących z dwóch niezależnych domen wykonawczych: LXC i Kubernetes.

4.1. LXC (Proxmox)

W warstwie LXC znajdują się usługi infrastrukturalne:

  • Consul – system koordynacji / storage backend (w zależności od wdrożeń),
  • Vault – system zarządzania sekretami i certyfikatami.

Warstwa HAProxy publikuje te usługi na zewnątrz zgodnie z polityką portów i nazw.

4.2. Kubernetes

W warstwie Kubernetes znajdują się kluczowe elementy komunikacyjne:

  • Traefik – Ingress Controller dla usług aplikacyjnych (HTTP/HTTPS),
  • Kubernetes Masters (API) – dostęp do kube-apiserver (typowo port 6443) dla administracji i automatyzacji klastra.

Warstwa HAProxy może:

  • kierować ruch HTTP/HTTPS (443) do Traefik,
  • kierować ruch TCP (6443) do API serverów masters.

5. Model routingu (abstrakcja „Service Router”)


6. Przepływy ruchu

6.1. Przepływ ogólny

  1. Klient inicjuje połączenie do *.rachuna-net.pl.

  2. DNS wskazuje na VIP.

  3. VIP kieruje ruch do jednej z instancji HAProxy.

  4. HAProxy, na podstawie portu i reguł routingu, przekazuje połączenie do właściwego backendu:

    • LXC: Vault/Consul,
    • K8S: Traefik lub API masters.

6.2. Przykładowe mapowania (typowe)

Usługa Warstwa Port wejściowy Backend
Vault UI/API LXC 8200 lub 443 Vault
Consul UI/API LXC 8501 lub 443 Consul
Aplikacje (Ingress) K8S 443 Traefik
Kubernetes API K8S 6443 Masters

Dokładne porty i tryb TLS zależą od przyjętego standardu publikacji (L4 passthrough vs TLS termination).


7. Wysoka dostępność i odporność na awarie

7.1. Eliminacja SPOF na wejściu

  • VIP zapewnia stały endpoint.
  • Trzy instancje HAProxy zapewniają redundancję.

7.2. Domena awarii

  • awaria pojedynczej instancji HAProxy nie powoduje niedostępności usług,
  • awaria pojedynczego backendu (np. Vault node / Traefik pod / master) może być maskowana przez load-balancing i health-checki, o ile backend jest zestawem replik.
Last modified December 19, 2025: docs: Update (72bba37)