首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSocket握手:意外响应代码: 400 in kubernetes-ingress

WebSocket握手:意外响应代码: 400 in kubernetes-ingress
EN

Stack Overflow用户
提问于 2018-09-26 09:14:24
回答 3查看 5.3K关注 0票数 6

面对这个问题,如果我连接到web套接字服务的入口失败:在WebSocket握手过程中出错:意外响应代码: 400

侵入YAML

代码语言:javascript
复制
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: websocket-producer-cdph
spec:
  rules:
    host: some.domain.com
      http:
        paths:
          path: "/"
          backend:
            serviceName: websocket-producer-cdph
            servicePort: 8183
status:
loadBalancer:
ingress:
{}

服务YAML

代码语言:javascript
复制
kind: Service
apiVersion: v1
metadata:
  name: websocket-producer-cdph
spec:
  ports:    
    name: ws
    protocol: TCP
    port: 8183
    targetPort: 8183
selector:
  app: websocket-producer-cdph
clusterIP: 10.100.254.99
type: ClusterIP
sessionAffinity: None
status:
loadBalancer:
{}

当我试图监听ws://ome.domain.com/ws时,它显示了WebSocket握手过程中的错误:意外响应代码: 400

/ws是路径

但是,如果go并向LoadBalancer更新服务中的规范类型,它将生成一个IP 192.168.1.17:8183,并监听它的工作状态://192.168.1.17:8183/ws,但我需要使用入口公开URL,以便它可以在网络之外使用。

我使用以下图像作为入口控制器:

quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0

如何为web套接字服务创建入口?

EN

回答 3

Stack Overflow用户

发布于 2018-09-27 10:57:01

正如nginx-入口文档中所述,要代理WebSocket流量,您应该使用带有websocket服务名称的注释。别忘了用引号:

代码语言:javascript
复制
nginx.org/websocket-services: "service1[,service2,...]"

文档中的这个示例中,只为三个服务(ws-svc)中的一个启用了WebSocket:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    nginx.org/websocket-services: "ws-svc"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80
      - path: /ws
        backend:
          serviceName: ws-svc
          servicePort: 8008
票数 6
EN

Stack Overflow用户

发布于 2019-01-01 03:40:29

尝试添加注释nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_token"

https://github.com/kubernetes/ingress-nginx/issues/2097

票数 1
EN

Stack Overflow用户

发布于 2018-09-26 14:51:54

您希望将nginx.org/websocket-services注释添加到入口资源定义中。这反过来又告诉nginx支持websockets (我认为这与升级/连接头有关?)。

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: websocket-producer-cdph
  annotations:
    nginx.org/websocket-services: "websocket-producer-cdph"
spec:
  rules:
  - host: some.domain.com
    http:
      paths:
      - path: /
        backend:
          serviceName: websocket-producer-cdph
          servicePort: 8183
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52514108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档