WebSocket握手:意外的响应代码:Kubernetes-ingress中的400 [英] WebSocket handshake: Unexpected response code: 400 in kubernetes-ingress

查看:464
本文介绍了WebSocket握手:意外的响应代码:Kubernetes-ingress中的400的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我要连接到用于Web套接字服务的入口,则会遇到此问题 失败:WebSocket握手期间出错:意外的响应代码:400

Facing this issue if I am connecting to ingress for web socket service failed: Error during WebSocket handshake: Unexpected response code: 400

入口YAML

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

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://some.domain.com/ws时,它正在显示 WebSocket握手期间出错:意外的响应代码:400

When I try to listen ws://some.domain.com/ws it's showing Error during WebSocket handshake: Unexpected response code: 400

/ws是路径

但是,如果去为LoadBalancer更新服务中的规范类型,它将生成一个IP 192.168.1.17:8183,并监听ws://192.168.1.17:8183/ws的工作情况,但我需要公开该URL使用入口,以便可以在网络外部使用.

But if go and update spec type in service to LoadBalancer, it'll generate an IP 192.168.1.17:8183 and listening to that ws://192.168.1.17:8183/ws its working but I need to expose the URL using ingress so it can be used outside of the network.

我将以下图片用于入口控制器:

I am using the following image for ingress controller:

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

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

How can I create ingress for a web-socket service?

推荐答案

nginx-ingress文档,要代理WebSocket通信,您应该使用带有websocket服务名称的注释.不要忘记使用引号:

As stated in the nginx-ingress documentation, to proxy WebSocket traffic you should use annotation with the name of websocket service. Don't forget to use quotes:

nginx.org/websocket-services: "service1[,service2,...]"

在此示例中,文档,仅对以下三种服务之一(ws-svc)启用WebSocket:

In this example from the documentation, WebSocket is enabled only for one of three services (ws-svc):

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

这篇关于WebSocket握手:意外的响应代码:Kubernetes-ingress中的400的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