Принцип реализации kube-proxy, основного компонента Kubernetes.
Принцип реализации kube-proxy, основного компонента Kubernetes.

kube-proxy отвечает за обнаружение сервисов и балансировку нагрузки внутри кластера для Сервиса.

1 Введение

Понимание того, как работают различные сетевые компоненты, поможет вам правильно спроектировать и настроить их в соответствии с потребностями вашего приложения.

За сетью Kubernetes стоит компонент, который работает «за кулисами». Он преобразует ваши услуги в полезные сетевые правила. Этот компонент называется Kube-Proxy

В этой статье показано, как работает Kube-Proxy. Мы объясним процесс, который происходит при создании сервиса. И покажите несколько примеров правил, созданных Kube-Proxy.

2 Что такое Кубе-Прокси

Поды в Kubernetes являются временными и могут быть прекращены или перезапущены в любое время. Из-за такого поведения мы не можем полагаться на их IP-адреса, поскольку они постоянно меняются.

Это Service Где в игру вступают объекты. Службы предоставляют стабильный IP-адрес модулям для подключения к модулям. Каждая служба связана с набором модулей. Когда трафик достигает Сервиса, он перенаправляется на соответствующие серверные модули согласно правилам.

Как сопоставление «Служба с модулем» реализуется на сетевом уровне?

ЭтоKube-Proxyизделатьиспользовать。

Kube-Proxy установлен на каждый узел Прокси Kubernetes в формате . Он отслеживает изменения, связанные с объектами службы и их конечными точками. Эти изменения затем преобразуются в действующие сетевые правила внутри узла. Kube-Proxy обычно начинается с DaemonSet форма для запуска в кластере. Но его также можно установить непосредственно как процесс Linux на узле. В зависимости от типа установки кластера:

  • использовать kubeadm,Он установит Kube-Proxy как DaemonSetиз.
  • использоватьчиновникLinux двоичный архив тарбола Вручную установите компонент кластера, который будет запускаться непосредственно как процесс на узле.

3 Принцип работы

После установки Kube-Proxy он пройдет аутентификацию на сервере API. Когда новые службы или конечные точки добавляются или удаляются, сервер API передает эти изменения в Kube-Proxy.

Затем Kube-Proxy применяет эти изменения внутри узла как NAT правило. Эти правила NAT просто добавляют службу Сопоставление IP с Pod IP。

Когда трафик отправляется в Сервис, он будет перенаправлен на соответствующие серверные модули в соответствии с этими правилами.

Пример

Есть Сервис типа ClusterIP. SVC01。создай этоServiceчас,API Служить проверит наличие модулей, связанных с Сервисом. поэтому,Он будет искать функции сServiceиз label selector соответствие labels Стручки. позвони этим Pod01 и Pod02

Теперь APIServer создаст файл с именем endpoint из Аннотация. Каждая конечная точка представляет PodizIP. Сейчас существуют,SVC01и2ассоциации конечных точек,верно Должны ли мы Стручки. позвони этим EP01 и EP02

Теперь сервер API будет SVC01 IP-адрес сопоставлен с двумя IP-адресами EP01 и EP02

Все эти конфигурации в настоящее время являются лишь частью плоскости управления. Мы хотим, чтобы это сопоставление действительно работало в Интернете. После применения, чтобы SVC01 IP-трафик будет перенаправлен на EP01 или EP02

ЭтоKube-Proxyизпользовать. Разработчик API Служить будет рекламировать эти обновления в каждом узле Kube-Proxy. Затем Kube-Proxy применяет его к внутреннему устройству узла.

Теперь перейдите к SVC01. IP-трафик будет следовать за этим DNAT правило,и быть перенаправлены в Pods. пожалуйста, запомни,EP01иEP02 в основном даPodsизIP.

Конечно, я постарался максимально упростить сценарий. Это просто для того, чтобы сосредоточиться на важных частях Kube-Proxy. Однако есть несколько моментов, о которых стоит упомянуть:

  1. Serviceиendpointда IP и порт Маппинг, а не только даIP.
  2. существовать В примере,DNATПеревод происходитсуществовать исходный узел начальство. Это потому что мы используем ClusterIP Введите изService. Это причины, по которым ClusterIP никогда не маршрутизируется за пределы кластера. Доступ к нему возможен только изнутри кластера, поскольку по сути это внутренний NAT. Другими словами, никто за пределами кластера не знает этот IP-адрес.
  3. Еслииспользовать другие виды Сервиса, внутри узла существования устанавливаются иные правила. Они могут быть размещены отдельно, так называемое существование. chain середина. Хотя это выходит за рамки темы, цепочка машин Linux представляет собой группу машин. Они имеют определенный тип и должны следовать по пути в определенном порядке.
  4. Правило NAT случайным образом выбирает модуль. Однако такое поведение может зависеть от «модели» Kube-Proxy.

