Рейтинг:0

SNAT-порт исходящего трафика Kubernetes

флаг ni

В настоящее время я использую Kubernetes с Calico v3.20.2 в качестве CNI. У меня есть очень уникальный случай, когда мне нужно отправить UDP-трафик из определенного модуля DaemonSet на внешний сервер, который прочитает комбинацию IP-заголовков sourceIP:sourcePort и отправит ответ, установив эти два поля в качестве полей destIP:destPort. Поскольку разные сеансы UDP будут случайным образом выбирать разные рандомизированные исходные порты (диапазон 1024-65535), а ответ должен быть сбалансирован по нагрузке через MetalLB, мне нужно будет настроить прослушиватель UDP на каждом модуле DaemonSet, прослушивая каждый исходящий запрос. исходный порт, а также перенастроить LB так, чтобы он прослушивал этот порт и распределял трафик.Это явно не масштабируется, а также неэффективно, учитывая задержку таких конфигураций, занимающую больше времени, чем необходимо для возврата ответа, а также потенциальные несоответствия параллельных реконфигураций LB.

Поэтому я бы предпочел открыть один прослушиватель для каждого модуля на определенном порту (например, 20000) и SNAT для всего исходящего трафика из каждого модуля, чтобы исходный порт после того, как каждая дейтаграмма UDP покидает узел, был 20000. Внешний сервер будет отправлять ответ на этот порт назначения, и ответ в конечном итоге достигнет одного из прослушивателей UDP в одном из модулей DaemonSet. Я попробовал это, реализовав

sudo iptables -t nat -I POSTROUTING 1 -d <EXT-SERVER-IP>/32 -p udp --dport <EXT-SERVER-PORT> -j SNAT --to-source <WORKER-NODE-IP>:20000

Когда я пытаюсь реализовать это в IPtables, Calico всегда переписывает внесенные мной изменения и применяет свою собственную конфигурацию, что приводит к тому, что рандомизированные исходные порты снова покидают узел. С другой стороны, когда я устанавливаю флаг natOutgoing в false и пытаюсь настроить свои собственные правила, только одна дейтаграмма UDP покидает узел с правильным изменением SNAT до того, как все остальные дейтаграммы будут заблокированы, и никогда не покидает рабочий узел в все (о чем свидетельствует внешний сервер, а также tcpdump на рабочем узле)

Исправление любого из этих случаев решит общую проблему, и любые предложения приветствуются!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.