После курса по Kubernetes собрал в домашней лаборатории кластер, приближенный к «взрослой» топологии: отказоустойчивый control plane, отдельный edge-узел с HAProxy, MetalLB для LoadBalancer-сервисов и NFS для persistent-томов. Всё крутится в виртуальных машинах на Proxmox.

Топология

Схема кластера: узлы и путь трафика

Слева (A) — состав кластера, справа (B) — путь внешнего запроса до приложения.

Узлы

УзелIPРоль
kube-ssh-gate-01192.168.1.180SSH-шлюз в сеть кластера
kube-edge-01192.168.1.181, 10.100.0.100Edge: HAProxy, вход трафика и балансировка API
kube-monitoring-01192.168.1.182Мониторинг
kube-master-01…0310.100.0.2–4Control plane (HA, 3 узла)
kube-minion-01…0310.100.0.5–7Worker-узлы: приложения + ingress-nginx
kube-nfs-0110.100.0.8NFS: persistent-хранилище

Сеть кластера (10.100.0.0/24) изолирована от домашней (192.168.1.0/24); наружу смотрят только edge, ssh-шлюз и мониторинг.

Путь запроса

  1. Клиент приходит на kube-edge-01 (HAProxy, 80/443) — TCP passthrough, без терминации TLS на границе;
  2. HAProxy балансирует на NodePort ingress-nginx воркеров (30080/32043);
  3. ingress-nginx терминирует TLS и маршрутизирует HTTP на сервис приложения (ClusterIP или LoadBalancer-IP от MetalLB);
  4. Под приложения при необходимости монтирует том с kube-nfs-01.

Тот же HAProxy балансирует и Kubernetes API между тремя мастерами — у control plane единая точка входа.

Компоненты

  • HAProxy (edge) — вход HTTP/HTTPS и балансировка API-сервера;
  • MetalLB — LoadBalancer-IP в bare-metal-окружении;
  • ingress-nginx — TLS-терминация и маршрутизация;
  • NFS — простое общее хранилище для стендов;
  • Отдельный SSH-шлюз — доступ администратора в изолированную сеть.

Что даёт лаборатория

Это стенд для практики: раскатка приложений Helm-чартами, эксперименты с отказами (выключение мастера или воркера — и наблюдение, как кластер переживает), обкатка манифестов и подходов до того, как что-то похожее встретится в работе.