1. Ingress-Nginx 核心概念解析
在Kubernetes集群中,服务暴露和流量管理一直是运维人员面临的核心挑战。传统做法是通过NodePort或LoadBalancer类型的Service来暴露服务,但这些方式在复杂路由、TLS终止等场景下显得力不从心。这正是Ingress-Nginx发挥作用的地方。
1.1 Ingress 的本质与价值
Ingress不是具体的服务,而是Kubernetes中的一种API对象,它定义了从集群外部到内部服务的HTTP/HTTPS路由规则。可以把Ingress理解为集群的"智能路由网关",它基于以下要素进行流量分发:
- 主机名(如api.example.com)
- URL路径(如/v1/users)
- 请求头等特征
与常规Service相比,Ingress的核心优势在于:
- 精细化路由:支持基于域名和路径的多服务共享同一IP
- 集中式TLS管理:可以在Ingress层面统一处理HTTPS证书
- 七层流量特征:支持基于HTTP协议的复杂路由规则
1.2 Ingress控制器的工作机制
Ingress资源本身不会产生任何效果,必须配合Ingress控制器才能工作。控制器的主要职责包括:
- 持续监控Ingress资源的变化
- 动态生成Nginx配置
- 热加载Nginx服务
- 处理证书生命周期
当创建一个Ingress资源时,控制器会:
bash复制1. 监听API Server的Ingress变更事件
2. 校验规则有效性
3. 转换为Nginx配置片段
4. 合并到主配置文件
5. 执行nginx -s reload
1.3 Ingress-Nginx的架构特点
官方Ingress-Nginx控制器采用以下架构设计:
- 控制循环:使用client-go库监听Kubernetes API
- Nginx进程:运行在Pod中的主工作进程
- Lua扩展:通过OpenResty增强功能
- 动态配置:通过共享内存实现配置热更新
数据平面处理流量的典型路径:
code复制外部请求 → 节点端口 → Service iptables → Nginx Pod → 后端Pod
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 生产级部署方案详解
2.1 Helm部署最佳实践
2.1.1 定制化配置要点
修改values.yaml时需要特别关注以下参数:
yaml复制controller:
replicaCount: 3 # 根据集群规模调整
hostNetwork: false # 云环境建议关闭
dnsPolicy: ClusterFirst
service:
type: LoadBalancer # 云环境使用
externalTrafficPolicy: Local # 保持源IP
resources:
requests:
cpu: 1000m
memory: 1Gi
affinity: # 反亲和性配置
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
