时间:26-04-25
在微服务架构的API网关实践中,路径适配是处理前后端路由不一致的核心环节。典型场景是客户端请求路径(如`/api/v1/users`)与后端服务实际监听路径(如`/users`)不匹配。此时,需要在网关层进行URL路径重写,实现请求的精准转发。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
Envoy Gateway基于Envoy Proxy构建,为Kubernetes环境提供了强大的路由与重写能力。下面通过具体配置,演示如何利用其Rewrite URL Prefix Path功能。
第一个实战场景的需求如下:
实现此功能的关键在于配置HTTPRoute资源,并应用URLRewrite过滤器。具体配置示例如下:
cat <<'EOF' | kubectl apply -f -
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: simple
spec:
hostnames:
- example.local
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: simple-gw
rules:
- matches:
- path:
type: PathPrefix
value: /api/v1/who # 浏览器访问路径
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /who # 业务收到访问路径
backendRefs:
- name: simple
port: 80
EOF
配置应用后,可通过以下方式验证服务是否按预期工作:
除了前缀替换,有时需要替换整个请求路径。这在统一健康检查或就绪探针接口时尤为常见。
考虑以下场景:
此场景需使用`ReplaceFullPath`类型来替换整个匹配路径。配置示例如下:
cat <<'EOF' | kubectl apply -f -
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: simple
spec:
hostnames:
- example.local
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: simple-gw
rules:
- matches:
- path:
type: PathPrefix
value: /status # 浏览器访问路径
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplaceFullPath
replaceFullPath: /ping # 业务收到访问路径
backendRefs:
- name: simple
port: 80
EOF
配置完成后,验证重写效果:
路径重写之外,主机名(Host)重写在多租户SaaS架构中同样关键。此类应用常使用不同子域名区分租户,例如:
后端服务需根据Host头识别租户,但所有请求最终需路由至`simple.com`对应的业务服务。为避免后端维护大量租户域名,可在网关层重写Host头。
Envoy Gateway的URLRewrite过滤器同样支持此操作。
cat <<'EOF' | kubectl apply -f -
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: simple
spec:
hostnames:
- "*.simple.com"
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: simple-gw
rules:
- matches:
- path:
type: PathPrefix
value: /
filters:
- type: URLRewrite
urlRewrite:
hostname: www.simple.com
backendRefs:
- name: simple
port: 80
EOF
验证结果显示Host头已按配置被重写:
Envoy Gateway的URLRewrite过滤器提供了灵活的路径前缀、完整路径及主机名重写能力。这项功能有效解耦了客户端请求格式与后端服务接口设计,支持前后端独立演进。对于构建灵活、可维护的微服务集成架构而言,这是简化部署流程、提升运维效率的核心特性。