在Kubernetes中实现WebSocket时出错

在Kubernetes中实现WebSocket时出错,kubernetes,websocket,socket.io,google-kubernetes-engine,Kubernetes,Websocket,Socket.io,Google Kubernetes Engine,我们正试图按照GCP文档“&”中给出的步骤在Kubernetes中实现WebSocket。但我们得到了“WebSocket握手时出错:意外响应代码:502” Error Message : “WebSocket connection to 'wss://..../backend-channeladaptor-web/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpec

我们正试图按照GCP文档“&”中给出的步骤在Kubernetes中实现WebSocket。但我们得到了“WebSocket握手时出错:意外响应代码:502”

Error Message : “WebSocket connection to 'wss://..../backend-channeladaptor-web/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpected response code: 502”.
我还附上了为gke实施创建的文件:

  • Backend-channeladapter-web.yaml

    apiVersion: cloud.google.com/v1beta1
    kind: BackendConfig
    metadata:
      name: backend-channeladaptor-web-backendconfig
    spec:
      timeoutSec: 3600
      connectionDraining:
        drainingTimeoutSec: 3600
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: backend-channeladaptor-web
      annotations:
        beta.cloud.google.com/backend-config: '{"ports": {"8081":"backend-channeladaptor-web-backendconfig"}}'
    spec:
      type: NodePort
      ports:
        - port: 8081
          targetPort: 11006
          protocol: TCP
          nodePort: 30078
          name: http
      selector:
        app: backend-channeladaptor-web
    
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: backend-channeladaptor-web
    spec:
      selector:
        matchLabels:
          app: backend-channeladaptor-web
      replicas: 1
      template:
        metadata:
          labels:
            app: backend-channeladaptor-web
        spec:
          containers:
            - image: gcr.io/acn-careful-granite-240620/backend-channeladaptor-web:0.2
              name: backend-channeladaptor-web
              ports:
               - name: http
                 containerPort: 11006
                 hostPort: 11006
              env:
                - name: NODE_ENV
                  value: dev
    
    • 部署内容

    • 服务内容

    • 后端配置内容
  • Converse-ingress.yaml(它还包含其他服务的详细信息,您可以忽略这些,后端ChannelAdapter web除外)

  • 逆向工程

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: converse-ingress
      annotations:
        kubernetes.io/ingress.global-static-ip-name: $Static-Ip-Name
        kubernetes.io/ingress.allow-http: "false"
    spec:
      tls:
      - secretName: $SSL-certificate
      rules:
      - host: $HostName
        http:
          paths:
          - path: /*
            backend:
              serviceName: frontend-chat-client
              servicePort: 3040
          - path: /socket-io/*
            backend:
              serviceName: backend-channeladaptor-engineerportal
              servicePort: 11009          
          - path: /login/*
            backend:
              serviceName: frontend-engineeringportal
              servicePort: 3021
          - path: /frontend-engineeringportal/*
            backend:
              serviceName: frontend-engineeringportal
              servicePort: 3021
          - path: /backend-channeladaptor-web/*
            backend:
              serviceName: backend-channeladaptor-web
              servicePort: 11006
    
    Backend-channeladapter-web.yaml

    apiVersion: cloud.google.com/v1beta1
    kind: BackendConfig
    metadata:
      name: backend-channeladaptor-web-backendconfig
    spec:
      timeoutSec: 3600
      connectionDraining:
        drainingTimeoutSec: 3600
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: backend-channeladaptor-web
      annotations:
        beta.cloud.google.com/backend-config: '{"ports": {"8081":"backend-channeladaptor-web-backendconfig"}}'
    spec:
      type: NodePort
      ports:
        - port: 8081
          targetPort: 11006
          protocol: TCP
          nodePort: 30078
          name: http
      selector:
        app: backend-channeladaptor-web
    
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: backend-channeladaptor-web
    spec:
      selector:
        matchLabels:
          app: backend-channeladaptor-web
      replicas: 1
      template:
        metadata:
          labels:
            app: backend-channeladaptor-web
        spec:
          containers:
            - image: gcr.io/acn-careful-granite-240620/backend-channeladaptor-web:0.2
              name: backend-channeladaptor-web
              ports:
               - name: http
                 containerPort: 11006
                 hostPort: 11006
              env:
                - name: NODE_ENV
                  value: dev
    

    我期望响应状态代码101,但得到502坏网关

    看起来您的入口的URI
    /backend channeladapter web/*
    指向服务
    backend channeladapter web
    ,并且期望服务在
    11006
    中侦听。但是,节点端口配置正在
    808中侦听1

    混淆可能来自
    targetPort
    指令,该指令指向实际后端(部署)中的
    11006

    这会导致502,这意味着尽管您正在到达中间层(在您的情况下是负载平衡器),但它无法到达后端(部署,由NodePort服务提供)


    您可以将入口定义改为指向
    8081
    ,与当前节点端口配置相匹配。

    https负载平衡器启动后,您是否获得502?@yyyyahir我们在该服务中添加了healthcheck,运行正常,即我们获得状态代码200,但当我们点击webSocket时,称其为502坏网关.Yes https负载平衡器已启动并运行fine1。我试图将“节点端口配置”更改为侦听11006“但同样的问题。2.我能够访问所有服务的运行状况检查,包括上述一项,只有websocket调用失败。运行状况检查独立于
    服务
    ,允许向
    部署
    发出请求<代码>运行在集群内安装吊舱并到达WS?或者将ing直接连接到pod中的网络空间,看看那里的一切是否运行良好?