Kubernetes: Сохранение IP-адреса источника / Передача внешнего IP-адреса в качестве источника

Извините, если заголовок и теги немного расплывчаты, я пока не смог определить для него правильные термины. Посоветуйте, и я его изменю.

Я реализую STUN-сервер, заключенный в контейнер Docker, который размещен на Kubernetes Google Container Engine. В проекте используются балансировщики нагрузки (правила пересылки на GCE) для направления внешних запросов на соответствующие порты в модуле / контейнере

Я направил весь трафик, поступающий в eth0, на 2 виртуальных интерфейса (eth0: 1, eth0: 2) через:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 61214  -j DNAT --to-destination 172.26.0.6

(для полноты картины второй пункт назначения - 172.26.0.7)

Клиентское приложение без проблем доходит до него, и определение NAT продолжается. Однако это резко останавливается, когда серверу STUN необходимо создать сокет и установить обратную связь с клиентским приложением, поскольку полученный IP-адрес источника является внутренним IP-адресом экземпляра виртуальной машины хоста в Kubernetes (например, 10.128.0.4). Поскольку соединение не было установлено, время ожидания сокетов клиента и сервера истекло.

Есть ли способ сохранить фактический адрес источника до тех пор, пока он не достигнет моего серверного приложения? Я готов отказаться от текущей настройки, если мой запрос достигнет сервера и сервер сможет установить обратное соединение с клиентом.

Спасибо.

1
задан 8 May 2017 в 02:54
1 ответ

Я рад узнать, что это один из тех необычных случаев в наша работа, где решение существует и было предоставлено своевременно (т.е. только что перешло в бета-версию).

К сожалению, это специфично только для нашего контекста, т.е. Kubernetes поверх GCE / GKE. На момент написания этой статьи пользователям других платформ (например, AWS) потребуется использовать другие решения.

1
ответ дан 3 December 2019 в 23:31

Теги

Похожие вопросы