K8S上的Websocket和socket.io,如何使其工作?

问题描述 投票:0回答:1

希望你一切都好

我在尝试在 Kubernetes 内的应用程序之间打开通信时遇到问题。目前客户端与服务器之间通过socket.io进行通信,但是当将其添加到kubernetes时,我遇到以下问题:服务器和客户端连接,我可以从服务器日志中知道它们是这样做的,但没有发生事件交换!

我在互联网上到处搜索,但我找到的解决方案是针对GKE的,并且我正在运行由kubeadm创建的集群,因此它们不可用。有没有人经历过类似的事情?

我可以问的一些问题:

  • Server pod 正常运行,通过 ingress 响应 http 请求
  • 我正在使用 ingress-nginx v1.10.0 来公开我的服务
  • 我的应用程序是:用 Angular 制作客户端,用 Spring boot 制作服务器,通过 socket.io 进行通信。
  • 服务和部署清单声明中没有什么特别的,只是其工作的基础知识。
  • 我的入口清单:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dpiot
  annotations:
    #nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/websocket-services: dpiot-back-service
spec:
  ingressClassName: nginx
  rules:
  - host: dpiotfront.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dpiot-front-service
            port:
              number: 80
      - path: /socket.io/
        pathType: ImplementationSpecific
        backend:
          service:
            name: dpiot-back-service
            port:
              number: 80

我已经搜索了多个小时但没有结果,我已经没有选择了,如果有人可以帮助我,我将非常感激。您需要任何其他信息,请询问!

集群信息:

Kubernetes版本:1.29.0 使用的云:裸机 安装方法:kubeadm 主机操作系统:CentOS 7 CNI 和版本:Calico CRI 和版本:Containerd

kubernetes websocket socket.io kubernetes-ingress nginx-ingress
1个回答
0
投票

您需要将类似的内容添加到您的 Kubernetes Ingress 配置中:

nginx.ingress.kubernetes.io/configuration-snippet: |
   proxy_http_version 1.1;
   proxy_set_header Upgrade "websocket";
   proxy_set_header Connection "Upgrade";
© www.soinside.com 2019 - 2024. All rights reserved.