Всем привет. При переносе мс-ов в кубер столкнулся с такой проблемой: nginx ingress (предположитеьно) рвет socket.io сессию с мс-ом на го.
Что происходит:
На домен k8s.my-domain.com приходит запрос на локейшн /socket.io/. Бэк этот запрос обрабатывает создает socket.io коннект, и отправляет назад на ингресс валидные данные (они отображаются на фронтовой страничке). но далее сокетные пинги не проходят и бэк говорит что таймаут при попытке отдать данные на ингресовый нджинкс. Почему происходит такая ситуаций, понять не могу. Если кто то сталкивался или знает в чем дело, подсобите пожалуйста
пробовал играть с Session Affinity на стороне бэка, одно что таймауты
ingress
вот этот
сокет ио
вот этот
Детализация:
ingress NodePort
конфигурация ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
metadata:
name: ms-frontend
namespace: awesomeNS
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/websocket-services: ms-backend
nginx.org/websocket-services: ms-backend
nginx.org/server-snippets: |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header HTTPS $https;
proxy_http_version 1.1;
proxy_read_timeout 600s;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
spec:
rules:
- host: k8s.my-domain.com
http:
paths:
- path: /
backend:
serviceName: ms-frontend
servicePort: 80
- path: /socket.io/
backend:
serviceName: ms-backend
servicePort: 4400
**Лог бэкэнда**:
{"level":"debug","ts":1613842562.1601045,"caller":"sioconnector/sioconnector.go:47","msg":"client connected:","id":"b"}
{"level":"debug","ts":1613842622.160182,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39470: i/o timeout"}
{"level":"debug","ts":1613842622.160477,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39470: i/o timeout"}
{"level":"debug","ts":1613842622.160499,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39470: i/o timeout"}
{"level":"debug","ts":1613842622.1605527,"caller":"sioconnector/sioconnector.go:56","msg":"client connected:","id":"b","reason":"client namespace disconnect"}
{"level":"debug","ts":1613842645.158182,"caller":"sioconnector/sioconnector.go:47","msg":"client connected:","id":"c"}
{"level":"debug","ts":1613842705.159041,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39598: i/o timeout"}
{"level":"debug","ts":1613842705.1603222,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39598: i/o timeout"}
{"level":"debug","ts":1613842705.160439,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39598: i/o timeout"}
{"level":"debug","ts":1613842705.1612012,"caller":"sioconnector/sioconnector.go:52","msg":"client error:","error":"write tcp 10.back-ip-address:4400->10.ingress-ip-address:39598: i/o timeout"}
{"level":"debug","ts":1613842705.1615343,"caller":"sioconnector/sioconnector.go:56","msg":"client connected:","id":"c","reason":"client namespace disconnect"}
конфигурация сервиса бэка:
Name: ms-backend
Namespace: awesomeNS
Labels: app.kubernetes.io/instance=ms-backend
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=ms-backend
app.kubernetes.io/version=1.0.1
helm.sh/chart=ms-backend-0.1.0
Annotations: meta.helm.sh/release-name: ms-backend
meta.helm.sh/release-namespace: default
Selector: app.kubernetes.io/instance=ms-backend,app.kubernetes.io/name=ms-backend
Type: NodePort
IP: 10.0.0.10
Port: http 4400/TCP
TargetPort: http/TCP
NodePort: http 30335/TCP
Endpoints: back-ip-address:4400
Session Affinity: ClientIP
External Traffic Policy: Cluster
Events: <none>