4 Режим Кубе-Прокси

Kube-Proxy может работать в разных режимах. Каждый режим определяет, как Kube-Proxy реализует упомянутые нами правила NAT. Так как каждая модель имеет свои преимущества и недостатки.

Режим пользовательского пространства 4.0

k8s v1.2 было устранено:

Прослушивайте порт в пользовательском пространстве прокси, все svcs передаются на этот порт, а затем пересылаются внутренним прикладным уровнем прокси. Прокси-сервер будет случайным образом прослушивать порт для каждого SVC и добавлять правило iptables.

От клиента до ClusterIP:Port Все сообщения пройдут iptables Правило перенаправляется на Proxy Port,Kube-Proxy После получения сообщения он передает его соответствующим Pod。

недостаток

В этом режиме пересылка трафика в основном осуществляется в пространстве пользователя, а запросы клиентов должны полагаться на iptables Правила поиска переписки Proxy Port,Потому что iptables существует пространство ядра,здесьиз Запрос будет сделан один раз отиспользоватьстатус домохозяйства=>Состояние ядра, а затем возврат=>использоватьстатус домохозяйстваизпроцесс передачи, В определенной степени снизить производительность службы.

kube-proxy в режиме пользовательского пространства по умолчанию выбирает бэкэнд с помощью циклического алгоритма.

4.1 Режим IPtables

Модель по умолчанию и в настоящее время является наиболее распространенной моделью использования. В этом режимеизKube-Proxyзависит отLinuxизхарактеристикаIPtables

iptables

Linux Один из наиболее часто используемых инструментов брандмауэра в IP Переадресация и простая функция балансировки нагрузки. на основе Linux в netfilter Реализация модуля ядра. Netfilter В существующий протокол были добавлены некоторые перехватчики, которые позволяют модулю ядра регистрировать функции обратного вызова через эти перехватчики, так что все данные, проходящие через перехватчики, будут обрабатываться функцией зарегистрированного существующего перехватчика ответа, включая изменение содержимого пакет данных, маркировка пакета данных или его отбрасывание пакетов данных и т. д. iptables Это программа, работающая в пользовательском режиме, через netlink иkerneliz netfilter Платформа достаточно гибкая, чтобы обрабатывать различные общие операции с пакетами и фильтровать их. Он позволяет прикреплять гибкие последовательности правил к различным перехватчикам в конвейере обработки пакетов ядра.

Netfilter да Linux 2.4.x Подсистема, представленная как общая абстрактная структура, предоставляющая полный набор hook Механизм управления функциями позволяет выполнять такие функции, как фильтрация пакетов, преобразование сетевых адресов (NAT) и отслеживание соединений в зависимости от типа протокола.

существовать kubernetes v1.2 после iptables Стать режимом прокси по умолчанию. В этом режиме kube-proxy. будет следить Kubernetes master верно Service вернослони Endpoints конечно, как из добавления и удаления. вернокаждый Сервис, он установит iptables правила, тем самым фиксируя Service из кластерIP (виртуальный IP) и порт и з запрос, который в свою очередь перенаправляет запрос на Service из группы backend Где-то выше. Поскольку пересылка потока выполняется ядром дасуществовать, производительность выше и надежнее.

IPtables действует как внутренний компонент обработки и фильтрации пакетов. Он проверяет изпоток машины Linux и обратно. Тогда он действительно соответствует определенным условиям, и пакет должен использовать определенное правило.

существоватьзапустить этомодельчас,Kube-Proxy вставляет правила Service to PodizNAT в IPtables. так,потоксуществовать Сменить целевой IP со Сервиса Преобразование IP в Pod Затем IP-адрес перенаправляется на соответствующие серверные модули.

Сейчас существующую роль Kube-Proxy можно охарактеризовать скорее как «установщик».

В этом режиме iptables Сделать использование статуса пользователя из входа, kube-proxy Только да продолжает следить Service а также Endpoints да, как из-за перемен, iptables Установив политику пересылки, вы можете напрямую VIP из Запрос пересылается на бэкэнд Pod,iptables использовать DNAT Для завершения пересылки он использует случайные числа для достижения балансировки нагрузки.

если kube-proxy существовать iptables Запуск под моделью и первым выбранным из Pod Если ответа нет, соединение не устанавливается. Это отличается от модели использования пользовательского пространства: В данном случае существует kube-proxy. будет обнаружен с первым Pod из Соединение не удалось, и будет автоматически использовать другие серверные части Pod Попробуйте еще раз.

