K8s Ingress 详解
1. ⚡ Ingress 与 Service 对比
| 特性 | Service | Ingress |
|---|---|---|
| 层级 | 四层(TCP/UDP) | 七层(HTTP/HTTPS) |
| 路由依据 | IP + 端口 | 域名 + 路径 |
| TLS 终止 | ❌ 不支持 | ✅ 支持 |
| 会话保持 | 源 IP | Cookie(生产首选) |
| URL 重写 | ❌ 不支持 | ✅ 支持 |
| 每服务独立端口 | ✅ 需要 | ❌ 统一 80/443 |
2. 🔧 Ingress 核心概念
| 术语 | 说明 |
|---|---|
| Ingress | K8s API 对象,定义路由规则(期望状态) |
| Ingress Controller | 实际处理流量的反向代理/负载均衡器 |
| Ingress Class | Ingress 分类,集群可部署多个 Ingress Controller |
⚠️ 面试重点:Ingress 资源本身不做流量转发,必须部署 Ingress Controller 才会生效。
3. ⚙️ 配置示例
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
4. 🚀 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
5. 🌐 面试考点
5.1. 面试题:Ingress 和 Service 的关系?
- Ingress 是七层,Service 是四层
- Ingress 依赖 Ingress Controller 才能工作
- Ingress 统一入口 + TLS,Service 是后端转发
- 生产架构:LoadBalancer → Ingress → Service → Pod
5.2. 面试题:Ingress Controller 和 Ingress 的区别?
- Ingress 是 声明式 API 资源
- Ingress Controller 是 实际运行的负载均衡器
- Controller 持续 watch Ingress 资源变化,动态更新配置
- 没有 Controller 的 Ingress = 空配置
关联文档
- K8s Service 核心原理:Service 四层转发底层原理
- K8s Service DNS 实现原理:CoreDNS 域名解析
- kube-proxy 流量转发与代理模式详解:流量转发底层机制
- 网络:七层/四层网络基础
- K8s 核心概念:基础概念
- K8s 组件详解:组件说明
