Kubernetes Ingress: Как я могу открыть два порта на одном пути?

У меня настроен и работает gce ingress с SSL на порту 443. Я пытаюсь получить порт 28080, указывающий на мой автономный сервер actioncable: http://guides.rubyonrails.org/action_cable_overview.html#standalone

В настоящее время у меня есть следующее для моего ingress 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). Из того, что я прочитал, ingress не может обрабатывать 2 порта на одном пути. Как тогда люди подключают свои внешние устройства к websocket-серверам без разделения по пути?

0
задан 22 July 2018 в 10:36
2 ответа

Я думаю, что у вашей второй серверной службы отсутствует путь, если вы хотите использовать входящий трафик с одним хостом и двумя службами, вам следует добавить путь. См. входящий разветвитель , тогда ваш вход должен быть таким:

# 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

Вы должны указать путь, если хотите использовать тот же хост. Вы можете подключать внешние интерфейсы к серверам websocket без разделения по пути, используя другой хост. См. Документацию о том, как мы это делаем Ссылка

0
ответ дан 5 December 2019 в 05:33

Kubernetes Ingress: как открыть два порта на одном пути?

Как уже говорилось в комментариях Alioua, это невозможно. Я бы также сказал, что сопоставление одного пути с двумя разными номерами портов не имеет большого смысла с точки зрения логики входа.

То, что вы раскрываете извне, — это определенный путь URL-адреса http/https, поэтому единственными портами, открытыми извне, являются 80 и 443.

Входной путь относится ровно к одному серверному сервису, который предоставляет (внутренне с точки зрения кластера) ваше приложение (или, скорее, отдельный микросервис, из которого состоит ваше сложное приложение) на один порт.

0
ответ дан 7 May 2021 в 17:17

Теги

Похожие вопросы