Ingress实战

Kubernetes Ingress实战手册:解锁七层流量的核心技能

作为Kubernetes网络体系中的"流量指挥官",Ingress是每个云原生开发者必须掌握的利器。本文将带你从生产视角,深度剖析Ingress的六大核心能力。


一、Ingress的本质:七层流量的智能路由器

如果把K8s集群比作一座大型商场:

  • Service是每家店铺的后门(ClusterIP)
  • LoadBalancer是直达店铺的VIP通道(昂贵)
  • Ingress则是商场的正门大厅+智能导购台

核心价值

  1. 统一入口:一个IP承载所有服务
  2. 智能路由:根据URL路径、域名分流
  3. 安全防护:集中管理SSL/TLS证书
  4. 成本优化:减少云厂商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证书集中管理

生产实践

  1. 创建证书Secret:
    kubectl create secret tls prod-tls \
      --cert=fullchain.pem \
      --key=privkey.pem
    
  2. 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

优化策略

  1. 多副本部署:至少3个Controller实例
  2. Pod反亲和性
    affinity:
      podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
            - key: app.kubernetes.io/component
              operator: In
              values: [controller]
          topologyKey: kubernetes.io/hostname
    
  3. 资源限制
    resources:
      limits:
        cpu: 2000m
        memory: 2Gi
      requests:
        cpu: 500m
        memory: 512Mi
    

五、监控与排障实战

关键监控指标

  1. 请求成功率(2xx/5xx)
  2. 延迟分布(P50/P95/P99)
  3. 连接数/吞吐量

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网络体系中的战略要地。掌握以下原则:

  1. 入口统一化:收敛外部暴露点
  2. 配置声明式:版本控制所有路由规则
  3. 防护前置化:在入口层实施安全策略
  4. 监控可视化:实时掌握流量态势

记住:优秀的Ingress配置是业务稳定性的第一道防线。现在就去检查你的Ingress配置,是否做到了"进可攻、退可守"?

posted on 2025-03-12 14:42  Leo-Yide  阅读(96)  评论(0)    收藏  举报