适用场景

网关是所有流量的必经之路,配置不当会放大故障:重试风暴、超时级联、路由写错导致大面积 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。四条都测过再上线。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。