K8s中Contour HTTPProxy的corsPolicy作用及集群内CORS疑问
以下配置提取自Contour v1.20.1官方文档CORS配置章节:
apiVersion: projectcontour.io/v1 kind: HTTPProxy metadata: name: cors-example spec: virtualhost: fqdn: www.example.com corsPolicy: allowCredentials: true allowOrigin: - "*" # 允许任意来源 allowMethods: - GET - POST - OPTIONS allowHeaders: - authorization - cache-control exposeHeaders: - Content-Length - Content-Range maxAge: "10m" # 预检请求缓存时长10分钟 routes: - conditions: - prefix: / services: - name: cors-example port: 80
答复
首先明确结论:HTTPProxy唯一允许的访问来源就是www.example.com 这个认知是错误的。
corsPolicy生效逻辑与allowOrigin含义virtualhost.fqdn匹配的是请求的目标Host头,和请求发起方的来源没有关联:所有到达Contour入口、Host头值为www.example.com的请求都会命中该HTTPProxy,和请求从哪个域名的页面发起无关。corsPolicy是Contour在网关层实现的CORS处理逻辑:命中规则的OPTIONS预检请求会被Contour直接响应,不会转发到后端服务;普通业务请求的响应会被Contour自动添加对应Access-Control-*响应头,无需后端服务额外处理CORS逻辑。- 配置中
allowOrigin: "*"指代允许所有源站发起的跨域请求:无论请求来自第三方域名、本地开发环境还是其他任意源,只要目标是www.example.com且命中该规则,Contour都会返回允许跨域的响应头,浏览器不会拦截响应。
- 集群内部Pod通信的CORS限制
Kubernetes集群内部Pod之间的通信默认不存在CORS限制。CORS是浏览器端实现的同源安全策略,服务之间通过HTTP客户端、SDK等方式直接调用时不存在浏览器的校验逻辑,不会触发CORS拦截。
内容的提问来源于stack exchange,提问作者Unknown developer
相关产品推荐
相关产品推荐

