「KUBERNETES-INGRESS-CONTROLLER」- 部署 Ingress Controller 组件 | KUBERNETES-INGRESS-CONTROLLER

认识

在 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 组件,以及常见问题处理。

基本工作原理

  1. 管理员创建 Ingress 资源定义路由规则
  2. Ingress Controller 监控这些资源变化
  3. Ingress Controller 根据规则配置底层负载均衡器
  4. 外部请求到达时,根据规则路由到对应服务

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