Облачная платформаAdvanced

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

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

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

  • Если у вас кластер на основе IPVS, kube-proxy монтирует адрес балансировщика нагрузки Service в мост ipvs-0, который будет перехватывать трафик из кластера к балансировщику нагрузки. В этом случае могут возникнуть следующие исключения доступа:
    • Если вы используете один и тот же балансировщик нагрузки как для входа LoadBalancer, так и для Service, мост ipvs-0 будет перехватывать трафик из кластера к входу и перенаправлять его к Service, что приводит к ошибке доступа.
    • Если вы используете один и тот же балансировщик нагрузки для Service в текущем кластере и Service в другом кластере, мост ipvs-0 будет перехватывать трафик к Service в другом кластере и перенаправлять его к Service в текущем кластере, что приводит к ошибке доступа.
    • Если для Service настроен диапазон прослушиваемых портов (например, диапазон портов 30000–30005), только порт (30000), указанный в spec.ports может быть доступен в кластере. Другие порты (30001–30005) недоступны, поскольку мост ipvs-0 перехватывает трафик.

    Вы можете выполнить операции в Настройка сквозной сети для Service типа LoadBalancer чтобы предотвратить перенаправление трафика балансировщика нагрузки Service из кластера kube-proxy.

iptables

iptables — это функция ядра Linux для обработки и фильтрации большого количества пакетов данных. Она позволяет гибко прикреплять последовательности правил к различным хукам в конвейере обработки пакетов. При использовании iptables kube-proxy реализует NAT и балансировку нагрузки в хуке NAT pre-routing. Для каждого Service kube-proxy устанавливает правило iptables, которое перехватывает трафик, направленный к ClusterIP и портам Service, и перенаправляет его к одному из backend‑подов. По умолчанию iptables случайным образом выбирает backend‑под. Подробнее см. iptables proxy mode.

IPVS

IPVS построен поверх Netfilter и балансирует нагрузки транспортного уровня в ядре Linux. IPVS может направлять запросы к сервисам на основе TCP или UDP к реальным серверам, делая сервисы реальных серверов выглядеть как виртуальные сервисы на едином IP‑адресе.

В режиме IPVS kube-proxy использует балансировку нагрузки IPVS вместо iptables. IPVS предназначен для балансировки нагрузки для большого количества Service. Он предоставляет набор оптимизированных API и использует оптимизированные алгоритмы поиска вместо простого перебора правил из списка. Подробнее см. IPVS proxy mode.