Kubernetes Ingress 全方位解析

模块 1:基础概念与核心组件

1.1 Ingress 是什么?

  • 定义:Kubernetes 中管理外部访问集群服务的 API 对象,提供 HTTP/HTTPS 路由、负载均衡和 TLS 终止等功能

  • 与 Service 的区别

    • Service 提供 L4 层代理(TCP/UDP)

    • Ingress 实现 L7 层代理(HTTP/HTTPS)并提供更智能的路由规则

1.2 Ingress 的诞生背景

  • Kubernetes 服务暴露的痛点
    • Service 类型(NodePort/LB)无法实现复杂路由
    • 多个服务需暴露多个端口或 IP
    • 缺乏统一的 TLS 管理
  • Ingress 的定位
    • 作为集群入口的 "智能网关"
    • 实现单 IP 多服务复用
    • 支持 HTTP/HTTPS 的高级路由策略

1.3 核心组件

组件作用典型示例
Ingress Resource定义路由规则的 YAML 资源kind: Ingress
Ingress Controller实际执行路由规则的控制器Nginx, Traefik, HAProxy
Annotations控制器特定配置扩展nginx.ingress.kubernetes.io/rewrite-target

数据流路径

  1. 客户端请求到达 Ingress Controller
  2. Controller 解析 Ingress 规则
  3. 根据规则路由到后端 Service
  4. Service 转发到对应的 Pod

1.4 关键组件详解

1.4.1 Ingress Resource
# 完整字段说明
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx # 指定控制器类型
  tls: # TLS配置
    - hosts:
      - demo.example.com
      secretName: tls-secret
  rules: # 路由规则
    - host: demo.example.com
      http:
        paths:
          - path: /app
            pathType: Prefix
            backend:
              service:
                name: app-service
                port:
                  number: 80
1.4.2 Ingress Controller
组件功能实现机制扩展能力
动态配置更新监听 Ingress 资源变更支持热加载(如 Nginx reload)
健康检查主动探测后端 Service 的 Endpoints自定义健康检查路径
负载均衡算法轮询 / 最少连接 / IP 哈希支持第三方算法扩展

1.4.3 核心工作流程

1.5 协议支持扩展

1.5.1 WebSocket 支持
annotations:
  nginx.ingress.kubernetes.io/configuration-snippet: |
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
1.5.2 gRPC 协议透传
annotations:
  nginx.ingress.kubernetes.io/grpc-services: '{"grpc-demo": "grpc-service:50051"}'

1.6 核心优势对比

功能ServiceIngress
协议层L4(TCP/UDP)L7(HTTP/HTTPS)
路由能力端口转发路径 / 主机 / Header 路由
TLS 支持需 Pod 自行处理统一终止和管理
负载均衡简单轮询支持复杂算法
扩展性有限通过注解灵活扩展

模块 2:工作原理深度解析

2.1 配置生效流程

  1. 用户提交 Ingress YAML 到 API Server
  2. Ingress Controller 通过 List-Watch 机制获取变更
  3. 控制器解析规则生成配置文件(如 Nginx 的 conf 文件)
  4. 重新加载配置或重启服务使变更生效

2.2 路由匹配优先级

  1. 精确路径匹配(PathType: Exact)
  2. 最长前缀匹配(PathType: Prefix)
  3. 正则表达式匹配(需自定义配置)

示例说明

