Kubernetes Ingress支持跨域 (CORS)配置
在 Kubernetes Ingress 里要支持跨域 (CORS),通常取决于你用的 Ingress Controller(nginx、traefik、haproxy 等)。
最常见的就是 NGINX Ingress Controller,它可以通过 Annotations 配置 CORS。
1.NGINX Ingress Controller 开启跨域
1.1限制跨域域名
在 Ingress 的 metadata.annotations 里加:
1 | apiVersion: networking.k8s.io/v1 |
关键说明:
enable-cors: "true"开启跨域支持cors-allow-origin:允许的来源,可以是具体域名(推荐),也可以是*(允许所有)cors-allow-methods:允许的方法cors-allow-headers:允许的请求头cors-allow-credentials:是否允许携带 Cookie/Authorization 头
1.2不限制域跨域
1 | apiVersion: networking.k8s.io/v1 |
关键说明
cors-allow-origin: "*":允许所有来源跨域(测试方便,但生产环境安全性较低)。如果你需要跨域时带 Cookie / Authorization,那就不能用
"*",必须写具体域名,比如:1
nginx.ingress.kubernetes.io/cors-allow-origin: "https://foo.example.com"
cors-allow-headers: "*":所有自定义头都放行,适合调试;生产建议限制。
2.模拟简单跨域请求
2.1带 Origin
1 | curl -i http://myapp.example.com/api \ |
期望返回头:
Access-Control-Allow-Origin: http://evil.com # 或 *
如果 Ingress 配置了 CORS,这里会有响应头。
2.2模拟跨域预检请求(OPTIONS)
跨域时,浏览器会先发一个 OPTIONS 请求(preflight)确认是否允许。
1 | curl -i -X OPTIONS http://myapp.example.com/api \ |
期望返回头:
Access-Control-Allow-Origin: http://evil.com
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT
Access-Control-Allow-Headers: X-Custom-Header, Authorization
2.3模拟带 Cookie 的跨域请求
1 | curl -i http://myapp.example.com/api \ |
注意:如果返回里有 Access-Control-Allow-Credentials: true,浏览器才会允许跨域携带 Cookie。
🔥 总结:
-H "Origin: ..."是最关键的- 预检请求用
-X OPTIONS+Access-Control-Request-* - 可以加
Cookie或Authorization模拟敏感请求。