当前位置: 首页 > news >正文

API网关Envoy的鉴权与限流:构建安全可靠的微服务网关

 

🔥「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】

引言

在云原生和微服务架构盛行的今天,API网关作为服务流量的入口,承担着路由转发、安全控制、流量管理等核心职责。Envoy 作为一款高性能、可扩展的云原生代理工具,凭借其灵活的插件化架构和强大的社区支持,成为构建现代API网关的首选方案之一。本文将深入探讨如何利用 Envoy 实现高效的鉴权与限流机制,并结合实际配置示例,帮助开发者掌握其核心原理和落地实践。


一、Envoy的核心能力与定位

Envoy 是由 Lyft 开发并开源的高性能网络代理,具备以下关键特性:

  •  多协议支持:支持HTTP/1.1、HTTP/2、gRPC、TCP等协议。
  • 可编程性:通过插件化架构(Filters)实现功能扩展。
  • 动态配置:支持xDS协议动态更新配置(CDS、EDS、LDS、RDS等)。
  • 可观测性:内置丰富的指标监控(Prometheus兼容)和日志输出。
  • 高性能:基于C++实现,适用于高并发、低延迟场景。

在微服务架构中,Envoy 既可以作为 服务网格中的 Sidecar 代理,也可以作为 边缘网关统一管理入口流量。


二、Envoy的鉴权机制详解

1. JWT Token 鉴权

JWT(JSON Web Token)是微服务中最常用的无状态鉴权方案。Envoy 提供了内置的 envoy.filters.http.jwt_authn 过滤器,支持对请求中的 JWT 令牌进行自动验证。

配置示例:

http_filters:- name: envoy.filters.http.jwt_authntyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthenticationproviders:provider1:issuer: "https://example.com"audiences:- "api"forward: trueremote_jwks:http_uri:uri: "https://example.com/.well-known/jwks.json"cluster: jwks_clustercache_duration:seconds: 300

核心配置项说明:

  • issuer:令牌签发者,用于验证令牌来源。
  • audiences:受众列表,确保令牌针对当前服务。
  •  remote_jwks:远程 JWKS 服务地址,用于获取公钥验证签名。
  • forward:是否将验证后的 JWT 头部转发到后端服务。

实际效果:

  • 请求头中携带 Authorization: Bearer <token>
  • Envoy 自动验证签名、过期时间、签发者等字段。
  • 验证失败时返回 401 Unauthorized。

2. 外部授权服务(External Authorization)

对于更复杂的鉴权逻辑(如基于角色的访问控制、IP白名单等),Envoy 支持通过 envoy.filters.http.ext_authz 过滤器将请求转发至外部授权服务。

配置示例:

http_filters:- name: envoy.filters.http.ext_authztyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthorizationgrpc_service:envoy_grpc:cluster_name: ext_authzfailure_mode_allow: false

工作流程:

  1. 客户端发送请求到 Envoy。
  2. Envoy 将请求头、路径、方法等信息转发给外部授权服务(如 Go/Python 实现的 gRPC 服务)。
  3. 授权服务返回 Allow 或 Deny 决策。
  4. Envoy 根据决策决定是否放行请求。

优势:

  • 灵活集成企业内部的权限系统(如 LDAP、OAuth2.0、RBAC)。
  • 可以结合请求上下文(如用户ID、IP地址、请求路径)进行细粒度控制。

三、Envoy的限流策略详解

1. 限流服务集成(Ratelimit Service)

Envoy 支持与开源的 Ratelimit[1] 服务集成,提供分布式限流能力。

配置步骤:

  1. 启用 Ratelimit 过滤器
http_filters:- name: envoy.filters.http.ratelimittyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimitdomain: rlrequest_type: externalrate_limit_service:grpc_service:envoy_grpc:cluster_name: ratelimit
  1.  定义限流规则(在 Ratelimit 服务中配置):
domain: rl
descriptors:- key: remote_addressvalue: 192.168.1.1rate_limit:unit: minuterequests_per_unit: 100

核心配置项说明:

  • domain:限流规则的作用域,需与 Ratelimit 服务配置一致。
  • request_type:指定限流作用于 internalexternal 或 both 类型的请求。
  • rate_limit_service:指定 Ratelimit 服务的 gRPC 地址。

限流响应头:

Envoy 会在响应头中添加以下字段:

  • X-RateLimit-Limit: 当前窗口的配额。
  •  X-RateLimit-Remaining: 剩余请求数。
  • X-RateLimit-Retry-After: 重试等待时间(秒)。

2. 本地限流(Local Rate Limiting)

对于轻量级限流需求,Envoy 提供了内置的 envoy.filters.http.local_rate_limit 过滤器,无需依赖外部服务。

配置示例:

http_filters:- name: envoy.filters.http.local_rate_limittyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.local_rate_limit.v3.LocalRateLimitstat_prefix: local_rate_limitertoken_bucket:max_tokens: 100tokens_per_fill: 10fill_interval: 1sfilter_enabled:runtime_key: local_rate_limit_enableddefault_value:numerator: 100denominator: HUNDRED

