kubernetes ingress跨域设置
在使用kubernetes部署项目时,有些功能可能会存在如下报错:
1 | Access to XMLHttpRequest at ... has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. |
很显然这是一个跨域问题,在传统项目中更改Nginx配置即可,那么在kubernetes中,应该如何处理这种问题呢?
解决方法
启用CORS
kubernetes中的跨域设置在Ingress中进行配置,要在Ingress规则中启用跨域资源共享(CORS),请添加注释 nginx.ingress.kubernetes.io/enable-cors: “true”。这将在服务器位置中添加一个部分以启用此功能。
可以使用以下注释来控制CORS:
注解 | 描述 |
---|---|
nginx.ingress.kubernetes.io/cors-allow-methods | 控制接受哪些方法。这是一个多值字段,以“,”分隔,仅接受字母(大写和小写),默认GET, PUT, POST, DELETE, PATCH, OPTIONS。 |
nginx.ingress.kubernetes.io/cors-allow-headers | 控制接受哪些标题。这是一个多值字段,以“,”分隔,并接受字母,数字,_和-。默认: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization |
nginx.ingress.kubernetes.io/cors-expose-headers | 控制哪些标头暴露给响应。这是一个多值字段,以“,”分隔,并接受字母,数字,_,-和。默认值:空。例: nginx.ingress.kubernetes.io/cors-expose-headers: “, X-CustomResponseHeader” |
nginx.ingress.kubernetes.io/cors-allow-origin | 控制CORS接受的原产地。这是一个单字段值,格式如下:http(s)://origin-site.com或http(s)://origin-site.com:port,默认: *,例: nginx.ingress.kubernetes.io/cors-allow-origin: “https://origin-site.com:4443" |
nginx.ingress.kubernetes.io/cors-allow-credentials | 控制在CORS操作期间是否可以传递凭据。默认: true,例: nginx.ingress.kubernetes.io/cors-allow-credentials: “false” |
nginx.ingress.kubernetes.io/cors-max-age | 控制可以将预检请求缓存多长时间。默认值:1728000 示例:nginx.ingress.kubernetes.io/cors-max-age: 600 |
实例
在此仅列举Ingress中annotation配置部分:
1 | apiVersion: extensions/v1beta1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zane!
评论