K8s Ingress
·
Kubernetes Ingress 是一种 API 对象,用于管理外部用户对集群内服务的 HTTP 和 HTTPS 访问。它提供了基于域名和路径的智能路由、TLS 证书终止、负载均衡等功能,是集群的“七层入口”。
1. 为什么需要 Ingress?
如果没有 Ingress,暴露服务通常只能:
- 使用 NodePort:在每个节点上开一个端口,但端口范围有限(30000-32767),且不适合生产。
- 使用 LoadBalancer:为每个服务创建一个云负载均衡器,成本高且缺乏统一管理。
Ingress 解决了这些问题:
- 统一入口:一个公网 IP 就能访问多个服务。
- 七层路由:可根据域名(
foo.com、bar.com)或 URL 路径(/api、/web)将请求转发到不同 Service。 - TLS 终止:在入口处集中配置 HTTPS 证书,后端服务无需处理加密。
- 成本优化:减少公网 IP 和负载均衡器数量。
2. Ingress 的工作原理
Ingress 本身只是定义规则,真正干活的是 Ingress Controller(如 Nginx Ingress Controller、Traefik、AWS ALB Ingress Controller 等)。工作流程如下:
- 用户创建 Ingress 资源,描述路由规则。
- Ingress Controller 监听 API Server,一旦发现新 Ingress,就动态配置自身的负载均衡器(如生成 Nginx 配置)。
- 外部请求到达 Ingress Controller(通常通过 Service 暴露,如 NodePort 或 LoadBalancer),Controller 根据规则将请求转发到对应的 Service,然后到达后端 Pod。
3. 一个简单的 Ingress 示例
假设有两个 Service:
web-service:提供 Web 前端api-service:提供 REST API
希望:
http://example.com/→web-servicehttp://example.com/api/→api-service
Ingress 配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com # 域名
http:
paths:
- path: / # 根路径
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
- path: /api # API 路径
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
创建后,所有访问 example.com 的请求都会被路由到对应的 Service。
4. Ingress 与 Service 的关系
- Service 负责集群内部的负载均衡和网络代理(四层)。
- Ingress 负责集群外部的 HTTP/HTTPS 路由(七层),并将流量转发到对应的 Service。
通常,Ingress 将请求转发给 Service,Service 再转发给 Pod。但某些高级 Ingress Controller 支持直接转发到 Pod(跳过 Service),不过 Service 仍是主流模式,因为它提供了稳定的抽象。
5. 主要功能特性
| 功能 | 说明 |
|---|---|
| 基于域名路由 | 根据 Host 头将请求转发到不同 Service。 |
| 基于路径路由 | 根据 URL 路径(如 /api、/static)分发流量。 |
| TLS 配置 | 可关联 Secret 存储证书,实现 HTTPS 访问。 |
| 默认后端 | 定义未匹配任何规则时的兜底服务。 |
| 注解(Annotations) | 通过注解定制 Controller 行为,如重写、限流、CORS 等。 |
6. 常见 Ingress Controller
- Nginx Ingress Controller:最流行,基于 Nginx 和 Lua。
- Traefik:云原生,自动服务发现,支持多种协议。
- AWS Load Balancer Controller:在 AWS 上创建 ALB 作为 Ingress。
- HAProxy Ingress:高性能,特性丰富。
总结
Ingress 是 Kubernetes 对外暴露服务的标准方式,它通过将七层路由规则与具体实现解耦,提供了灵活、统一、可扩展的入口管理能力,是现代云原生应用不可或缺的组件。
更多推荐
所有评论(0)