Использование статического IP-адреса для входа / выхода в Kubernetes - PullRequest
2 голосов
/ 19 марта 2019

У меня есть программа, которую я пытаюсь запустить в кластере Kubernetes. Программа представляет собой сервер, который говорит по нестандартному протоколу на основе UDP. Протокол в основном состоит из коротких пар «запрос / ответ», аналогично DNS. Одним из основных отличий от DNS является то, что и «сервер», и «клиенты» могут отправлять запросы, т.е. сообщение может быть инициировано любой из сторон.

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

У меня вопрос, как я могу использовать Kubernetes для настройки сервера таким образом, чтобы

  1. Сервер принимает входящие UDP-сообщения на определенный IP-адрес.
  2. Реальные исходные IP-адреса клиента видны серверу.
  3. Любые ответы (или другие сообщения), отправляемые серверами, имеют тот же IP-адрес, что и их источник (чтобы клиенты их принимали).

Одна вещь, которую я попробовал, но она не работает, это настроить Service с type: LoadBalancer и externalTrafficPolicy: Local (последняя для сохранения исходных IP-адресов для требования 2). Эта настройка удовлетворяет требованиям 1 и 2 выше, но поскольку исходящие сообщения не проходят через балансировщик нагрузки, их исходный IP-адрес является адресом любого узла, на котором запущен модуль, содержащий сервер.

Я использую Kubernetes на облачной платформе Google (GKE).

1 Ответ

0 голосов
/ 20 марта 2019

Пожалуйста, проверьте решение, как описано в:1. Kubernetes .. ,c) IP-адрес источника для служб с Type = LoadBalancer - выставить развертывание как: - type = LoadBalancer - установить service.spec.externalTrafficPolicy: '{"spec": {"externalTrafficPolicy": "Local"}}'

Использование изображения, как описано в примере "echoserver", возвращает мой публичный адрес.

...