Балансировка нагрузки в Kubernetes реализуется на нескольких уровнях:
-
Service (на уровне Kube-proxy):
- Каждый Pod в Service получает уникальный IP-адрес.
- Kube-proxy, работающий на каждом узле, следит за изменениями в Service и EndpointSlice.
- Настраивает правила перенаправления трафика (iptables, ipvs) на кластерный IP-адрес Service.
- Трафик, поступающий на кластерный IP Service, распределяется между Pod'ами этого Service по выбранному алгоритму (по умолчанию Round Robin).
- Доступно два режима работы Kube-proxy: iptables (стандартный, основан на Linux netfilter) и ipvs (более производительный для больших кластеров, основан на Virtual Server API).
yaml
-
Ingress (на уровне L7):
- Работает как единая точка входа для внешней балансировки HTTP/S трафика.
- Необходим контроллер Ingress (например, Nginx Ingress Controller) для реализации правил.
- Направляет трафик на конкретный Service внутри кластера на основе пути URL, имени хоста и других правил L7.
- Позволяет реализовать различные стратегии балансировки, SSL termination, Name-based virtual hosting.
yaml