Kubernetes Ingress-Nginx 使用中的杂项配置详解
概述
本文将深入探讨 Kubernetes Ingress-Nginx 控制器在实际使用中的一些重要配置项和注意事项,帮助用户更好地理解和优化其 Ingress 配置。
客户端真实 IP 地址处理
在 Kubernetes 环境中,正确处理客户端真实 IP 地址对于日志记录、访问控制等场景至关重要。Ingress-Nginx 提供了多种机制来处理这个问题:
1. X-Forwarded-For 头部方式
默认情况下,Nginx 使用 X-Forwarded-For 请求头来获取客户端 IP 信息。要使此功能正常工作,必须正确配置:
use-forwarded-headers: "true"
proxy-real-ip-cidr: "信任的负载均衡器IP/网络地址"
在 AWS 环境中,通常需要使用 VPC 的 IPv4 CIDR 范围。
2. PROXY 协议方式
当使用 L4 代理时,可以通过启用 PROXY 协议来保留客户端 IP:
use-proxy-protocol: "true"
混合环境配置示例:当同时存在 L7 代理和 L4 负载均衡器时,建议同时启用两种方式:
use-proxy-protocol: "true"
use-forwarded-headers: "true"
proxy-real-ip-cidr: "10.0.0.0/8,192.168.0.0/16,..."
重要提示:务必根据实际环境配置正确的 CIDR 范围。
路径类型详解
Kubernetes Ingress 资源中的每个路径都必须明确指定路径类型:
- 默认使用
Prefix类型以保持向后兼容 - 其他可选类型包括
Exact和ImplementationSpecific - 未指定路径类型的 Ingress 定义将无法通过验证
WebSocket 支持配置
Ingress-Nginx 原生支持 WebSocket 协议,但需要进行以下优化配置:
-
增加超时时间设置:
proxy-read-timeout: "3600" proxy-send-timeout: "3600"默认 60 秒的超时时间对于 WebSocket 连接来说太短,建议设置为 1 小时以上。
-
当使用
LoadBalancer类型服务暴露控制器时,确保负载均衡器与 Nginx 之间使用 TCP 协议而非 HTTP。
TLS 性能优化
优化 TLS 首字节时间(TTFB)的关键配置:
ssl_buffer_size: "4k"
- 默认值为 4k(Nginx 原生默认值为 16k)
- 较小的值可以减少 TLS 记录大小,提高首字节到达时间
- 可根据实际网络条件调整此值
非幂等方法的请求重试
从 Nginx 1.9.13 开始,默认不会对非幂等方法(POST、LOCK、PATCH 等)进行重试。如需恢复旧有行为:
retry-non-idempotent: "true"
架构设计要点
为什么直接使用 Endpoints 而非 Service
Ingress-Nginx 控制器直接使用 Kubernetes Endpoints API 而非 Service 资源来路由流量,这种设计带来了以下优势:
-
绕过 kube-proxy,实现更灵活的功能:
- 会话保持(Session Affinity)
- 自定义负载均衡算法
-
减少性能开销:
- 避免创建 iptables DNAT 的 conntrack 条目
- 提高网络性能
重要限制说明
- TLS 类型的 Ingress 规则必须明确指定
host字段 - 路径定义必须包含明确的 pathType
- 在复杂网络拓扑中,客户端 IP 获取需要仔细配置
最佳实践建议
- 在生产环境中,始终明确配置路径类型
- 使用 WebSocket 时,务必调整超时设置
- 在云环境中,仔细配置客户端 IP 相关设置
- 定期检查并优化 TLS 相关参数
- 根据应用特性谨慎决定是否启用非幂等方法的重试
通过合理配置这些杂项参数,可以充分发挥 Ingress-Nginx 控制器的潜力,构建高性能、可靠的 Kubernetes 入口解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