недостаток

Эту модель сравнивают с userspace модель, преодолевает проблему повторной передачи запросов существуиспользовать из исходного состояния в состояние ядра, а производительность улучшена, но использовать iptables NAT Чтобы завершить пересылку, вы не должны игнорировать потерю производительности ИПП, iptables модель Основная проблемадасуществовать service Когда количество большое, будет произведено слишком много изчасов. iptables правило,Использовать Неинкрементальные обновления приведут к определенным задержкам.,В крупномасштабных ситуациях возникают очевидные проблемы с производительностью.

IPtables последовательно обходит свои таблицы. Потому что изначально он был разработан как компонент фильтрации пакетов. Этот последовательный алгоритм существования правил увеличивает время использования. существуем вне сцены,Это будет номер конечной точки службы. Глядя на это на низком уровне,Этот алгоритм будет работать с производительностью O(n). Это означает, что количество запросов увеличивается линейно по мере увеличения количества запросов.

также,IPtables не поддерживает определенные алгоритмы балансировки нагрузки. Он использует случайный метод распределения равной стоимости.,Как мы уже упоминали в первом примере существуютиз.

4.2 Режим ИПВС

Специально разработан для балансировки нагрузки и функциональности Linux.,Станьте идеальным выбором для Kube-Proxyиспользоватьиз. существует такая модель,Kube-Proxy вставляет правила в IPVS вместо IPtables.

IPVS имеет оптимизированный алгоритм поиска (хэш),Сложность O(1). Это означает, что независимо от того, сколько правил вставлено,Это почти всегда обеспечивает стабильную производительность.

В нашем случае это означает более эффективную обработку соединений для служб и конечных точек.

IPVS также поддерживает различные алгоритмы LB.,Например, опрос,Минимальное соединение и другие методы хеширования.

несмотря на свои преимущества,Но даIPVS может присутствовать не во всех системах Linux. По сравнению почти со всеми операционными системами Linux, имеющими IPtables.,IPVS, возможно, не является основной функциональностью всех систем Linux. еслитыиз Услуг не так уж и много,IPtables должен работать отлично.

4.3 Режим KernelSpace

Эта модель специфична для узлов Windows. существует эта модельсередина,Kube-proxyиспользоватьWindowsиз Virtual Filtering Platform (VFP) Вставить фильтрацию пакетов правило.Windows из VFP Точно так же, как изIPtablesиз работает в Linux, это означает, что эти правила также будут отвечать за перезапись инкапсуляции пакетов и замену IP-адреса назначения на внутренний PodizIP.

может быть VFP Думайте об этом как о первоначальном использовании расширения коммутатора Hyper-V для сетей виртуальных машин.

5 Как проверить режим Kube-Proxy

по умолчанию,Kube-Proxyсуществовать работает на порту 10249,и предоставить набор конечных точек,Вы можете запросить Kube-Proxyuse эти конечные точки для получения информации.

Вы можете использовать /proxyMode Проверка конечной точки модель kube-proxy.

Начните с подключения к одному узлу кластера через SSH. Затем используйте команду curl -v localhost:10249/proxyMode

можно увидетьKube-Proxyтолькосуществоватьиспользоватьiptablesмодель。

6. Проверьте правила IPtables службы ClusterIP.

Создайте ClusterIP Служить и установите флажок Создать неправильно.

Предпосылки:

  • Рабочий кластер Kubernetes (однонодовый и многоузловой)
  • Установлен Kubectl для подключения к кластеру и создания необходимых ресурсов.
  • существуют Мы проверим правила и включим SSH на ноде.
шаг

Сначала создайте развертывание Redis с двумя репликами.

Теперь давайте проверим созданные изPods.

Вы можете видеть, что у нас есть 2 положительных модуля, работающих из Pods, а также из IP-адреса.

Создайте службу, связанную с этими модулями. Для этого мы создаем Сервис с селектором, соответствующим тегу Pods.

В списке доступныхиспользовать Служить мы можем увидеть наши услуги Redis и их IP-адрес.

пожалуйста, обрати внимание,существовать YAML В листинге мы не указали тип Служить. Это да, потому что тип по умолчанию да ClusterIP。

  • сейчассуществовать,если мы перечисляем конечные точки,мы отправимсейчаснасиз Служить Есть дваинасиз Pod Следует использовать соответствующие конечные точки.

Вы заметите, что эти две конечные точки представляют Pod из IP адрес.

