最近我用Kubernetes开发了一个玩具应用程序。这个应用程序的一部分是需要支持WebSockets的Web服务器。目前,我使用端口转发访问Web服务器,一切正常。
我想切换到使用入口和入口控制器,以避免使用端口转发。
下面是我的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
注解,但似乎也不起作用。
有人遇到过类似的情况吗?
干杯
3条答案
按热度按时间t3irkdon1#
我使用的解决方案(请检查注解区域):
看来这个注解是免费版本的Ingress-NgInx所必需的。全文:https://www.civo.com/learn/using-websockets-with-ingress-controller
72qzrwbm2#
通过查看nginx入口控制器文档和nginx docs,您可能需要以下内容作为Kubernetes
Ingress
的注解:请注意,一旦添加了该注解,所有
Ingress
规则都将在nginx配置的location
块中包含该代码片段,因此,如果您想在其他规则中忽略它,则必须创建一个单独的KubernetesIngress
。编辑:
根据要点和Nginx入口文档,看起来这个注解修复了这个问题:📄, it seems like this annotation fixed the problem:
wwtsj6pe3#
他们为我工作。
他们似乎通过注解(example in docs)添加了支持:
我用telsocket测试了我的连接,telsocket是一个连接WS/WSS套接字的小工具。
有各种不同的客户端,这也可能有助于找到连接的罪魁祸首。
**重要提示:**有两个nginx入口控制器可用,更多信息here。
此答案仅限于nginxinc版本,与问题中使用的版本不同,接受的答案是目前唯一的解决方案。