深入解析 Kubernetes Ingress:类型、配置与最佳实践
个人名片
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?
- 专栏导航:
码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀
目录
深入解析 Kubernetes Ingress:类型、配置与最佳实践
目录
- 引言
- 什么是 Kubernetes Ingress?
- Ingress 的核心类型
- 3.1 按协议分类
- 3.2 按路由规则分类
- 3.3 按 TLS 分类
- 3.4 按控制器实现分类
- 3.5 特殊类型
- 常见 Ingress 控制器对比
- 实战配置示例
- 5.1 HTTP/HTTPS Ingress
- 5.2 TCP/UDP Ingress(Nginx 示例)
- 5.3 Canary 发布
- 最佳实践与注意事项
- 总结
1. 引言
Kubernetes Ingress 是管理集群外部访问的核心组件,它提供了灵活的流量路由、TLS 终止和负载均衡能力。然而,Ingress 的类型和功能因控制器不同而有所差异,选择合适的 Ingress 策略对架构设计至关重要。
本文将系统介绍 Kubernetes Ingress 的不同类型、适用场景,并提供详细的配置示例,帮助读者掌握 Ingress 的高级用法。
2. 什么是 Kubernetes Ingress?
Ingress 是 Kubernetes 的一种 API 对象,用于定义外部访问集群服务的规则。它不同于 Service(仅提供内部负载均衡),而是通过 Ingress 控制器(如 Nginx、Traefik) 实现 L7 路由、SSL 卸载和域名管理。
核心功能:
- 基于 Host 或 Path 路由请求
- 支持 TLS 加密(HTTPS)
- 提供 负载均衡 能力
- 扩展功能(如流量镜像、金丝雀发布)
3. Ingress 的核心类型
3.1 按协议分类
(1) HTTP/HTTPS Ingress
最常见的类型,适用于 Web 应用。支持基于路径或域名的路由,并可配置 TLS 证书。
示例配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: http-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
tls:
- hosts:
- example.com
secretName: tls-secret # 引用存储证书的 Secret
(2) TCP/UDP Ingress
适用于非 HTTP 服务(如 MySQL、Redis)。需通过 Ingress 控制器的扩展功能实现。
Nginx 示例:
- 修改 Nginx Ingress 控制器配置:
# nginx-tcp-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: 3306: "default/mysql-service:3306" # 将 3306 端口映射到 MySQL Service - 更新 Ingress 控制器启动参数:
args: - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
3.2 按路由规则分类
(1) 单服务 Ingress
直接转发所有流量到指定服务,适用于简单场景。
spec:
defaultBackend:
service:
name: default-service
port:
number: 80
(2) 基于路径的路由
如 /api 转发到后端 API 服务,/static 转发到静态资源服务。
(3) 基于域名的路由
不同域名(如 a.example.com 和 b.example.com)路由到不同服务。
3.3 按 TLS 分类
(1) TLS 终止
在 Ingress 控制器处解密 HTTPS,明文转发到后端。
tls:
- hosts:
- example.com
secretName: tls-secret
(2) SSL 透传(Passthrough)
加密流量直达后端(如金融类应用)。需 Nginx 或 Traefik 支持。
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
3.4 按控制器实现分类
| 控制器 | 特点 |
|---|---|
| Nginx | 支持 HTTP/HTTPS、TCP/UDP、重写规则、Canary 发布 |
| Traefik | 动态配置,支持中间件(熔断、重试) |
| AWS ALB | 深度集成 AWS,支持 ALB 特性(如 WAF、跨可用区负载均衡) |
| Istio | 基于 Gateway + VirtualService,提供高级流量管理(如 A/B 测试) |
3.5 特殊类型
(1) Canary Ingress
逐步灰度发布新版本,适用于 CI/CD。
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20" # 20% 流量到新版本
(2) 外部服务 Ingress
路由到集群外服务(类似 ExternalName Service)。
4. 常见 Ingress 控制器对比
| 功能 | Nginx | Traefik | AWS ALB | Istio |
|---|---|---|---|---|
| HTTP/HTTPS | ✅ | ✅ | ✅ | ✅ |
| TCP/UDP | ✅ | ✅ | ❌ | ❌ |
| 动态配置 | ❌ | ✅ | ❌ | ✅ |
| 金丝雀发布 | ✅ | ✅ | ❌ | ✅ |
| 服务网格集成 | ❌ | ❌ | ❌ | ✅ |
5. 实战配置示例
5.1 基础 HTTP Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: myapp.com
http:
paths:
- path: /
backend:
service:
name: frontend
port:
number: 80
5.2 金丝雀发布(Canary)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: canary-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
spec:
rules:
- host: myapp.com
http:
paths:
- path: /
backend:
service:
name: frontend-v2 # 30% 流量到新版本
port:
number: 80
6. 最佳实践
- 使用 HTTPS:始终配置 TLS 终止,避免明文传输。
- 限制访问:通过
whitelist-source-range注解限制 IP 访问。 - 监控:集成 Prometheus 监控 Ingress 流量和错误率。
- HPA 结合:根据 Ingress 流量自动扩缩容后端 Pod。
7. 总结
Kubernetes Ingress 提供了强大的流量管理能力,但选择合适的类型和控制器至关重要。本文介绍了 HTTP/HTTPS、TCP/UDP、Canary 等常见模式,并提供了 Nginx、Traefik 的配置示例。
在实际生产环境中,建议:
- 云环境:优先使用云厂商提供的 Ingress 控制器(如 AWS ALB)。
- 自建集群:选择功能丰富的控制器(如 Nginx + Lua 扩展)。
- 服务网格:考虑 Istio 实现高级流量管理。
通过合理设计 Ingress 策略,可以显著提升 Kubernetes 应用的可用性、安全性和可维护性。


浙公网安备 33010602011771号