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

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

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

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

  • Если у вас кластер на основе IPVS, kube-proxy монтирует адрес балансировщика нагрузки Service в мост ipvs-0, который будет перехватывать трафик из кластера к балансировщику нагрузки. В этом случае могут возникнуть следующие исключения доступа:
    • Если вы используете один и тот же балансировщик нагрузки как для входящего LoadBalancer, так и для Service, мост ipvs-0 будет перехватывать трафик из кластера к ingress и перенаправлять его к Service, что приведёт к сбою доступа.
    • Если вы используете один и тот же балансировщик нагрузки для Service в текущем кластере и Service в другом кластере, мост ipvs-0 будет перехватывать трафик к Service в другом кластере и перенаправлять его к Service в текущем кластере, что приведёт к сбою доступа. Вы можете выполнить операции в Настройка проброса сети для службы LoadBalancer чтобы предотвратить перенаправление kube-proxy трафика балансировщика нагрузки службы из кластера

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.