共计 1307 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
在微服务架构中,传统的 API 网关(如 Nginx)往往面临动态配置困难、扩展性差等问题。特别是在 Kubernetes 环境中,服务实例频繁变动,传统网关的静态配置方式显得力不从心。Higress 作为云原生 API 网关,天生与 K8s 集成,支持动态服务发现和配置热更新,极大简化了微服务治理的复杂度。

技术对比
以下是 Nginx、Envoy 和 Higress 在关键特性上的对比:
| 特性 | Nginx | Envoy | Higress |
|---|---|---|---|
| 动态配置 | 有限支持 | 支持 | 原生支持 |
| 可观测性 | 需插件 | 内置 | 内置 + 增强 |
| K8s 原生集成 | 无 | 部分 | 深度集成 |
| 插件扩展 | 复杂 | 中等 | 简单 |
核心实现
1. Ingress 资源声明
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
annotations:
# ⚠️ 必须指定 Higress 作为控制器
kubernetes.io/ingress.class: higress
# 启用跨域支持
higress.io/cors-enable: "true"
# 连接池大小配置(优化性能)higress.io/upstream-keepalive: "32"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /v1/users
pathType: Prefix
backend:
service:
name: user-service
port:
number: 8080
2. JWT 验证插件配置
apiVersion: higress.io/v1
kind: HttpPlugin
metadata:
name: jwt-auth
spec:
# ⚠️ 插件生效的域名范围
hosts:
- "*.example.com"
config: |
{
"secret": "your-256-bit-secret", # 建议使用 KMS 管理
"skip_paths": ["/healthcheck"], # 排除路径
"header": "Authorization" # JWT 头字段
}
性能测试
使用 wrk 压测对比(4 核 8G 节点):
-
默认配置:
Requests/sec: 12,345 Latency: 45.67ms -
优化后(调整连接池和线程数):
Requests/sec: 23,456 (+89%) Latency: 24.12ms
关键参数:
# 在 Higress ConfigMap 中调整
upstream:
keepalive: 64 # 连接池大小
threads: 8 # 工作线程数
避坑指南
- 证书更新失败 :
- 现象:证书轮换后 502 错误
-
解决:检查 Secret 的
tls.crt是否包含完整证书链 -
灰度发布匹配 :
- Header 规则必须全匹配(区分大小写)
- 建议使用
exact匹配模式避免歧义
代码规范
所有 YAML 配置需遵循:
- 每个字段添加行注释
- 关键安全项用 ⚠️ 标注
- 数组元素保持缩进一致
示例:
annotations:
# ⚠️ 生产环境必须开启
higress.io/force-https: "true"
延伸思考
Higress 的插件机制虽然强大,但每次更新仍需重启网关实例。如何在保持高可用的前提下实现真正的插件热加载?这个问题留给大家探索(提示:可研究 Wasm 插件架构)。
正文完
发表至: 云原生技术
近一天内