До сих пор вся эта конфигурация была довольно интуитивно понятной. Теперь давайте углубимся в магию под двигателем.

  • Мы перечислим один из узлов на из IPtables правило, обратите внимание, что сначала нужно. SSH Войдите в узел, чтобы выполнить следующие команды.

Конечно, мы не будем здесь вдаваться во все детали IPtables. Мы постараемся выделить только важную информацию о наших сценах.

Сначала давайте объясним нашуиз Параметры команды。“-t nat” да Мы хотим составить список типов. IPтаблицы Содержит несколько типов таблиц, верно в Kube-Proxy,этоиспользовать NAT поверхность. Это потому, что Kube-Proxy основнойиспользовать IPtables Приходите в службу перевода IP。

Помните, мы упоминали концепцию цепочки? здесь из “-L PREROUTING” Относится к названию сети в таблице изда. Это да IPtables По умолчанию цепь.Kube-Proxy хранится в существовании. Подключите в эту цепочку свои правила.

Короче говоря, здесь существуют, мы собираемся перечислить PREROUTING цепь nat правило.

Теперь перейдем к выводу команды. Самая важная часть вывода да KUBE-SERVICES ХОРОШО. Это да состоит из Kube-Proxy Создайте собственную цепочку для Служить. Вы заметите, что правило перенаправляет любой источник, любой пункт назначения и зпоток в эту цепочку.

Другими словами, через PREROUTING Цепная доставка пакетов будет направлена ​​на KUBE-SERVICES цепь.

Итак, давайте проверим это KUBE-SERVICES всодержание。

Что означает существование здесь изкриптода? Хм,Проще говоря,Эти другие да цепь.

верно Для нас это важно изда IP адрес.Вы заметите, что создается определенная цепочка, цель которой IP да Служитьиз ИП (10.99.231.137). Это означает, что поток Служитьизпоток попадет в цепь.

Вы также можете увидеть некоторую информацию справа от существующего IP-адреса. Они обозначают название Служить, тип Служить и порт.

Все это гарантирует, что мы просматриваем правильную часть IPtables. Теперь о существовании давайте разберемся в этой цепочке.

Наконец мы прибыли к нашему из NAT правило. Вы заметите, что создаются два дополнительных изцепья. Каждый начинается с. KUBE-SEP Начало, затем да случайное из ИДЕНТИФИКАТОР. Это верно должно соответствовать конечной точке «Служить» (SEP). Вы можете увидеть каждую сеть в списке. Pod из IP адрес.

См. эту линию в середине существования statistic mode random probability ? Это да IPtables существовать Pod Выполнение случайной балансировки нагрузки между правилом.

в эти KUBE-SEP цепьлюбой,нас可以看到этопо сутидаон DNAT правило.

Это Служитьиз правила IPtables Теперь, когда вы знаете, как копать глубже, вы можете начать изучать больше этих правил в своей среде.

7 FAQ

Являются ли прокси-серверы служб Kubernetes?

даиз,Kubernetes Сервисы во многом похожи на агентов.

Он обеспечивает стабильную IP, к которому могут подключаться клиенты ИП. получил IP на изпоток будет перенаправлен на серверную часть Pod из ИП. Это устраняет необходимость каждый раз воссоздавать Pod час Pod IP Измените проблему.

Может ли Kube-Proxy выполнять LB?

это зависит от Kube-Proxy из какой части:

  • Kube-Proxy Для самого агента ответ — нет. Кубе-Прокси Прокси-сервер не получает фактический трафик и не выполняет балансировку нагрузки. Этот агент создает правила Служить только на части плоскости управления.
  • Kube-Proxy Создавать по правилам, конечно же. Кубе-Прокси создаватьиспользовать Всуществоватьнесколько Pod балансировка нагрузки потока и з Служить правило. Pod да из копий друг друга и связанных с конкретным Служить

8 Заключение

Kube-Proxy даон Kubernetes Прокси, преобразовать определение в сетевое правило. узел бежать дальше и с API Служить связь с сервером для получения обновлений. Эти обновления затем производятся внутри узла с помощью Kube-Proxy наполнение.

Создавая эти правила, Kube-Proxy Разрешить пересылку сообщений, отправленных в Служитьизпоток, на правильный адрес.

Под. Это достигается Pod IP Отвязан от подключенного к нему клиента.

Об авторе: Технический эксперт и архитектор государственного предприятия в Шанхае, обладающий опытом в области исследований и разработок серверной части и архитектуры многих крупных производителей. Он отвечает за модульность и платформенные исследования и разработки чрезвычайно сложных бизнес-систем. Он имеет богатый опыт руководства командами, а также глубокий опыт выявления и обучения талантов.

ссылка:

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose