Advanced
Тема интерфейса

Сравнение iptables и IPVS

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

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, может возникнуть задержка сети.

  • Если вы используете один и тот же балансировщик нагрузки как для ingress, так и для Service в одном кластере, либо для портов Service в разных кластерах, вы не сможете получить доступ к ingress из узлов или контейнеров в кластере, а также к портам Service в других кластерах. Это происходит потому, что kube-proxy монтирует адрес LoadBalancer Service в мост ipvs-0, который перехватывает трафик балансировщика нагрузки. Используйте отдельные балансировщики нагрузки для этих ingress и 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 режим.