После прочтения множества статей и ссылки на некоторые форумы github (добавлены ссылки на статьи ниже). Я дошел до того, что моя реализация websocket начала работать после выполнения двух вещей. Я еще не уверен, если это правильный способ сделать это или нет. Я добился этого решения исключительно методом следа и ошибки. Поэтому я прошу всех, у кого есть хороший gr asp, любезно предложить, если есть лучший способ решить мою проблему. Всегда делай мои шаги со щепоткой соли.
- Установлен NGINX Контроллер входа по ссылке .
Как я использую Azure Kubernetes Services, я применил приведенный ниже документ из документа.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml
Затем я внес необходимые изменения в свою конфигурацию демонстрационного входа для своих служб.
Я узнал, что kubernetes.io/ingress.class: addon-http-application-routing аннотация не поддерживает веб-сокетирование. Итак, пришлось его отключить.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
# this one annotation is making the websocket work.
nginx.ingress.kubernetes.io/websocket-services: socketserver-svc
# this one I left as-is. And not playing any role for this websocket
# implementation to work
nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, OPTIONS"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-body-size: 10m
# I thought sticky session is also required for websocket to work. But seems
# this has no effect after I installed nginx ingress controller.
# so disabled all the below annotations also.
#nginx.org/websocket-services: socketserver-svc
#nginx.ingress.kubernetes.io/affinity: cookie
#nginx.ingress.kubernetes.io/affinity-mode: balanced
#nginx.ingress.kubernetes.io/session-cookie-samesite: Strict
#kubernetes.io/ingress.class: nginx
#kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: demosocket.com
- http:
paths:
- path: /ws
backend:
serviceName: socketserver-svc
servicePort: 80
Я пытался получить доступ через IP-адрес publi c. И я могу успешно отправлять и получать сообщения.
ws: //52.188.38.118/ws
Теперь, что, если я хочу, чтобы реализация веб-сокета работала без установки? NGINX Ingress Controller (указан на шаге 1) и вы хотите попробовать использовать входной контроллер по умолчанию, поставляемый с AKS / minikube. Ответ ниже.
Из вышеприведенных шагов
a) Избегайте шага 1: Установка NGINX Ingress Controller.
b) Только изменения, которые необходимо выполнить на входе ниже. Используйте приведенные ниже аннотации вместо аннотаций, указанных на шаге 2 во входном файле yaml. Все начнет работать.
# this annotation is making my web application also work if I plan to configure something in future.
nginx.ingress.kubernetes.io/ingress.class: nginx
# this one annotation is making the websocket work.
nginx.ingress.kubernetes.io/websocket-services: socketserver-svc
# by default ssl is true - as I am trying locally and want to disable ssl-# redirect. So set this to false.
nginx.ingress.kubernetes.io/ssl-redirect: "false"
# Below are just additional annotation to allow CORS etc.
nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, OPTIONS"
nginx.ingress.kubernetes.io/proxy-body-size: 10m
Ссылочные статьи:
https://medium.com/flant-com/comparing-ingress-controllers-for-kubernetes-9b397483b46b
https://kubernetes.github.io/ingress-nginx/deploy/#azure
Г-н. Комментарии dstrebel -> https://github.com/Azure/AKS/issues/768
Обычно я рекомендую просто установить Ingress Controller в кластере и не включать "http-application-routing", так как существует много ограничения к нему. Цель HTTP Application ROuting состояла в том, чтобы пользователи могли быстро настроить Ingress, но не для рабочих развертываний из-за ограничений конфигурации.
DenisBiondi c прокомментировал 2 октября 2018 г. -> https://github.com/Azure/AKS/issues/672
Я не уверен на 100%, поскольку не использую функцию маршрутизации приложений, но> думаю, что она не используется контроллер https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/websocket, а точнее https://github.com/kubernetes/ingress-nginx. В последнем случае я думаю, что включения схожести сеанса с файлами cookie может быть достаточно: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#session -affinity
В вашем случае вы используете неправильную аннотацию, которая не работает с маршрутизацией приложения входной контроллер под капотом.
Я приветствую предложения и лучшие практики.