[英]Socket.io - Origin not allowed by Access-Control-Allow-Origin
[英]express + socket.io + kubernetes Access-Control-Allow-Origin' header
我正在使用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錯誤。 無效的部分是websockets。
未聲明,該問題被標記為GCP
但如果您將Nginx入口與GCP 網絡負載平衡器結合使用,則 :
Nginx-ingress具有特定的注釋,以允許CORS進入入口,並具有不同的選項 :
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"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://admin.example.com"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
你能包括嗎
sessionAffinity: ClientIP
在您的服務ws yaml並嘗試?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.