Kubernetes入口Websockets连接问题

时间:2019-10-24 04:36:44

标签: kubernetes websocket nginx-ingress aws-elb

在带有KOPS的AWS上部署了k8。 我已经创建了nginx入口https://github.com/kubernetes/ingress-nginx Nginx入口控制器图像:quay.io/kubernetes入口控制器/ nginx入口控制器:0.18.0

一切正常,我可以使用由nginx服务创建的aws classic负载均衡器从外部访问应用程序。

最近,我们开始研究websocket。我在k8s中部署了服务,并尝试从外部进行访问。

我为我的应用程序创建了服务和入口。现在,Ingress指向的是loadbalancer(位于json文件下方)。

我在aws中创建了route53条目并尝试连接到该条目,但是当我尝试通过chrome浏览器从客户端应用程序进行连接时,却出现错误提示

  

与'wss://blockchain.aro/socket.io/?EIO = 3&transport = websocket'的WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400

我尝试创建应用程序负载平衡器,但无法连接到wss://<host>

错误:

  

WebSocket连接到   'wss://blockchain.aro/socket.io/?EIO = 3&transport = websocket'失败:   WebSocket握手期间出错:意外的响应代码:400

const config: SocketIoConfig = { url: 'wss://blockchain.aro',
  options: { autoConnect: false, transports: ['websocket']} };


Ingress:

   "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"extensions/v1beta1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{},\"name\":\"blockchain\",\"namespace\":\"adapt\"},\"spec\":{\"rules\":[{\"host\":\"blockchain.aro\",\"http\":{\"paths\":[{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/\"},{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/socket.io\"},{\"backend\":{\"serviceName\":\"blockchain\",\"servicePort\":8097},\"path\":\"/ws/\"}]}}],\"tls\":[{\"hosts\":[\"blockchain.aro\"],\"secretName\":\"blockchain-tls-secret\"}]}}\n",
      "nginx.ingress.kubernetes.io/proxy-read-timeout": "3600",
      "nginx.ingress.kubernetes.io/proxy-send-timeout": "3600"
    }

在入口文件中包含tlssecretnamerules。我尝试创建ApplicationLoadbalancer,但也无法与此建立联系。

1 个答案:

答案 0 :(得分:0)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/cluster-issuer: core-prod
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/websocket-services: core-service
    nginx.org/websocket-services: core-service
  name: core-ingress
spec:
  rules:
  - host: test.io
    http:
      paths:
      - backend:
          serviceName: core-service
          servicePort: 80
  tls:
  - hosts:
    - test.io
    secretName: core-prod