【发布时间】:2020-01-05 01:45:55
【问题描述】:
我正在使用 node.js 应用程序设置 kubernetes 集群。我已经创建了所有部署、服务和入口,唯一不工作的是 websockets。在我在本地运行的应用程序上,我收到该请求已被 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) 的代码的一部分,而 8001 是应该处理 WS (ws-service) 的代码的一部分。 API 部分运行良好,应用程序运行正常,没有任何错误。尝试连接到 ws.com 时出现 CORS 错误。不起作用的部分是 websockets。
【问题讨论】:
标签: node.js kubernetes google-cloud-platform