【发布时间】:2019-03-23 19:57:18
【问题描述】:
最近我一直在使用 Kubernetes 开发一个玩具应用程序。该应用程序的一部分是需要支持 WebSockets 的 Web 服务器。目前,我正在使用端口转发来访问 Web 服务器,一切正常。
我想改用 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 注释,但这似乎也不起作用。
有没有人遇到过类似的情况?
干杯
【问题讨论】:
-
根据kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/… "对 websockets 的支持由 NGINX 开箱即用。无需特殊配置。"但我无法让它工作。由于两个 nginx 控制器,也很容易混淆。见nginx.com/blog/…
-
关于超时的引号对于较新的 k8s 版本似乎很重要
标签: nginx websocket kubernetes kubernetes-ingress nginx-ingress