
Kubernetes网络 - Ingress NGINX实战与最佳实践
概览
Ingress NGINX 是最常用的 Kubernetes 北向流量入口控制器(Ingress Controller),具备域名与路径路由、TLS 终止、重写、限速、灰度、WebSocket、超时与缓存等能力。合理配置 Ingress 既能提升可用性与安全性,又能控制成本与复杂度。
安装与基础路由
使用 Helm 安装(生产建议固定版本与自定义参数):
1 | helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
基础 Ingress 示例:
1 | apiVersion: networking.k8s.io/v1 |
常用注解与路由技巧
- 超时与缓冲
1 | metadata: |
- WebSocket 支持
1 | nginx.ingress.kubernetes.io/enable-websocket: "true" |
- HSTS/强制 HTTPS
1 | nginx.ingress.kubernetes.io/force-ssl-redirect: "true" |
- 限速与IP 白名单
1 | nginx.ingress.kubernetes.io/limit-rps: "50" |
- 路由重写与正则
1 | nginx.ingress.kubernetes.io/use-regex: "true" |
灰度发布与金丝雀
使用 canary 注解实现基于权重或 Header 的灰度:
1 | metadata: |
灰度最佳实践:
- 仅对无状态或可回滚的服务开启
- 搭配熔断与限流,避免新版本放大故障
- 结合 Prometheus 监控关键指标(P95、错误率)
TLS 与证书管理
- 建议结合 cert-manager 自动签发与续期
- 同一域名下多 Ingress 时,确保证书 secret 一致
- 使用 TLS1.2/1.3 与安全加密套件,禁用弱算法
cert-manager 简例:
1 | apiVersion: cert-manager.io/v1 |
观测与日志
- 开启 metrics 暴露,配合 Prometheus/Grafana
- 统一 access log 格式,便于检索与审计
1 | controller: |
安全与性能
安全
- 仅暴露 80/443,内网访问管理接口
- 使用 IP 白名单/黑名单、限速、WAF(ModSecurity)等
- 关闭不必要的 HTTP 方法与目录遍历
性能
- 合理设置
worker_processes与keepalive - 尽量使用前缀路由,减少复杂正则
- 静态资源建议绕过后端(CDN/对象存储)
- 合理设置
常见踩坑
- 正则与重写冲突:
use-regex开启后注意捕获组与rewrite-target - 大文件上传 413:提升
proxy-body-size与后端client_max_body_size - 连接超时 504:检查后端服务超时与 NGINX
proxy-read-timeout - 多 Ingress 覆盖顺序:同 host 的规则可能被后创建的资源覆盖,保持规则集中管理
- WebSocket 断连:开启
enable-websocket,并检查长连接超时策略
FAQ
- 如何固定公网IP?在云上使用 LB 绑定静态 IP;本地可使用 MetalLB
- 支持 gRPC 吗?支持,配置
nginx.ingress.kubernetes.io/backend-protocol: "GRPC" - 多租户隔离?按命名空间划分 + 路由规范 + RBAC;必要时多控制器分池运行
总结
Ingress NGINX 功能强大但配置众多。遵循“最小暴露面、最少正则、就近TLS终止、链路可观测”的原则,结合灰度、限速与审计,可在可靠与安全之间取得良好平衡。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Zelang's Blog
评论 ()