paths:
  - path: /exact
    pathType: Exact
  - path: /prefix/
    pathType: Prefix
  - path: /wildcard/*
    pathType: Prefix

2.3 服务发现机制

  • 自动发现后端 Service 的 Endpoints
  • 支持静态 IP 配置(需特殊配置)
  • 集成服务网格(如 Istio 服务发现)

模块 3:典型应用场景

3.1 单入口多服务

3.2 多租户隔离

spec:
  rules:
  - host: tenant1.example.com
    http:
      paths:
      - path: /
        backend: tenant1-service:80
  - host: tenant2.example.com
    http:
      - path: /
        backend: tenant2-service:8080

3.3 混合协议支持

# 同时支持HTTP和HTTPS
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend: http-service:80
  - host: secure.example.com
    http:
      paths:
      - path: /
        backend: https-service:443

模块 4:关键术语解释

术语定义示例说明
Ingress Class定义控制器类型nginx/traefik/alb
Path Type路径匹配方式Exact/Prefix/ImplementationSpecific
Backend后端服务引用serviceName:portNumber
Virtual Host基于域名的路由*.example.com
TLS TerminationSSL 解密位置在 Ingress 层终止

模块 5:与其他组件的协同

5.1 与 Service 的关系

5.2 与 ConfigMap 的集成

# 自定义Nginx配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  proxy-connect-timeout: "60"
---
# Ingress引用ConfigMap
annotations:
  nginx.ingress.kubernetes.io/configuration-snippet: |
    include /etc/nginx/nginx-config.conf;

5.3 与 HPA 的联动

# 基于Ingress流量自动扩缩容
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app-deployment
  metrics:
  - type: Pods
    pods:
      metric:
        name: nginx_ingress_controller_requests
      target:
        type: AverageValue
        averageValue: 1000

模块 6:版本演进

6.1 API 版本历史

版本发布时间主要特性
extensions/v1beta12016-07初始版本,非标准字段
networking.k8s.io/v1beta12018-11标准化字段,支持 IngressClass
networking.k8s.io/v12020-12稳定版,废弃部分旧字段

6.2 未来演进方向

  • Gateway API(Kubernetes SIG 网络工作组主导)
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
spec:
  gatewayClassName: "haproxy"
  listeners:
    - name: http
      protocol: HTTP
      port: 80

模块 7:性能对比测试

7.1 基准测试数据

控制器并发连接数请求速率(RPS)延迟(ms)
Nginx10,00048,0001.2
Traefik8,00042,0001.5
HAProxy12,00062,0000.9

7.2 资源消耗对比

# Nginx资源占用示例
CPU: 100-200m
Memory: 50-100Mi

模块 8:常见错误场景

8.1 配置错误排查

# 查看Ingress事件
kubectl describe ingress <ingress-name>

# 检查控制器日志
kubectl logs -n ingress-nginx <pod-name>

8.2 常见错误码

错误码可能原因解决方案
404路径匹配失败检查 PathType 配置
502后端服务无响应验证 Service Endpoints
503负载均衡超时调整 proxy-timeout 参数

通过以上补充,读者将获得:

  1. 从架构演进到协议扩展的完整知识链
  2. 关键组件的深度解析与工作流程
  3. 与其他 Kubernetes 资源的协同机制
  4. 版本演进与未来技术方向
  5. 性能对比与错误排查方法论

建议结合以下实践操作:

  1. 使用 kubectl explain ingress 查看完整 API 文档
  2. 通过 curl -X OPTIONS http://<ingress-ip> 测试 CORS 配置
  3. 使用 k9s 可视化工具监控 Ingress 状态

模块 9:高级功能解析

9.1 流量控制进阶

  1. Canary 发布

    annotations:
      nginx.ingress.kubernetes.io/canary: "true"
      nginx.ingress.kubernetes.io/canary-weight: "30"

  2. 基于 Header 的路由

    annotations:
      nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
     
  3. 请求速率限制

    annotations:
      nginx.ingress.kubernetes.io/limit-rpm: "100"
     

9.2 多集群路由

通过 ExternalDNS + Global Load Balancer 实现跨集群流量分发:

Cluster A (us-west) <--> [Global LB] <--> Cluster B (us-east)
 

9.3 自定义资源扩展

Gateway API(下一代 Ingress):

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
spec:
  parentRefs:
  - name: external-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /shop
    backendRefs:
    - name: shop-service
      port: 80

模块 10:生态系统扩展

10.1 主流 Ingress Controller 对比

特性Nginx IngressTraefikHAProxy Ingress
配置方式注解CRD注解+CRD
协议支持HTTP/HTTPS/GRPCHTTP/HTTPS/GRPCL4-L7
性能基准50k RPS45k RPS65k RPS

10.2 Service Mesh 集成

Istio + Ingress Gateway 架构:

外部流量 → Istio Ingress Gateway → VirtualService → Pod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值