Вход в Kubernetes: Как я могу выставить два порта на одном пути?
У меня настроен вход gce, и я работаю с SSL на порте 443. Я пытаюсь получить порт 28080, указывающий на мой автономный сервер actioncable: http://guides.rubyonrails.org/action_cable_overview.html
В настоящее время у меня есть это для моего входа yaml:
# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gke-ingress
annotations:
kubernetes.io/ingress.class: "gce"
ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.allow-http: "false"
spec:
rules:
- host: example.com
http:
paths:
- path: /ws
backend:
serviceName: websocket
servicePort: 28080
tls:
- secretName: gkecert
hosts:
- example.com
backend:
serviceName: web
servicePort: 443
Если я установлю путь к / для службы websocket, он испортит корневой путь (ошибка 503). Из того, что я прочитал, вход не может обрабатывать 2 порта на одном пути. Как тогда люди подключают свои интерфейсы к серверам веб-сокетов без разделения по пути?
2 ответа
Я думаю, что ваш второй Backend сервис пропустил путь, если вы хотите использовать вход с одним хостом и двумя сервисами, вы должны добавить путь. Посмотрите на входной поток, ваш вход должен быть таким:
# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gke-ingress
annotations:
kubernetes.io/ingress.class: "gce"
ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: gkecert
hosts:
- example.com
rules:
- host: example.com
http:
paths:
- path: /ws
backend:
serviceName: websocket
servicePort: 28080
- path: /
backend:
serviceName: web
servicePort: 443
Вы должны указать путь, если хотите использовать тот же хост. Вы можете подключить внешние интерфейсы к серверам веб-сокетов без разделения по пути с использованием другого хоста. Смотрите документацию о том, как мы это делаем Ссылка
Kubernetes Ingress: как я могу открыть два порта на одном пути?
Как уже говорилось в комментариях Alioua , это невозможно. Я бы также сказал, что сопоставление одного пути с двумя разными номерами портов не имеет особого смысла с точки зренияingress
логика.
То, что вы выставляете наружу, — это некий конкретный путьhttp/https
URL, поэтому единственными портами, доступными извне, являются80
и443
.
Входpath
относится ровно к одному бэкэндуService
, который предоставляет (внутренне с точки зрения кластера) ваше приложение (или, скорее, один микросервис, из которого состоит ваше сложное приложение) на одномport
.