☸️ K8s Ingress 详解
Ingress 是 Kubernetes 的 七层 HTTP/HTTPS 路由 资源,将外部流量按域名/路径分发到不同的 Service。
📖 为什么需要 Ingress?Service 的局限性
Service 只能做 4 层转发(IP+端口),不能做 7 层路由(域名/路径/SSL/重写)。
假设集群里有 10 个网站:shop.service.com、user.service.com、pay.service.com…
如果只用 LoadBalancer/NodePort:
- 每个 Service 需要一个独立的 LoadBalancer → 成本飙升
- 客户端必须知道每个服务的端口号 → 不友好
- 无法实现基于域名/路径的路由
- SSL 终止需要在每个 Service 单独处理
Ingress 的解决方案:
- 一个统一的公网入口
- 按域名 + 路径路由到不同 Service
- 集中管理 SSL 证书(TLS 终止)
- 支持 URL 重写、连接超时等七层能力
⚡ Ingress 与 Service 对比
| 特性 | Service | Ingress |
|---|---|---|
| 层级 | 四层(TCP/UDP) | 七层(HTTP/HTTPS) |
| 路由依据 | IP + 端口 | 域名 + 路径 |
| TLS 终止 | ❌ 不支持 | ✅ 支持 |
| 会话保持 | 源 IP | Cookie(生产首选) |
| URL 重写 | ❌ 不支持 | ✅ 支持 |
| 每服务独立端口 | ✅ 需要 | ❌ 统一 80/443 |
🔧 Ingress 核心概念
| 术语 | 说明 |
|---|---|
| Ingress | K8s API 对象,定义路由规则(期望状态) |
| Ingress Controller | 实际处理流量的反向代理/负载均衡器 |
| Ingress Class | Ingress 分类,集群可部署多个 Ingress Controller |
⚠️ 面试重点:Ingress 资源本身不做流量转发,必须部署 Ingress Controller 才会生效。
⚙️ 配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
tls:
- hosts:
- app.example.com
secretName: app-tls-secret
🚀 Ingress Controller 工作原理
客户端请求(app.example.com)
↓ DNS 解析到 Ingress Controller 公网 IP
↓ Ingress Controller 收到请求
↓ 匹配 Ingress 规则(host + path)
↓ 转发到对应的 ClusterIP Service
↓ Service 通过 kube-proxy DNAT 到后端 Pod
常见 Ingress Controller:nginx-ingress(生产最常用)、Traefik、HAProxy Ingress、云厂商 ALB Ingress
🌐 面试考点
面试题:Ingress 和 Service 的关系?
- Ingress 是七层,Service 是四层
- Ingress 依赖 Ingress Controller 才能工作
- Ingress 统一入口 + TLS,Service 是后端转发
- 生产架构:LoadBalancer → Ingress → Service → Pod
面试题:Ingress Controller 和 Ingress 的区别?
- Ingress 是 声明式 API 资源
- Ingress Controller 是 实际运行的负载均衡器
- Controller 持续 watch Ingress 资源变化,动态更新配置
- 没有 Controller 的 Ingress = 空配置
关联文档
- ../service/K8s Service 核心原理 — Service 四层转发底层原理
- ../service/K8s Service DNS 实现原理 — CoreDNS 域名解析
- kube-proxy 流量转发与代理模式详解 — 流量转发底层机制
- ../../network/网络 — 七层/四层网络基础
关联文档