跟我学EnvoyGateway:配置CORS

引言

本文提供了在Envoy Gateway上配置跨源资源共享(CORS)的指导。CORS定义了一种方式,使得在一个域中加载的客户端Web应用程序能够与另一个域中的资源进行交互。

Envoy Gateway引入了一个新的自定义资源定义(CRD)名为SecurityPolicy,允许用户配置CORS。这个实例化的资源可以链接到Gateway、HTTPRoute或GRPCRoute资源。

配置

在配置CORS时,可以配置一个精确的主机名来源,或者包含通配符前缀的主机名,允许指定主机名的所有子域。此外,整个来源(无论是否指定方案)可以是通配符,以允许所有来源。

以下示例定义了一个SecurityPolicy,允许来自www.foo.com的所有HTTP请求进行CORS。

cat <<EOF | kubectl apply -f -
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
  name: cors-example
spec:
  targetRefs:
  - group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: backend
  cors:
    allowOrigins:
    - "http://*.foo.com"
    - "http://*.foo.com:80"
    allowMethods:
    - GET
    - POST
    allowHeaders:
    - "x-header-1"
    - "x-header-2"
    exposeHeaders:
    - "x-header-3"
    - "x-header-4"
EOF

验证SecurityPolicy配置:

kubectl get securitypolicy/cors-example -o yaml

测试

确保GATEWAY_HOST环境变量已从快速入门设置。如果没有,请按照快速入门指南设置变量。

验证从http://www.foo.com发出的OPTIONS请求的响应中存在CORS头:

curl -H "Origin: http://www.foo.com" \
  -H "Host: www.example.com" \
  -H "Access-Control-Request-Method: GET" \
  -X OPTIONS -v -s \
  http://$GATEWAY_HOST \
  1> /dev/null

您应该看到以下响应,表明来自http://www.foo.com的请求是被允许的:

< access-control-allow-origin: http://www.foo.com
< access-control-allow-methods: GET, POST
< access-control-allow-headers: x-header-1, x-header-2
< access-control-max-age: 86400
< access-control-expose-headers: x-header-3, x-header-4

如果您尝试从http://www.bar.com发送请求,您应该看到以下响应:

curl -H "Origin: http://www.bar.com" \
  -H "Host: www.example.com" \
  -H "Access-Control-Request-Method: GET" \
  -X OPTIONS -v -s \
  http://$GATEWAY_HOST \
  1> /dev/null

您不会在响应中看到任何CORS头,表明来自http://www.bar.com的请求未被允许。

如果您尝试从http://www.foo.com:8080发送请求,您也应该看到类似的响应,因为端口号8080未包含在允许的来源中。

curl -H "Origin: http://www.foo.com:8080" \
  -H "Host: www.example.com" \
  -H "Access-Control-Request-Method: GET" \
  -X OPTIONS -v -s \
  http://$GATEWAY_HOST \
  1> /dev/null

注意:

  • CORS规范要求浏览器发送预检请求到服务器,询问是否允许访问另一个域中的受限资源。浏览器应该根据服务器的响应来决定是否发送实际请求。CORS过滤器仅根据其配置响应预检请求。它不会拒绝任何请求。浏览器负责执行CORS策略。
  • 目标HTTPRoute或目标Gateway路由到的HTTPRoutes必须允许OPTIONS方法,以便CORS过滤器工作。否则,OPTIONS请求将不会匹配路由,CORS过滤器不会被调用。

专业术语统计表

专业术语翻译
CORS跨源资源共享
CRD自定义资源定义
SecurityPolicy安全策略
HTTPRouteHTTP路由
GRPCRouteGRPC路由
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值