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