Ответ
В DevOps я работаю с балансировщиками на разных уровнях. Приведу пример настройки Ingress-контроллера в Kubernetes (на примере Nginx Ingress) и конфигурации HAProxy для внутреннего трафика.
1. Балансировка на уровне Kubernetes (Nginx Ingress): Это стандартный подход для маршрутизации HTTP/HTTPS трафика к сервисам внутри кластера.
# ingress-resource.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/load-balance: "least_conn" # Алгоритм балансировки
spec:
ingressClassName: nginx
rules:
- host: app.mycompany.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
2. Балансировка TCP-трафика с HAProxy (например, для баз данных): Для внутренней балансировки, не проходящей через Ingress, часто используется HAProxy.
# /etc/haproxy/haproxy.cfg (фрагмент)
frontend db_frontend
bind *:5432
mode tcp
option tcplog
default_backend db_backend
backend db_backend
mode tcp
balance leastconn # Алгоритм "наименьшее количество соединений"
option tcp-check
server db1 10.0.1.10:5432 check maxconn 20
server db2 10.0.1.11:5432 check maxconn 20 backup
server db3 10.0.1.12:5432 check maxconn 20
listen stats
bind *:1936
mode http
stats enable
stats uri /
stats hide-version
stats auth admin:StrongPassword
Ключевые моменты из практики:
- Health Checks: Критически важны. В Kubernetes они задаются в
readinessProbeиlivenessProbeпода. В HAproxy — директиваcheck. - Алгоритмы: Выбор зависит от типа нагрузки.
roundrobin— по умолчанию,leastconn— для длительных соединений (БД, WebSocket). - Мониторинг: Всегда настраиваю сбор метрик (например,
haproxy_exporterдля Prometheus) по rate, latency и количеству активных бэкендов.