簡體   English   中英

express + socket.io + kubernetes 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM