Чего я хотел бы избежать, так это настройки отдельного модуля, такого как HAProxy, который маршрутизируется для каждого порта.
Вам не нужно настраивать такой отдельный Pod.
Kubernetes Ingress по умолчанию не поддерживает сервисы TCP или UDP. Но, например, вход-nginx
контроллер предоставляет механизм для поддержки TCP или UDP на разных портах. Вы можете открыть порты TCP или UDP, изменив ConfigMaps.
По этой причине этот контроллер Ingress использует флаги «--tcp-services-configmap» и «--udp-services-configmap», чтобы указать на существующую карту конфигурации, где ключом является используемый внешний порт, а значение указывает сервис для предоставления с использованием формата:
<пространство имен/имя службы>:<порт службы>:[ПРОКСИ]:[ПРОКСИ]
Проверить дополнительную информацию здесь.
Такой ConfigMap уже должен быть доступен перед развертывание Ingress Controller.
Итак, попробуйте:
1. Создайте ConfigMap со следующей конфигурацией службы TCP.
$ cat вход-nginx-tcp.yml
апиВерсия: v1
вид: карта конфигурации
метаданные:
имя: вход-nginx-tcp
пространство имен: по умолчанию
данные:
"22": целевое пространство имен/целевая служба: 22
2. Направьте контроллер Ingress на эту ConfigMap с помощью --tcp-сервисы-configmap
флаг в конфигурации следующим образом:
$ kubectl получить развертывание ingress-nginx-controller -o yaml
apiVersion: приложения/v1
вид: развертывание
метаданные:
имя: входной-nginx-контроллер
пространство имен: по умолчанию
спецификация:
...
шаблон:
...
спецификация:
контейнеры:
- аргументы:
- /nginx-вход-контроллер
--tcp-services-configmap=$(POD_NAMESPACE)/вход-nginx-tcp
...
3. Откройте порт 22 в службе, определенной для Ingress, следующим образом:
$ kubectl получить svc ingress-nginx-controller -o yaml
апиВерсия: v1
вид: сервис
метаданные:
имя: входной-nginx-контроллер
пространство имен: по умолчанию
спецификация:
порты:
- имя: TCP-22
порт узла: 30957
порт: 22
протокол: TCP
целевой порт: 22
...
тип: LoadBalancer
...
Вы можете определить любое количество портов, которые могут быть открыты с помощью этого метода.
Есть еще один вариант для тех, кто использует диаграмма управления ingress-nginx. Большая часть конфигурации уже сделана, и вам просто нужно указать свои порты в TCP такой раздел:
TCP:
2222: "по умолчанию/пример-tcp-svc:22"
куда 2222
открытый порт и 22
является служебным портом.