Поддержка веб-сокета на контроллере входа Nginx - PullRequest
0 голосов
/ 19 октября 2018

Недавно я работал над игрушечным приложением, используя Kubernetes.Частью приложения является веб-сервер, который должен поддерживать WebSockets.В настоящее время я использую переадресацию портов для доступа к веб-серверу, и все работает отлично.

Я бы хотел переключиться на использование Ingress и IngressController, чтобы избежать использования переадресации портов.

Вот мой Ingress конфиг:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
  rules:
  - http:
      paths:
      - path: /app
        backend:
          serviceName: web-svc
          servicePort: 3030
      - path: /ws
        backend:
          serviceName: web-svc
          servicePort: 3030

Теперь доступ к приложению через $(minikube ip)/app работает просто отлично, но все запросы WebSocket не выполняются, потому что nginx возвращает 200, а не 101.

Я пытался добавить аннотацию nginx.org/websocket-services, но, похоже, она тоже не работает.

Кто-нибудь сталкивался с подобной ситуацией?

Приветствия

1 Ответ

0 голосов
/ 19 октября 2018

Из документов для входного контроллера nginx и для документов nginx вам, вероятно, понадобится нечто подобное в качестве аннотации для ваших Kubernetes Ingress:

nginx.ingress.kubernetes.io/configuration-snippet: |
   proxy_http_version 1.1;
   proxy_set_header Upgrade "websocket";
   proxy_set_header Connection "Upgrade";

Обратите внимание, что после добавления этой аннотации все ваши правила Ingress будут иметь этот фрагмент в блоке location в ваших конфигах nginx.Так что если вы хотите игнорировать это для других правил, вам придется создать отдельный Kubernetes Ingress.

...