概念
1.Ingress 是对K8S集群中服务的外部访问进行管理的 API 对象。Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。
2.Ingress Controller 通常负责通过负载均衡器来实现 Ingress。
3.必须拥有一个 Ingress Controller 才能满足 Ingress 的要求。 仅创建 Ingress 资源本身没有任何效果。
Ingress
Ingress和Ingress Controller是两回事
- ingress定义路由规则;
- ingress用于监听pod的变化,注入ingress controller。
当一个负载均衡器Pod要代理多个服务的时候:
后端服务Pod要通过Service分类(Service此时只起到分类的作用),ingress基于service的分类识别出有几个Pod和Pod IP地址,并且把Pod的IP地址返回注入到7层负载均衡器的配置文件内,负载均衡器重载配置文件。(Treafik、Envory会自动重载配置文件)
注意:
- Ingress 资源应该跟转发到的后端资源放在同一个namespace里;
- 1.19以下版本和1.19及以上版本的ingress配置有所不同。
Ingress Controller
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。
与作为 kube-controller-manager 可执行文件的一部分运行的其他类型的控制器不同, Ingress Controller不是随集群自动启动的。Ingress Controller通常是一组拥有7层代理能力服务的Pod。
Ingress Class
在 Kubernetes 1.18 版本引入 IngressClass 资源和 ingressClassName 字段。此前Ingress配置中是通过 Ingress 中的一个 kubernetes.io/ingress.class 注解来指定Ingress Class的。
Ingress、Ingress Class、Ingress Controller三者的关系
我们通过yaml文件的内容,观察三者的关联关系。
- Ingress Controller,会指定要关联的ingress class,和在k8s中注册自己controller的信息;
- Ingress Class,会指定要关联的controller的信息;
- Ingress,会指定要关联的Ingress Class的信息;
- 最终,Ingress Class作为“桥梁”,将Ingress和Ingress Controller关联起来。
参考文档
Ingress | Kubernetes
Ingress 控制器 | Kubernetes