У меня есть небольшой кластер Kubernetes on prem (Rancher 2.3.6), состоящий из трех узлов. Развертывания внутри кластера динамически предоставляются внешним приложением, и для их счетчика реплик всегда установлено значение 1, поскольку это приложения с состоянием и высокая доступность не требуется.
Приложения подвергаются действию inte rnet сервисами NodePort со случайным портом и ExternalTrafficPolicy, установленным в Cluster. Таким образом, если пользователь запрашивает один из трех узлов, прокси-сервер k8s направит и s-NAT запрос на правильный узел с модулем приложения.
К этому моменту все работает нормально.
Проблема началась, когда мы добавили приложения, которые полагаются на IP-адрес источника запросов. Поскольку s-NAT заменяет IP-адрес запроса внутренним IP-адресом, эти приложения не работают должным образом.
Я знаю, что установка служб ExternalTrafficPolicy на локальный режим не будет выполнять s-natting. Но это также нарушит архитектуру, потому что не у каждого модуля есть экземпляр запущенного приложения.
Есть ли способ сохранить исходный IP-адрес клиента и при этом использовать внутреннюю маршрутизацию, поэтому я не буду нужно беспокоиться о том, на каком узле будет получен запрос?