kube-proxy является ключевым компонентом кластера Kubernetes. Он используется для балансировки нагрузки и пересылки данных между Service и его backend подами.
CCE поддерживает iptables и IP Virtual Server (IPVS) режимы пересылки.
Различия функций | iptables | IPVS |
|---|---|---|
Позиционирование | Зрелый, стабильный режим kube-proxy, но его производительность средняя. Он применяется в сценариях, когда количество Service небольшое (меньше 3000) или на клиенте происходит большое количество краткосрочных одновременных соединений. Подробнее см iptables. | Высокопроизводительный режим kube-proxy. Этот режим подходит для больших масштабов кластера или когда имеется большое количество Сервисов. Для получения подробностей см IPVS. |
Пропускная способность | Относительно низкая | Относительно высокая |
Сложность | O(n). n увеличивается с ростом количества Сервисов и backend pod'ов в кластере. | O(1). В большинстве случаев эффективность обработки соединений не зависит от масштаба кластера. |
Алгоритм балансировки нагрузки | iptables имеет только один алгоритм для случайного выбора. | IPVS использует несколько алгоритмов балансировки нагрузки, таких как round-robin, shortest expected delay, least connections и различные методы хеширования. |
Связность ClusterIP | Внутренний IP-адрес в кластере нельзя выполнить ping. | Внутренний IP-адрес в кластере можно пропинговать. NOTE: IP-адрес в кластерах версии v1.27 или новее нельзя пропинговать из‑за усиление безопасности. |
Дополнительные ограничения | Когда в кластере более 3000 Service, может возникнуть задержка сети. |
|
iptables
iptables — это функция ядра Linux для обработки и фильтрации большого количества пакетов данных. Она позволяет присоединять гибкие последовательности правил к различным хукам в конвейере обработки пакетов. Когда используется iptables, kube-proxy реализует NAT и балансировку нагрузки в хуке предварительной маршрутизации NAT. Для каждого Сервиса kube-proxy устанавливает правило iptables, которое захватывает трафик, предназначенный для ClusterIP и портов Сервиса, и перенаправляет трафик на один из backend pods. По умолчанию iptables случайным образом выбирает backend pod. Для подробностей см iptables proxy режим.
IPVS
IPVS построен поверх Netfilter и распределяет нагрузки транспортного уровня как часть ядра Linux. IPVS может перенаправлять запросы к сервисам на основе TCP или UDP к реальным серверам и делать сервисы реальных серверов видимыми как виртуальные сервисы на одном IP‑адресе.
В режиме IPVS kube-proxy использует балансировку нагрузки IPVS вместо iptables. IPVS предназначен для балансировки нагрузок большого количества Сервисов. Он имеет набор оптимизированных API и использует оптимизированные алгоритмы поиска вместо простого поиска правил в списке. Для подробностей см IPVS proxy режим.
- iptables
- IPVS