引言
本文提供了在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 | 安全策略 |
| HTTPRoute | HTTP路由 |
| GRPCRoute | GRPC路由 |
1401

被折叠的 条评论
为什么被折叠?



