我正在使用node.js应用程序设置kubernetes集群。我已经创建了所有部署,服务和入口,并且只有无效的是websocket。在我在本地运行的应用程序上,我收到该请求已被CORS策略阻止:所请求的资源上没有“ Access-Control-Allow-Origin”标头。当我尝试将自己转发到该Pod时,套接字开始起作用。
我尝试在服务器端代码中添加以下内容:
let server = require('http').createServer(app, {origins: '*:*'});
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
const io = sio(server);
io.origins('*:*');
我的Pod Yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: app
labels:
name: app
spec:
replicas: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: XXXXX:1.1
restartPolicy: Always
服务api yaml文件
apiVersion: v1
kind: Service
metadata:
labels:
app: api-service
name: api-service
spec:
type: NodePort
selector:
app: app
ports:
- port: 8000
targetPort: 8000
name: api
服务ws yaml文件
apiVersion: v1
kind: Service
metadata:
labels:
app: ws-service
name: ws-service
spec:
type: NodePort
selector:
app: app
ports:
- port: 8001
targetPort: 8001
name: ws
入口Yaml文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: vhost-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: static-ip
nginx.org/websocket-services: "ws-service"
spec:
rules:
- host: api.com
http:
paths:
- backend:
serviceName: app-service
servicePort: 8000
- host: ws.com
http:
paths:
- backend:
serviceName: ws-service
servicePort: 8001
如您所见,我有一个部署,其中包含2个端口。在端口8000上,处理API请求(api-service)的代码的一部分,应处理WS(ws-service)的8001的代码的一部分。 API部分运行正常,应用程序正在运行,没有任何错误。尝试连接到ws.com时,出现CORS错误。无效的部分是websocket。
答案 0 :(得分:1)
未说明,该问题被标记为/* this fixes a 100vw issue, removing the horizontal scrollbar when it's unneeded */
,但如果您将Nginx入口与GCP Network Load Balancer一起使用:
Nginx-ingress具有一个特定的批注,以允许different options使用CORS进入入口:
GCP
答案 1 :(得分:0)
你可以包括
sessionAffinity: ClientIP
在您的服务中使用Yaml并尝试吗?