认识
在 Kubernetes 中,Ingress Controller 负责处理 Ingress 资源以实现服务的暴露。Ingress Controller 是 Kubernetes 中管理外部访问集群内服务的关键组件,它实现了 Ingress API 对象的功能。Ingress Controller 负责处理来自集群外部的 HTTP 和 HTTPS 路由请求,根据规则将流量转发到相应的服务。
组成
仅当在 Kubernetes Cluster 中部署 Ingress Controller 之后,我们定义的 Ingress 资源才能生效。当然 Ingress Controller 有很多实现,比如 NGINX Ingress Controller、Traefik Ingress Controller、HAProxy Ingress 等等(参考 Ingress Controllers | Kubernetes 页面)。
该部分笔记将记录:在 Kubernetes Cluster 中,如何部署 Ingress Controller 组件,以及常见问题处理。
基本工作原理
- 管理员创建 Ingress 资源定义路由规则
- Ingress Controller 监控这些资源变化
- Ingress Controller 根据规则配置底层负载均衡器
- 外部请求到达时,根据规则路由到对应服务
Ingress, Ingress Controllers, Nginx Ingress Controller
在 Kubernetes 中,所有的”资源定义“(YAML)只是仅是”声明“,而真正应用这些”声明“的是 Controller 组件,它才是真正工作的组件。
假如我们定义如下 Ingress 资源,来接受 example.com 的 HTTP 请求,将其转发到 nginx-default 服务(Service):
# ingress.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-default spec: rules: - host: example.com http: paths: - backend: serviceName: nginx-default servicePort: 80
很明显我们这里仅是定义配置,那么在集群里中必须有组件来应用这些配置(否则没有任何意义)。这就是在集群中运行的 Ingress Controller 组件的任务,Ingress Controller 读取 Ingress 定义,并保证这些配置得到执行。
而 Nginx Ingress Controller 则是 Ingress Controller 的一种,还有 Traefik Ingress Controller、HAProxy Ingress Controller 等等。这些 Ingress Controller 读取 Ingress 配置,并转化为各自的配置文件,并运行各自的程序。比如 Nginx Ingress Controller 读取 Ingress 配置,转化为 nignx.conf 配置,并运行 nginx 程序,来处理请求。
构建
注意事项:该部分笔记以 Ingress Controller 管理为主,并不包含 Ingress 使用方法。
Nginx Ingress Controller
Traefik
HAProxy Ingress
AWS ALB Ingress Controller
Istio Ingress Gateway
性质
路由管理:基于主机名和路径将请求路由到不同的服务
负载均衡:在多个 Pod 实例间分配流量
TLS/SSL 终止:处理 HTTPS 连接的加密和解密
基于名称的虚拟主机:支持多个域名共享同一 IP 地址
流量控制:支持基于路径、头部、Cookie 等的路由规则
应用
典型使用场景:
- 暴露多个服务通过同一 IP 地址
- 实现基于路径的路由 (如 /api 到后端服务,/static 到前端服务)
- 为不同域名配置不同的服务
- 集中管理 TLS 证书
参考
Ingress | Kubernetes
Ingress Controllers | Kubernetes
DeepSeek / 介绍 Kubernetes Ingress Controller