NGINX Ingress 控制器 v5.4.0 中的 CORS 策略:适用于 VirtualServer 和 Ingress 的模式
从NGINXIngress控制器v5.4.0起,CORS行为可通过Policy资源统一定义,再复用至VirtualServer和Ingress。创建含spec.cors的Policy后,通过spec.policies或nginx.org/policies注释关联,确保配置一致、可跨服务复用,且CORS逻辑与路由隔离,便于审核维护。
从NGINX Ingress控制器v5.4.0开始,CORS行为可以通过Policy资源统一定义,然后复用在VirtualServer和Ingress上。简单来说,就是先创建一个包含spec.cors的Policy,再通过spec.policies或nginx.org/policies注释把它关联到流量资源上。

从NGINX Ingress控制器(NIC)v5.4.0起,你可以在Policy资源中一次性定义CORS行为,然后应用到VirtualServer和Ingress两种流量路径上。
本文重点介绍:
- NGINX Ingress控制器中CORS策略的工作原理。
- 如何在VirtualServer和Ingress上配置使用。
为什么要使用CORS政策?
很多团队一开始都是每个资源单独配置CORS,结果很快就发现配置不一致、难以维护。用专门的Policy来管理CORS,好处很明显:
- 允许的源、方法、头部有了单一的真实来源,不会出现口径不一的问题。
- 跨服务和命名空间可以重复使用,省去重复劳动。
- 审核更清晰,CORS行为与路由逻辑完全隔离,改动时不用担心误伤。
NGINX Ingress控制器中CORS策略的工作原理
整体流程分三步:
- 创建一个Policy资源,配置
spec.cors。 - 在定义流量时把它连上去:
- 对于VirtualServer,通过
spec.policies(也可以在路由/分流策略级别覆盖)。 - 对于Ingress,通过
nginx.org/policies注释。
- 对于VirtualServer,通过
- NGINX Ingress控制器自动渲染出对应的NGINX CORS配置,为预检请求和实际跨域请求返回正确的头部。
CORS政策示例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
apiVersion: k8s.nginx.org/v1
kind: Policy
metadata:
name: cors-policy
spec:
cors:
allowOrigin:
- https://app.example.com
allowMethods:
- GET
- POST
- PUT
- OPTIONS
allowHeaders:
- Content-Type
- Authorization
- X-Requested-With
exposeHeaders:
- X-Total-Count
- X-Page-Size
allowCredentials: true
maxAge: 86400
|
引用CORS政策的VirtualServer示例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: webapp
spec:
host: webapp.example.com
policies:
- name: cors-policy
upstreams:
- name: webapp
service: webapp-svc
port: 80
routes:
- path: /test
action:
pass: webapp
|
CORS政策在Ingress下的引用示例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
nginx.org/policies: "cors-policy"
spec:
ingressClassName: nginx
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
需要记住的重要行为:
- CORS政策可以同时作用于VirtualServer和Ingress。
- 在VirtualServer中,路由/分流策略级别的policy会覆盖规范级别的同类型policy。
- 如果使用了
allowCredentials: true,那么allowOrigin必须明确指定具体的源,不能使用通配符*。
预防大多数问题的生产检查
上线前,务必验证以下几点:
- 对于未允许的源,不应返回
Access-Control-Allow-Origin头部。 - 当
allowCredentials: true时,只使用显性来源(不要用*)。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















