Я должен настроить FTP-сервер в кластере GCP Kubernetes и не знаю, как маршрутизировать клиентов, чтобы несколько запросов с одного и того же IP-адреса на разные порты направлялись к одному и тому же модулю Kubernetes.
В (пассивном) протоколе FTP сервер открывает новый порт и отправляет номер порта клиенту.Затем клиент создает новое соединение с этим портом.Следовательно, мне нужно убедиться, что второй запрос направляется к одному и тому же модулю, потому что только на этом модуле сервер ожидает нового подключения.
Я пробовал минимальный пример с рабочей нагрузкой из двух модулей, которые выполняютничего, и есть порты 21 и 30000-30098 выставлены.Затем я настроил службу типа LoadBalancer следующим образом (сокращено до соответствующих частей):
kind: Service
spec:
type: LoadBalancer
sessionAffinity: ClientIP
loadBalancerIP: IP_OF_LB
ports:
- name: ftp-control
port: 21
protocol: TCP
targetPort: 21
- name: pasv-30000
port: 30000
protocol: TCP
targetPort: 30000
# and so on for the remaining ports up to 30098
Теперь я подключаюсь к каждому из модулей с помощью оболочки и начинаю прослушивать вручную на одном порту какследует:
netcat -l -p 30001
Затем я использую telnet со своей рабочей станции для подключения к IP-адресу балансировщика нагрузки.
telnet IP_OF_LB 30001
Таким образом, я могу видеть, какой модуль получает входящийзапрос соединения.
Для одного порта балансировщик нагрузки всегда перенаправляет мой запрос на один и тот же модуль.
Однако, когда я пробую несколько портов, я вижу, что последующие запросы направляются на разныеpods, даже если для свойства сеанса установлено значение ClientIP
.
Есть ли какие-либо настройки, которые я пропустил?Я предполагаю, что сходство сеанса по IP-адресу клиента будет использовать только IP-адрес клиента для определения целевого модуля.Тем не менее, похоже, что он использует IP-адрес и порт.
Кто-нибудь знает, есть ли еще параметры, которые я могу попробовать получить желаемое поведение?