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

minikube环境下NGINX Ingress访问WebSocket服务连接失败问题求助

我的问题和相关技术帖高度相似,我在minikube环境中尝试通过NGINX Ingress访问Socket服务,不确定v1.22.2版本的Kubernetes集群是否还需要配置官方文档中提到的特殊注解,我已参照多篇Stack Overflow的帖子和解决方案添加对应配置,均未生效。

直接端口转发服务时访问正常,但通过Ingress访问时报错如下:

WebSocket connection to 'ws://textchess.com/socket.io/?EIO=4&transport=websocket' failed:

我已在本地driver\etc\host文件中将minikube IP映射为textchess.com,以下是我的相关代码及配置:

index.js

const express = require("express");
const { createServer } = require("http");
const { Server } = require("socket.io");

const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, {
  cors: {
    origin: "*",
    methods: ["GET", "POST"],
  },
});

io.on("connection", (socket) => {

  console.log("connection established");

  socket.on("client_emit", (arg) => {
    socket.emit("server_emit", arg);
  });
});

httpServer.listen(3000);

Deployment/ClusterIP服务配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: socket-deployment
  labels:
    app: socket
spec:
  replicas: 1
  selector:
    matchLabels:
      app: socket
  template:
    metadata:
      labels:
        app: socket
    spec:
      containers:
        - name: socket
          image: socket

---
# clusterIP service
apiVersion: v1
kind: Service
metadata:
  name: socket-srvc
spec:
  type: ClusterIP
  selector:
    app: socket
  ports:
    - name: socket-port
      protocol: TCP
      port: 3000
      targetPort: 3000

Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.org/websocket-services: "socket-srvc"
spec:
  rules:
    - host: textchess.com
      http:
        paths:
          - path: /test
            pathType: Prefix
            backend:
              service:
                name: socket-srvc
                port:
                  number: 3000

          - path: /socket.io/.*
            pathType: Prefix
            backend:
              service:
                name: socket-srvc
                port:
                  number: 3000

  ingressClassName: nginx

---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: k8s.io/ingress-nginx

客户端代码

<script>
  // const socket = io("http://localhost:3000", { transports: ["websocket"] });

  const socket = io("http://textchess.com:/test", {
    reconnection: true,
    transports: ["websocket"],
  });

  socket.on("server_emit", (args) => {
    console.log(args);
  });
  document.getElementById("event_emitter").onclick = function changeContent() {
    var d = new Date();
    var time = d.toLocaleTimeString();
    socket.emit("client_emit", time);
  };
</script>

内容的提问来源于stack exchange,提问作者Kaustav Ganguli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:06:04