TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #161 113
Немного про балансировку с haproxy + ingress

Мы используем HAProxy для балансировки трафика на Ingress-ноды Kubernetes. В нашем случае нельзя использовать BGP вместе с MetalLB, поэтому делаем балансировку снаружи — через HAProxy.

Конфигурация HAProxy:

global
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 2048

defaults
log global
mode tcp
option tcplog
timeout connect 10s
timeout client 1m
timeout server 1m

frontend k8s_api_frontend
bind *:8080
default_backend k8s_api_backend

backend k8s_api_backend
balance roundrobin
server master-1 <ip>:6443 check
server master-2 <ip>:6443 check
server master-3 <ip>:6443 check

frontend k8s_http_node_port_frontends
bind *:80
default_backend k8s_http_node_port_backend

backend k8s_http_node_port_backend
mode http
balance roundrobin
server <ingress-1> <ip>:30080 check
frontend k8s_https_node_port_frontends
bind *:443
default_backend k8s_https_node_port_backend

backend k8s_https_node_port_backend
mode tcp
balance roundrobin
server ingress-1 <ip>:30081 check


В Kubernetes на ingress-ноды проброшены NodePort'ы: 30080 для HTTP и 30081 для HTTPS.
Обратите внимание на mode tcp на порту 443. Это необходимо, если вы хотите использовать TLS на уровне Ingress:
1. В mode http HAProxy ожидает видеть обычный HTTP-трафик (открытый текст).
2. Но если клиент подключается по HTTPS, он шлёт зашифрованный трафик, и HAProxy не сможет его прочитать.
3. Поэтому мы используем mode tcp, чтобы не трогать TLS-соединение, а просто прокинуть его до Ingress-контроллера, где оно и будет терминироваться.

Пример ingress:
apiVersion: v1
kind: Ingress
metadata:
name: <name>
spec:
ingressClassName: nginx
rules:
- host: <domain>
http:
paths:
- backend:
service:
name: <svc>
port:
number: 80
path: /
pathType: Prefix
tls:
- hosts:
- <domain>
secretName: tls-secret

Таким образом, DNS указывает на HAProxy, который на 443 порту просто прокидывает TLS до Ingress, где и происходит вся логика маршрутизации и терминации.

#haproxy #kubernetes #ingress
  • 👍 1
  • 🔥 1
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →