目录
1. 什么是 Ingress-Nginx?
- 定位:
ingress-nginx
是 Kubernetes 生态中最流行的 Ingress 控制器之一,基于 Nginx 实现,用于管理集群外部的 HTTP(S)/WebSocket 流量路由。 - 作用:
- 将外部请求根据域名、路径等规则转发到内部服务。
- 提供负载均衡、SSL 终止、静态文件托管、限流等 Web 服务器功能。
ingress-nginx
是 Kubernetes 中用于管理外部访问集群内服务的 Ingress 控制器,基于广泛使用的 Nginx 反向代理和负载均衡器。它是 Kubernetes Ingress API 的一种实现,允许通过声明式配置将 HTTP/HTTPS 流量路由到集群内的服务
(1) Ingress 的基本概念
- Ingress:Kubernetes 资源对象,定义外部流量如何路由到集群内部服务(类似于反向代理)。
- Ingress Controller:实际执行 Ingress 规则的组件,监听 Ingress 资源的变化并动态配置负载均衡器( Nginx)。
(2)工作流程
- 用户创建
Ingress
资源定义路由规则。 ingress-nginx
控制器监听这些资源的变化。- 控制器生成 Nginx 配置并热加载(不需要重启nginx)。
- 外部流量通过 Nginx 代理路由到后端服务。
2. 核心组件
(1) Ingress 资源
Kubernetes 的 Ingress
对象定义了流量规则,例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: www.example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
(2) Ingress-Nginx 控制器
部署在集群中的 Nginx Pod,监听 80
和 443
端口,动态生成 Nginx 配置文件并同步到所有 Pod。
(3) ConfigMap & Secret
- ConfigMap:存储全局 Nginx 配置(如日志格式、代理设置)。
- Secret:保存敏感信息(SSL 证书、认证凭证)。
3. 核心功能
(1) 路由规则
- 基于 Host:不同域名指向不同服务。
- 基于 Path:同一域名下按路径分发流量(如
/api
→ Service A,/blog
→ Service B)。 - 支持正则表达式:匹配复杂路径模式。
(2) 负载均衡
- 默认使用轮询(Round Robin),可通过注解配置其他算法:
nginx.ingress.kubernetes.io/load-balance: least_conn #最少连接数
(3) SSL 终止
- 支持在 Ingress 层面终止 HTTPS(需绑定 SSL 证书):
tls: - hosts: - www.example.com secretName: example-tls
(4) 静态文件托管
通过 default-backend
指定静态文件目录,直接响应请求:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: static-site
spec:
defaultBackend:
service:
name: nginx-static
port:
number: 80
4. 进阶配置
(1) Websocket 支持
启用 WebSocket 协议并配置超时:
apiVersion: nginx.ingress.kubernetes.io/v1
kind: Ingress
metadata:
name: mynginx
annotations:
nginx.ingress.kubernetes.io/websocket: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"
spec:
....
(2) 限流与速率限制
通过 limit-rps
和 limit-burst
控制请求频率:
apiVersion: nginx.ingress.kubernetes.io/v1
kind: Ingress
metadata:
name: rate-limit
annotations:
nginx.ingress.kubernetes.io/limit-rps: "5"
nginx.ingress.kubernetes.io/limit-burst: "10"
spec:
...
5. 部署与运维
使用 Helm Chart:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-ingress ingress-nginx/ingress-nginx
监控与日志
- Metrics:暴露 Prometheus 端点(默认端口 :
9101
)。 - 日志:通过
kubectl logs -n ingress-nginx <pod-name>
查看访问日志。
常见问题
- 证书过期:更新
Secret
中的 SSL 证书。 - 流量未转发:检查 Service 的端口和 Selector 是否匹配。
- Nginx 配置未生效:确认注解语法正确,或通过
kubectl exec
重启 Pod。
6. 对比其他 Ingress 控制器
控制器 | 优势 | 劣势 |
---|---|---|
Ingress-Nginx | 社区活跃,功能全面,文档丰富 | 配置复杂度较高 |
Traefik | 简洁易用,自动 HTTPS | 生态集成较少 |
Istio | 集成服务网格,高级流量管理 | 学习曲线陡峭,资源占用高 |
总结
ingress-nginx
是 Kubernetes 中处理外部流量的强大工具,适合需要灵活路由、负载均衡和安全性的场景。通过合理利用其注解、CRD 和 Secret,可以构建高效稳定的 Web 服务入口。