使用Socket.io、ExpressJS和Nginx入口的Kubernetes WebSocket
我想使用Socket.io将React本机应用程序连接到托管在Google云平台(GKE)上的Kubernetes集群内的服务器 Nginx入口控制器声明似乎有问题,但我找不到 我尝试添加使用Socket.io、ExpressJS和Nginx入口的Kubernetes WebSocket,kubernetes,websocket,socket.io,google-kubernetes-engine,nginx-ingress,Kubernetes,Websocket,Socket.io,Google Kubernetes Engine,Nginx Ingress,我想使用Socket.io将React本机应用程序连接到托管在Google云平台(GKE)上的Kubernetes集群内的服务器 Nginx入口控制器声明似乎有问题,但我找不到 我尝试添加nginx.org/websocket服务;重写我的后端代码,使其在端口3004上使用单独的NodeJS服务器(一个简单的HTTP服务器),然后通过入口控制器将其暴露在与端口3003不同的路径下;以及来自其他SO问题和Github问题的多个其他建议 可能有用的信息: 集群主版本:1.15.11-gke.15 我
nginx.org/websocket服务
;重写我的后端代码,使其在端口3004上使用单独的NodeJS服务器(一个简单的HTTP服务器),然后通过入口控制器将其暴露在与端口3003不同的路径下;以及来自其他SO问题和Github问题的多个其他建议
可能有用的信息:
1.15.11-gke.15
stable/nginx-ingres
)管理gitlab托管应用程序
error:websocketerror
App.js
const socket=io('https://example.com/app-sockets/socketns', {
对,,
安全:是的,
传输:['websocket','polling']
});
我希望上面的代码将我连接到一个名为socketdns
的socket.io命名空间
后端代码是:
app.js
const express=require('express');
常量app=express();
const server=require('http')。createServer(应用程序);
const io=require('socket.io')(服务器);
const redis=require('socket.io redis');
io.set('transports',['websocket','polling']);
io.适配器(redis({
主机:process.env.NODE_env==='development'?'localhost':'redis cluster ip service.gitlab managed apps.svc.cluster.local',
港口:6379
}));
on('error',function(err){console.log('Redis adapter!',err);});
常量nsp=io.of('/socketns');
nsp.on('连接'),功能(套接字){
console.log('connected!');
});
服务器。听(3003,()=>{
console.log('App监听3003');
});
入口服务是:
入口服务.yaml
apiVersion:extensions/v1beta1
种类:入口
元数据:
注释:
kubernetes.io/ingres.class:nginx
nginx.ingres.kubernetes.io/rewrite-target://$1
nginx.ingres.kubernetes.io/proxy-body-size:“100m”
certmanager.k8s.io/cluster-issuer:letsencrypt产品
nginx.ingres.kubernetes.io/proxy-connect-timeout:“7200”
nginx.ingres.kubernetes.io/proxy-read-timeout:“7200”
nginx.ingres.kubernetes.io/proxy-send-timeout:“7200”
nginx.org/websocket-services:“应用程序套接字群集ip服务”
名称:入口服务
命名空间:gitlab托管的应用程序
规格:
tls:
-主持人:
-example.com
秘书名称:letsencrypt产品
规则:
-主持人:example.com
http:
路径:
-后端:
serviceName:app cms群集ip服务
服务端口:3000
路径:/?(*)
-后端:
serviceName:应用程序用户群集ip服务
服务端口:3001
路径:/app-users/?(*)
-后端:
serviceName:应用程序套接字群集ip服务
服务端口:3003
路径:/app sockets/?(*)
-后端:
serviceName:应用程序套接字群集ip服务
服务端口:3003
路径:/app sockets/socketns/?(*)
只需将注释更改为
nginx.ingres.kubernetes.io/websocket-services:“应用程序套接字群集ip服务”
而不是
nginx.org/websocket-services:“应用程序套接字群集ip服务”
大多数情况下,它会解决您的问题。您在哪里看到错误?后端日志?nginx入口控制器有两种主要风格
nginx.org
注释不是您正在使用的。您是否可以共享您的后端图像,或仅使用exmaple复制另一个图像?我已尝试解决一个非常类似的问题:到目前为止运气不佳。我认为这不是LB的问题,错误听起来好像正在到达后端。由于您的连接设置为安全,您是否在后端配置了证书?@Valentin Constanda这是否回答了您的问题?您仍然有这个问题吗?不幸的是,我使用的解决方案是使用节点端口公开部署,并使用IP地址连接到WebSocket。我知道这不是最好的解决办法,但这是我暂时同意的。