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