面对这个问题,如果我连接到web套接字服务的入口失败:在WebSocket握手过程中出错:意外响应代码: 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://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套接字服务创建入口?
发布于 2018-09-27 10:57:01
正如nginx-入口文档中所述,要代理WebSocket流量,您应该使用带有websocket服务名称的注释。别忘了用引号:
nginx.org/websocket-services: "service1[,service2,...]"在文档中的这个示例中,只为三个服务(ws-svc)中的一个启用了WebSocket:
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发布于 2019-01-01 03:40:29
尝试添加注释nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_token"
发布于 2018-09-26 14:51:54
您希望将nginx.org/websocket-services注释添加到入口资源定义中。这反过来又告诉nginx支持websockets (我认为这与升级/连接头有关?)。
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: 8183https://stackoverflow.com/questions/52514108
复制相似问题