工作原理:

  • 使用令牌桶算法控制请求速率。
  • 每秒填充固定数量的令牌,超过配额的请求被拒绝。
  • 支持运行时动态启停限流策略。

四、实战:搭建 Envoy 网关的完整鉴权与限流示例

1. 架构设计

我们将构建一个包含以下组件的实验环境:

  • Envoy:作为网关,负责鉴权和限流。
  • ExtAuthz:自定义的 gRPC 授权服务(Go 实现)。
  • • Ratelimit:开源的限流服务。
  • • Backend:简单的 HTTP 服务(如 Nginx)。

2. Docker Compose 配置

version: '3.7'
services:envoy:image: envoyproxy/envoy:v1.28.0ports:- "8080:8080"- "9901:9901"volumes:- ./envoy.yaml:/etc/envoy/envoy.yamldepends_on:- extauthz- ratelimit- backendextauthz:build: ./extauthzports:- "9902:9902"ratelimit:image: envoyproxy/ratelimit:latestports:- "9903:9903"volumes:- ./ratelimit/config:/databackend:image: nginx:latestports:- "8000:80"

3. 验证流程

  1. 发送请求到 Envoy 端口 8080
  2. Envoy 调用 extauthz 服务进行鉴权。
  3. 鉴权通过后,触发限流规则。
  4. 请求最终转发到 backend 服务。

五、最佳实践与注意事项

1. 鉴权策略建议

  • 最小权限原则:仅允许必要的权限,避免过度授权。
  • 令牌刷新机制:设置合理的 JWT 有效期,结合刷新令牌(Refresh Token)。
  • 审计日志:记录鉴权失败事件,用于安全分析。

2. 限流策略建议

  • 分级限流:按用户、IP、API 分级设置限流规则。
  • 突发流量容忍:使用令牌桶算法允许短时突发流量。
  • 熔断机制:在限流基础上结合熔断器(如 Hystrix)防止雪崩效应。

3. 性能优化

  • 本地限流优先:轻量级场景使用本地限流减少网络开销。
  • 缓存令牌验证结果:对 JWT 验证结果进行缓存,提升性能。
  • 异步限流调用:对限流服务调用设置超时和重试策略,避免阻塞主流程。

六、总结

Envoy 凭借其灵活的插件化架构和强大的社区生态,能够高效实现微服务架构中的鉴权与限流需求。通过 JWT 鉴权保障服务访问的安全性,结合 Ratelimit 和本地限流策略控制流量洪峰,开发者可以构建出既安全又稳定的 API 网关。随着云原生技术的不断发展,Envoy 在服务网格、边缘计算等领域的应用将进一步扩展,值得持续关注与深入实践。


后续学习建议

  • 深入研究 Envoy 的 xDS 协议,掌握动态配置管理。
  • 探索 Istio 集成 Envoy 的服务网格模式。
  • 实践 Envoy 的熔断、重试、负载均衡等高级功能。

希望本文能为你的微服务架构设计与 Envoy 实践提供有力支持!

引用链接

[1] Ratelimit: https://github.com/envoyproxy/ratelimit

 

🚧 您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」🚀 获得:
√ 开源工具红黑榜
√ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞🔥) 

 

相关文章:

  • 算法思想之广度优先搜索(BFS)及示例(亲子游戏)
  • yolo模型精度提升策略
  • OpenHarmony标准系统-HDF框架之I2C驱动开发
  • Gemini 2.5 Pro (0605版本) 深度测评与体验指南
  • 如何将联系人从 iPhone 转移到 Android
  • 初探 OpenCV for Android:利用官方示例开启视觉之旅
  • 计算机技术、互联网与 IT 前沿:量子计算、Web3.0 等趋势洞察及行业应用
  • 生成对抗网络(GAN)损失函数解读
  • 【C++】红黑树的实现详解
  • 《机器学习》(周志华)第二章 模型评估与选择
  • Sklearn 机器学习 缺失值处理 获取填充失值的统计值
  • Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
  • 用docker来安装部署freeswitch记录
  • 「Java基本语法」变量的使用
  • Hilt -> Android 专属依赖注入(DI)框架
  • VESA DSC 基于FPGA DSC_Encoder IP仿真
  • ABP vNext + HBase:打造超高吞吐分布式列式数据库
  • [C#]基于winform部署PP-OCRv5的推理模型paddleocrv5模型部署
  • web端rtmp推拉流测试、抽帧识别计数,一键式生成巡检报告
  • 曲面的存在性定理
  • 怎么可以上传自己做的网站/必应搜索引擎网址
  • 如何下载js做的网站/长尾关键词什么意思
  • 快速建手机网站/超级外链工具源码
  • 怎样做易支付网站/免费下载优化大师
  • 什么网站可以做机票行程单/杭州网站
  • 用爱奇艺会员做视频网站违法吗/开发一个app平台大概需要多少钱?