Kubernetes环境下oauth2-proxy反向代理触发CORS跨域错误咨询
问题根因
你遇到的问题是两个因素共同导致的:
- 浏览器跨域请求前发送的OPTIONS预检请求不带身份认证信息,被oauth2-proxy的认证逻辑拦截返回401,该响应未携带CORS头触发跨域报错
- Nginx Ingress默认的CORS规则仅作用于业务后端的响应,不会应用到oauth2-proxy返回的认证子请求响应上
修复步骤
1. 调整业务Ingress配置
给你的supervisor-ingress新增以下注解,跳过OPTIONS请求的认证、配置全局CORS规则:
metadata: annotations: # 原有注解保留,新增以下内容 nginx.ingress.kubernetes.io/enable-cors: "true" nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost:3000" nginx.ingress.kubernetes.io/cors-allow-credentials: "true" nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, PATCH, OPTIONS" nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" nginx.ingress.kubernetes.io/auth-snippet: | if ($request_method = OPTIONS) { return 204; }
2. 给oauth2-proxy新增CORS启动参数
在oauth2-proxy的启动命令中加入以下参数,让认证响应本身也携带CORS头:
--cors-allow-origin=http://localhost:3000 --cors-allow-credentials=true --cors-allow-methods=GET,POST,PUT,PATCH,DELETE,OPTIONS --cors-allow-headers=*
如果是通过Helm部署,直接在extraArgs配置项中添加上述参数即可。
3. 可选配置
如果上述操作后oauth2路径的响应仍缺少CORS头,可给oauth2-proxy的Ingress也添加步骤1中相同的CORS相关注解。
内容的提问来源于stack exchange,提问作者Marelis
相关产品推荐
相关产品推荐

