我们已经为我们的应用程序配置了kubernetes环境。其中有一个主服务器,两个从服务器,nginx用作网络服务器。在访问我们应用程序的URL时,出现cors错误。我已经按照kubernetes文档(https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/)设置了后端和前端之间的连接,您可以在下面找到所有这些详细信息。这里没有提及yamls文件的完整详细信息,请告知是否丢失任何内容。
这是越来越错误。
Access to XMLHttpRequest at 'http://andy.fin.com:9090/configuration/api/v1/configuration' from origin 'http://172.16.198.102:32603' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
#nginx configuration
upstream zuul {
server zuul;
}
location / {
proxy_pass http://andy.fin.com:9090/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "http";
proxy_set_header Origin "http://localhost:32603";
proxy_set_header Referer "http://localhost:32603";
proxy_hide_header 'Access-Control-Allow-Origin';
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: zuul
tier: frontend
replicas: 1
template:
metadata:
labels:
app: zuul
tier: frontend
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
app: zuul
tier: frontend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
apiVersion: apps/v1
kind: Deployment
metadata:
name: zuul-routing
spec:
selector:
matchLabels:
app: zuul
tier: backend
replicas: 1
template:
metadata:
labels:
app: zuul
tier: backend
spec:
containers:
- env:
---
apiVersion: v1
kind: Service
metadata:
name: zuul
spec:
selector:
app: zuul
tier: backend
ports:
- protocol: TCP
port: 9090
targetPort: http
答案 0 :(得分:0)
基本上,您需要在某些时候做出以下决定:
是否允许给定的Origin访问请求的内容?
您可以在反向代理,端点Web服务器或应用程序的逻辑中回答该问题。进阶:将这些结合起来并在多个地方做出决定。请注意,不要无意间覆盖先前设置的标头。
答案是肯定的吗?
然后,标头必须设置为包含以下内容的URI样式:
http[s]://<trusted_origin_domain>[:port]
根据您的问题,目前尚不清楚,此时应设置逻辑并相应地设置信息。
为简单起见,您可以先让nginx发送正确的标头。重要的是不要混淆发送给节点的标头和发送给客户端的标头。
如果您在应用程序中具有CORS实现,则应通过环境或在构建步骤或相似阶段中传递参数(可信来源)。
选择一种方法,使您可以尽可能地扩展规模,同时又可以花最少的时间。
仔细研究您的特定问题您在应用程序和nginx中的决策似乎重叠。
有关HTTPS的旁注通过Internet转发时,如果没有进一步的DNS和VPN设置,您可能会泄漏未加密的http通信。
发送到浏览器的标头必须与您的情况完全相同:
Access-Control-Allow-Origin: http://172.16.198.102:32603
当您覆盖引荐来源和原始来源时,整个安全性将无法正常工作:
proxy_set_header Origin "http://localhost:32603";
proxy_set_header Referer "http://localhost:32603";
删除那些。
您正在阻止相关的CORS标头到达浏览器:
proxy_hide_header 'Access-Control-Allow-Origin';
也将其删除。