【发布时间】:2020-05-16 12:49:45
【问题描述】:
我遇到了an article,它说 NGINX Ingress 从 1.3 版开始支持 websocket。但是this changelog 在 0.9 版本中提到了 websocket 文档。
我在 0.23.0 版本的 NGINX Ingress 上运行,我无法让 websocket 客户端连接工作。它失败是因为 Connection 标头是 keep-alive 而不是 upgrade。看起来入口正在改变它,因为如果我绕过入口并直接进入 Kubernetes 服务,连接就可以工作。在我走得更远之前,很高兴知道这对于我目前正在运行的 NGINX 版本是否毫无希望。
【问题讨论】:
-
ingress-nginx 0.23.0 封装了 nginx 1.15.9,所以 nginx 本身支持 websockets。我不确定您是否可以在没有特殊配置的情况下进行升级,但我相信专用 ws 服务器的
path应该可以工作 - gist.github.com/jsdevtom/… -
@cbarlock 以上信息有帮助吗?
-
谢谢马特。我不知道您上面提到的打包和版本控制。我找到了您引用的链接,并认为我的 Ingress YAML 定义设置正确。我正在使用 gorilla/websocket 包在 Go 中编写代码。我看到请求进来了,但 gorilla 拒绝了它,因为 Connection HTTP 标头设置为
keep-alive而不是upgrade。关于这个“特殊配置”,你能多说几句吗? -
NGINX Ingress 文档说您需要为那些支持 websockets 的服务添加注释。我加了:
nginx.org/websocket-services: tcs-bvt-eprouter-websocket并且有一个上面名字的服务。我希望 Ingress 会说“哦,一个 websocket。它需要连接标头为upgrade,但这似乎没有发生。 -
你成功了吗?
标签: nginx kubernetes websocket