Ingress原理:七层流量的路由管家
Ingress的基本概念
Ingress是Kubernetes中的一种API对象,用于管理外部访问集群内部服务的规则。它充当七层(应用层)流量的路由管家,提供HTTP和HTTPS路由的负载均衡、基于名称的虚拟主机、SSL/TLS终止等功能。
Ingress的核心功能
流量路由
Ingress通过定义规则将外部请求路由到集群内部的服务。这些规则可以基于主机名、路径或两者组合进行匹配。例如,将example.com/api
路由到后端API服务,example.com/web
路由到前端Web服务。
负载均衡
Ingress控制器(如Nginx、Traefik)自动实现流量负载均衡,将请求分发到多个Pod实例。支持轮询、最少连接等算法,确保服务的高可用性。
SSL/TLS终止
Ingress支持配置HTTPS证书,在入口处解密流量后以明文形式转发到后端服务。简化了证书管理,避免每个服务单独处理加密。
Ingress的工作原理
Ingress资源定义
用户通过YAML文件定义Ingress资源,指定路由规则、后端服务及TLS配置。例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingress
spec:rules:- host: example.comhttp:paths:- path: /apipathType: Prefixbackend:service:name: api-serviceport:number: 80
Ingress控制器
控制器是独立运行的Pod,监听Ingress资源变更并动态更新代理配置(如Nginx配置文件)。当用户创建或修改Ingress规则时,控制器会实时生效。
请求处理流程
- 客户端访问
https://example.com/api
,DNS解析到Ingress控制器所在的Service外部IP。 - 控制器根据TLS证书解密请求,匹配
Host
和Path
规则。 - 流量被转发到对应的Service,再由Service负载均衡到具体Pod。
常见Ingress控制器对比
Nginx Ingress
- 基于Nginx实现,功能成熟稳定。
- 支持注解扩展(如重定向、缓存)。
- 社区版需手动配置部分高级功能。
Traefik
- 原生支持动态配置,无需重载。
- 内置Dashboard可视化监控。
- 对HTTP/2和gRPC支持更友好。
AWS ALB Ingress
- 深度集成AWS ALB,自动创建负载均衡器。
- 支持IP模式与实例模式路由。
- 依赖AWS环境,灵活性较低。
高级配置示例
多域名路由
spec:rules:- host: api.example.comhttp:paths:- backend:serviceName: api-serviceservicePort: 80- host: web.example.comhttp:paths:- backend:serviceName: web-serviceservicePort: 80
路径重写
通过注解实现(Nginx示例):
metadata:annotations:nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:rules:- http:paths:- path: /svc/(.*)backend:serviceName: svcservicePort: 80
安全最佳实践
网络隔离
- 使用NetworkPolicy限制Ingress控制器与后端服务的通信。
- 为生产环境部署专用命名空间。
证书管理
- 通过Cert-Manager自动签发Let’s Encrypt证书。
- 定期轮换证书,避免使用自签名证书。
访问控制
- 结合OAuth2 Proxy或Auth0实现身份验证。
- 对敏感路径启用IP白名单限制。