适用场景
网关是所有流量的必经之路,配置不当会放大故障:重试风暴、超时级联、路由写错导致大面积 404。
配置步骤(Nginx Ingress 路由与灰度)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend: { service: { name: web-canary, port: { number: 80 } } }
关键参数与建议
- 路由规则可读:按域名/路径拆分,避免一条规则覆盖全站
- 灰度:按权重或请求头路由,先小流量验证
- 限流与熔断:按接口维度配置,保护后端不被打垮
- 超时与重试:重试次数要克制(尤其是写请求),避免放大
- 鉴权:在网关统一做认证,后端只做授权校验
容易踩的坑
- 灰度规则与主规则冲突,流量全进灰度
- 未设置 max-body-size,上传大文件报 413
- 真实 IP 未透传,后端日志全是网关地址
验证与巡检
kubectl get ingress -A
curl -s -H 'Host: www.example.com' http://网关IP/ -I | head -3
- 巡检:灰度权重正确、超时与 body 限制合理、XFF 透传
小结
网关配置的验收:灰度能切换、限流能触发、超时不级联、日志能看到真实客户端 IP。四条都测过再上线。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。