暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes中如何解决Ingress跨域问题?

WeiyiGeek 2021-12-15
4220

0x00 Kubernetes中Ingress跨域设置

描述: 在您在kubernetes
搭建ingress并通过其访问集群内部部署的项目时,有些功能可能会存在如下报错:Access to XMLHttpRequest at ... has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

上述错误提示这是一个跨域问题,在传统项目中我们更改Nginx配置即可,然后在kubernetes中或者ingress中,我们应该如何处理这种问题呢?

解决方式
我们可以在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
     : 控制接受哪些Header请求头。这是一个多值字段,以","分隔,并接受字母,数字,_和-。默认: 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: "Version, 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

示例演示


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: front-web
namespace: web
labels:
app: front-web
ref: front
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET, POST"
nginx.ingress.kubernetes.io/cors-allow-headers: "Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control"
nginx.ingress.kubernetes.io/cors-expose-headers: "Version, X-CustomResponseHeader"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: {{ .Values.ingress.allowOrigin }}
nginx.ingress.kubernetes.io/cors-max-age: 600

Ingress CORS官方文档: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#enable-cors




欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】

更多文章来源: https://weiyigeek.top 【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】


我们登上的并非我们所选择的舞台,演出并非我们所选择的剧本。


书写总结不易,如果你觉得这个专栏还不错的,请给这篇专栏点个赞、投个币、收个藏、关个注,转个发,点个在看,这将对我有很大帮助。




文章转载自WeiyiGeek,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论