You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCE Ingress暴露WebSocket服务超时问题求助

GCE Ingress暴露WebSocket服务超时问题求助

大家好,我最近在使用GCE Ingress暴露Kubernetes集群里的服务时遇到了一个棘手的问题,想请各位帮忙排查下哪里配置出错了。

我的需求是暴露两个服务:

  • Web应用:通过example.com的80端口访问
  • WebSocket服务:通过example.com/app/ws的8000端口访问

下面是我当前的Kubernetes配置:

apiVersion: "v1"
kind: "Service"
metadata:
  name: "web-app-service"
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  type: "LoadBalancer"
  selector:
    app.kubernetes.io/instance: "web-app"
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
    name: "http"
---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "web-sockets-service"
spec:
  type: "NodePort"
  selector:
    app.kubernetes.io/instance: "web-sockets"
  ports:
  - protocol: "TCP"
    port: 8000
    targetPort: 8000
    name: "http"
---
apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata:
  name: "web-app-ingress"
  annotations:
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - host: "example.com"
    http:
      paths:
      - path: "/app/ws"
        pathType: "Prefix"
        backend:
          service:
            name: "web-sockets-service"
            port:
              number: 8000
      - path: "/"
        pathType: "Prefix"
        backend:
          service:
            name: "web-app-service"
            port:
              number: 80

目前的问题表现:

  • Web应用example.com可以正常访问,完全没问题
  • 但尝试连接WebSocket服务example.com/app/ws时,一直出现超时错误,不管用curl还是websocat都无法建立连接
  • 直接在集群内部(从其他Pod发起请求)调用WebSocket服务的IP是正常的,能成功建立连接并收到服务器响应,说明服务本身是没问题的,问题应该出在Ingress层面

我做了以下测试:

外部调用测试(超时)

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" example.com/app/ws:8000

结果:请求超时

集群内部调用测试(成功)

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" <web-sockets-service ip>/app/ws:8000

结果:成功收到WebSocket服务器的响应

Websocat测试

  • 内部调用(成功):
websocat ws://<web-sockets-service ip>:8000/app/ws

返回:

{"event":"connection_established","data":"{\"socket_id\":\"620572367.722478523\",\"activity_timeout\":30}"}
  • 外部通过Ingress调用(失败):
websocat ws://example.com:8000/app/ws

返回:

websocat: WebSocketError: I/O Failure
websocat: error running

我怀疑是不是GCE Ingress需要额外的注解来支持WebSocket的连接升级?或者我的Ingress路径配置有问题?希望有经验的朋友能帮我看看,谢谢!

备注:内容来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:08:00