在 Kubernetes 中通过 Ingress 配置 CORS 需在 annotations 中设置 nginx.ingress.kubernetes.io/enable-cors: "true" 并指定 cors-allow-origin 等参数,由 nginx-ingress-controller 自动注入响应头,实现统一、易维护的跨域控制。

在 Kubernetes 中通过 Ingress 配置 CORS,核心是在 Ingress 资源的 annotations 里声明规则,由 nginx-ingress-controller 自动注入响应头。这种方式比在每个后端服务里单独处理更统一、更易维护。
启用基础跨域支持
最简配置只需开启 CORS 功能,并指定允许的来源:
- nginx.ingress.kubernetes.io/enable-cors: "true" —— 必须设置为 true 才激活 CORS 处理
- nginx.ingress.kubernetes.io/cors-allow-origin —— 填具体域名(如 "https://app.example.com")或通配符 "*";注意:若同时设 cors-allow-credentials: "true",就不能用 "*",必须写明确的 origin
控制请求方法与请求头
浏览器预检(OPTIONS)是否通过,取决于服务端是否明确允许对应的方法和头字段:
- cors-allow-methods:默认是 "GET, PUT, POST, DELETE, PATCH, OPTIONS",按需精简或扩展,例如 "GET, POST, OPTIONS"
- cors-allow-headers:列出前端实际发送的自定义头,比如 "Authorization, X-Api-Key, Content-Type";若含通配符需求,可用 configuration-snippet 配合 more_set_headers 'Access-Control-Allow-Headers: *'
处理凭据与预检缓存
涉及登录态(如 Cookie、Token)或需要精细控制性能时,这两个参数很关键:
- cors-allow-credentials: "true" —— 允许浏览器携带凭证;此时响应头会自动加 Access-Control-Allow-Credentials: true,且 cors-allow-origin 必须为单个明确域名
- cors-max-age:单位秒,默认 1728000(20 天),设为 86400 表示预检结果缓存 1 天,减少重复 OPTIONS 请求
暴露响应头给前端
某些自定义响应头(如分页信息 X-Total-Count 或版本号 Version)默认不会被浏览器读取,需显式声明:
- cors-expose-headers:例如 "X-Total-Count, Version, Content-Range",多个用英文逗号分隔


















