所有流量从北向南进入集群的那个"大门"叫网关。老朋友 Nginx 能打,但 K8s 时代有了新选手:Traefik(云原生原生)、APISIX(插件平台)。这篇给一个可落地的选型框架。
一、网关要解决什么#
┌─── 路由: 域名/路径/Header → 后端
流量 ───►├─── TLS 终结: 证书统一管理
├─── 认证: JWT/API Key/OIDC
├─── 限流熔断: 保护后端
├─── 可观测: 访问日志/指标/trace
└─── 灰度: 按 header/比例分流
演进主线:静态配置 → 动态配置(不 reload) → API 驱动(可编程)。
二、三位选手画像#
Nginx(+ OpenResty/Lua)#
# 经典配置: 一切靠文件 + reload
server {
listen 443 ssl http2;
server_name api.example.com;
location / {
proxy_pass http://upstream;
limit_req zone=api burst=100;
}
}
| 优点 |
缺点 |
| 性能天花板、极稳 |
改配置要 reload(毫秒级断连风险) |
| 生态/文档/运维经验最厚 |
动态能力靠 Lua(OpenResty)开发门槛 |
| K8s 有 ingress-nginx 传承 |
原生没有控制台/API |
Traefik(云原生亲儿子)#
# K8s IngressRoute: 自动发现后端, 改动秒级生效无 reload
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: api
spec:
entryPoints: [websecure]
routes:
- match: Host(`api.example.com`) && PathPrefix(`/v2`)
kind: Rule
services: [{name: api-v2, port: 80}]
middlewares: [{name: ratelimit}]
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ratelimit
spec:
rateLimit: {average: 100, burst: 50}
| 优点 |
缺点 |
| K8s CRD 声明式、自动服务发现 |
极端性能弱于 Nginx/APISIX |
| 内置 Dashboard(拓扑一目了然) |
复杂插件生态较薄 |
| Let’s Encrypt 自动证书! |
超大集群性能调优要花心思 |
APISIX(插件平台)#
// 一切皆 API/etcd: 动态路由 + 100+ 现成插件
curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT \
-H "X-API-KEY: $ADMIN_KEY" -d '{
"uri": "/api/*",
"upstream": {"type": "roundrobin",
"nodes": {"api-svc:80": 1}},
"plugins": {
"limit-count": {"count": 100, "time_window": 60},
"jwt-auth": {},
"prometheus": {}
}
}'
| 优点 |
缺点 |
| 全动态(etcd 存储, 热更新) |
组件多(etcd+dashboard)运维面大 |
| 插件生态炸裂(认证/限流/日志/transform) |
学习成本中上 |
| 国产开源(Apache 顶级项目, 文档中文友好) |
|
三、硬核对比表#
| 维度 |
Nginx |
Traefik |
APISIX |
| 配置方式 |
文件+reload |
CRD/标签 |
REST API/etcd/CRD |
| 热更新 |
✗(Lua 可补) |
✓ |
✓✓ |
| K8s 集成 |
ingress-nginx |
原生最佳 |
Ingress Controller |
| 控制台 |
✗ |
✓ 内置 |
✓ 强大 |
| 认证插件 |
手写/Lua |
中间件若干 |
100+ 插件 |
| 性能 |
★★★★★ |
★★★★ |
★★★★☆ |
| 团队上手 |
谁都会 |
容易 |
中等 |
| 适合 |
传统架构/极致性能 |
云原生中小团队 |
平台化/API 门户 |
四、选型决策树#
你的场景是?
├─ 传统 VM 部署 / 静态转发为主
│ └─► Nginx(别折腾, 它就是为此而生)
├─ K8s 集群入口, 团队 < 50 人, 要省心
│ └─► Traefik(IngressRoute + 自动证书真香)
├─ 需要 API 门户: 大量域名/租户/鉴权/限流/计费
│ └─► APISIX(插件化平台能力)
├─ 已有 Nginx 运维体系, 上 K8s
│ └─► ingress-nginx(平滑迁移, 思想不变)
└─ 超大规模多团队共享网关
└─► APISIX / Higress + 平台工程化
一句忠告:选型先看团队会什么——Nginx 用得好好的团队迁移 APISIX 的收益,往往抵不过重新踩坑的成本。
五、各自的典型落地#
Nginx:加动态健康检查的模板(ingress-nginx 思想)#
upstream api {
server 10.0.1.11:8080 max_fails=2 fail_timeout=10s;
server 10.0.1.12:8080 max_fails=2 fail_timeout=10s;
keepalive 64; # 长连接池, 大幅提升吞吐
}
Traefik:全链路一条龙#
helm install traefik traefik/traefix -n traefik --create-namespace \
--set ingressClass.enabled=true
# cert-resolver 自动 HTTPS(最杀手锏)
# IngressRoute 加: tls: {certResolver: letsencrypt}
# 域名解析生效后, 证书自动签发+续期, 零手工
APISIX: observable 限流路由#
# Helm 安装(含 etcd + dashboard)
helm repo add apisix https://charts.apiseven.com
helm install apisix apisix/apisix -n ingress --create-namespace
# 或 K8s 声明式(ApisixRoute CRD)
# 插件即插即用: prometheus → Grafana 大盘开箱
六、无论选谁都要做的#
| 事项 |
说明 |
| 健康检查 |
被动+主动,摘除坏节点 |
| 访问日志 |
带上游耗时(呼应 Nginx 篇的 log_format) |
| 指标接入 |
QPS/延迟/状态码 → Prometheus |
| 限流兜底 |
保护后端的最后一道闸 |
| 证书管理 |
自动续期(别再人肉换证书) |
| 变更管理 |
网关配置纳入 Git + review(网关是单点中的单点) |
七、常见坑#
| 现象 |
选型相关原因 |
| Traefik 路由不生效 |
entryPoints/match 表达式写错;看 dashboard 排查 |
| APISIX 节点同步异常 |
etcd 集群健康;admin API 版本 |
| Nginx reload 抖动 |
长连接被重置;考虑 OpenResty balancer_by_lua |
| 网关成了单点 |
至少 2 副本 + 前置 LB/VIP |
| 配置漂移 |
手改配置未入库 → GitOps 化 |
八、小结#
| 需求关键词 |
推荐 |
| 稳、快、传统 |
Nginx |
| K8s、省心、自动证书 |
Traefik |
| API 门户、插件、平台化 |
APISIX |
| 迁移平滑 |
ingress-nginx |
网关的尽头不是选型,而是把配置变更做成可审计的工程——那一层做好后,具体是哪个网关反而没那么重要了。
本文是「云原生」系列第 18 篇。