Использование socket.io в GKE с входом nginx - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь интегрировать socket.io в приложение, развернутое в Google Kubernetes Engine.Развивается локально, все отлично работает.Но после развертывания я постоянно получаю ужасный ответ 400, когда мои сокеты пытаются подключиться.Я искал на SO и других сайтах уже несколько дней, и я не нашел ничего, что решило бы мою проблему.

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

Вот наша настройка:

  • у нас есть 5 модулей приложений, которые обслуживают наше приложение и распределены по 5 облачным узлам (экземпляры GCE vm)

  • мы используем входной контроллер nginx (https://github.com/kubernetes/ingress-nginx) для создания балансировщика нагрузкичтобы распределить трафик между нашими узлами

Вот что я пробовал до сих пор:

  • добавляя следующие комментарии к входу:

nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-hash: "sha1" nginx.ingress.kubernetes.io/session-cookie-name: "route"

  • добавление sessionAffinity: ClientIP к бэкэнд-службе, на которую ссылается вход

Эти меры, похоже, не имели никакого значения, яЯ все еще получаю ответ 400. Если кто-то обрабатывал подобноеситуации или есть какие-либо советы, чтобы указать мне правильное направление, я был бы очень, очень благодарен!

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Я просто настроил ngin ingress с тем же конфигом, где мы используем socket.io.

вот мой входной конфиг

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: core-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/websocket-services : "app-test"
    nginx.ingress.kubernetes.io/rewrite-target: /
    certmanager.k8s.io/cluster-issuer: core-prod
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/websocket-services : "socket-service"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"

spec:
  tls:
  - hosts:
    - <domain>
    secretName: core-prod
  rules:
  - host: <domain>
    http:
      paths:
      - backend:
          serviceName: service-name
          servicePort: 80

Я также столкнулся с той же проблемой, поэтому добавил proxy-send-timeout и proxy-read-timeout.

0 голосов
/ 01 мая 2019

Полагаю, вы, вероятно, уже нашли ответ, но вам нужно добавить аннотацию к входу, чтобы указать, какая служба будет предоставлять обновления веб-сокетов.Это выглядит примерно так:

# web socket support
nginx.org/websocket-services: "(your-websocket-service)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...