Ingress实战
Kubernetes Ingress实战手册:解锁七层流量的核心技能
作为Kubernetes网络体系中的"流量指挥官",Ingress是每个云原生开发者必须掌握的利器。本文将带你从生产视角,深度剖析Ingress的六大核心能力。
一、Ingress的本质:七层流量的智能路由器
如果把K8s集群比作一座大型商场:
- Service是每家店铺的后门(ClusterIP)
- LoadBalancer是直达店铺的VIP通道(昂贵)
- Ingress则是商场的正门大厅+智能导购台
核心价值:
- 统一入口:一个IP承载所有服务
- 智能路由:根据URL路径、域名分流
- 安全防护:集中管理SSL/TLS证书
- 成本优化:减少云厂商LB数量
二、生产级六大核心能力
1. 路径路由(Path-Based Routing)
场景:微服务架构中多服务共享域名
示例配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-routing
spec:
rules:
- host: api.company.com
http:
paths:
- path: /user-service
pathType: Prefix
backend:
service:
name: user-service
port: 8080
- path: /order-service
backend:
service:
name: order-service
port: 80
避坑指南:
- 使用
pathType: Exact精确匹配时,需严格校验路径大小写 - 避免路径冲突,如同时存在
/api和/api/v2
2. 多域名路由(Host-Based Routing)
场景:SaaS平台多租户隔离
配置示例:
rules:
- host: tenant-a.company.com
http:
paths:
- backend:
service:
name: tenant-a-service
port: 80
- host: tenant-b.company.com
http:
paths:
- backend:
service:
name: tenant-b-service
port: 80
3. TLS证书集中管理
生产实践:
- 创建证书Secret:
kubectl create secret tls prod-tls \ --cert=fullchain.pem \ --key=privkey.pem - Ingress配置:
tls: - hosts: - "*.company.com" secretName: prod-tls
高级技巧:
- 使用Cert-Manager实现自动证书续期
- 配置HSTS增强安全性
annotations: nginx.ingress.kubernetes.io/hsts: "true"
4. 流量控制与防护
关键配置项:
annotations:
# 限速(100请求/秒,突发50)
nginx.ingress.kubernetes.io/limit-rps: "100"
nginx.ingress.kubernetes.io/limit-burst: "50"
# 连接数限制
nginx.ingress.kubernetes.io/limit-connections: "100"
# 黑白名单
nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.0/24"
5. 请求重写与重定向
场景:版本迁移时路径调整
配置示例:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /v1(/|$)(.*)
backend:
service:
name: v2-service
6. 金丝雀发布(Canary Release)
渐进式流量切换:
# 金丝雀版本Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: canary-demo
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
rules:
- host: api.company.com
http:
paths:
- backend:
service:
name: canary-service
port: 80
三、Ingress控制器选型指南
| 控制器 | 适用场景 | 核心优势 |
|---|---|---|
| Nginx | 通用场景 | 功能全面,社区生态强大 |
| Traefik | 动态配置需求 | 自动服务发现,配置简洁 |
| ALB | AWS EKS环境 | 深度云集成,无节点维护 |
| HAProxy | 高性能要求 | 低延迟,高并发处理能力 |
部署建议:
# 使用Helm部署Nginx Ingress
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--set controller.replicaCount=3 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."kubernetes\.io/os"=linux
四、生产环境高可用架构
典型拓扑:
[云厂商LB]
|
[Ingress Controller Pods]
/ | \
Service A Service B Service C
优化策略:
- 多副本部署:至少3个Controller实例
- Pod反亲和性:
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/component operator: In values: [controller] topologyKey: kubernetes.io/hostname - 资源限制:
resources: limits: cpu: 2000m memory: 2Gi requests: cpu: 500m memory: 512Mi
五、监控与排障实战
关键监控指标:
- 请求成功率(2xx/5xx)
- 延迟分布(P50/P95/P99)
- 连接数/吞吐量
Prometheus配置示例:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
日志分析技巧:
# 查看实时访问日志
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=100 -f
# 常见错误码排查:
# 499 - 客户端主动断开(检查后端超时设置)
# 502 - 后端不可达(检查Service Endpoints)
# 413 - 请求体过大(调整client_max_body_size)
六、进阶:Ingress与Service Mesh集成
Istio Gateway vs Ingress:
- Ingress:L7基础路由
- Istio Gateway:支持更复杂的流量策略(熔断、金丝雀、故障注入)
混合架构示例:
外部流量 → Istio Gateway → VirtualService → Ingress → 传统服务
总结
Ingress不是简单的端口暴露工具,而是K8s网络体系中的战略要地。掌握以下原则:
- 入口统一化:收敛外部暴露点
- 配置声明式:版本控制所有路由规则
- 防护前置化:在入口层实施安全策略
- 监控可视化:实时掌握流量态势
记住:优秀的Ingress配置是业务稳定性的第一道防线。现在就去检查你的Ingress配置,是否做到了"进可攻、退可守"?
浙公网安备 33010602011771号