模块 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 |
数据流路径:
- 客户端请求到达 Ingress Controller
- Controller 解析 Ingress 规则
- 根据规则路由到后端 Service
- 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 核心优势对比
功能 | Service | Ingress |
---|---|---|
协议层 | L4(TCP/UDP) | L7(HTTP/HTTPS) |
路由能力 | 端口转发 | 路径 / 主机 / Header 路由 |
TLS 支持 | 需 Pod 自行处理 | 统一终止和管理 |
负载均衡 | 简单轮询 | 支持复杂算法 |
扩展性 | 有限 | 通过注解灵活扩展 |
模块 2:工作原理深度解析
2.1 配置生效流程
- 用户提交 Ingress YAML 到 API Server
- Ingress Controller 通过 List-Watch 机制获取变更
- 控制器解析规则生成配置文件(如 Nginx 的 conf 文件)
- 重新加载配置或重启服务使变更生效
2.2 路由匹配优先级
- 精确路径匹配(PathType: Exact)
- 最长前缀匹配(PathType: Prefix)
- 正则表达式匹配(需自定义配置)
示例说明:
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 Termination | SSL 解密位置 | 在 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/v1beta1 | 2016-07 | 初始版本,非标准字段 |
networking.k8s.io/v1beta1 | 2018-11 | 标准化字段,支持 IngressClass |
networking.k8s.io/v1 | 2020-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) |
---|---|---|---|
Nginx | 10,000 | 48,000 | 1.2 |
Traefik | 8,000 | 42,000 | 1.5 |
HAProxy | 12,000 | 62,000 | 0.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 参数 |
通过以上补充,读者将获得:
- 从架构演进到协议扩展的完整知识链
- 关键组件的深度解析与工作流程
- 与其他 Kubernetes 资源的协同机制
- 版本演进与未来技术方向
- 性能对比与错误排查方法论
建议结合以下实践操作:
- 使用
kubectl explain ingress
查看完整 API 文档 - 通过
curl -X OPTIONS http://<ingress-ip>
测试 CORS 配置 - 使用
k9s
可视化工具监控 Ingress 状态
模块 9:高级功能解析
9.1 流量控制进阶
-
Canary 发布:
annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-weight: "30"
-
基于 Header 的路由:
annotations: nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
-
请求速率限制:
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 Ingress | Traefik | HAProxy Ingress |
---|---|---|---|
配置方式 | 注解 | CRD | 注解+CRD |
协议支持 | HTTP/HTTPS/GRPC | HTTP/HTTPS/GRPC | L4-L7 |
性能基准 | 50k RPS | 45k RPS | 65k RPS |
10.2 Service Mesh 集成
Istio + Ingress Gateway 架构:
外部流量 → Istio Ingress Gateway → VirtualService → Pod