Kubernetes Ingress
本文将介绍 Kubernetes 中的 Ingress,即入口。
一、什么是 Ingress?
Service 虽然可以实现负载均衡,但是它有以下缺点:
- 建立在运输层之上,只能读取到 IP、端口信息,对于更高层的 HTTP/HTTPS 中的主机名、URI、请求头、证书等信息均无法访问,因此负载均衡能力无法有限
- 只适合在集群内部进行负载均衡,不能很好地支持将服务暴露到外部
因此,Kubernetes 设计了 Ingress,即入口,它具有以下特点:
- 建立在应用层之上
- 作为流量的总入口,统管集群中的进出口数据
二、Ingress、IngressController 和 IngressClass
1. Ingress
在 Kubernetes 的设计中,Ingress 只是一些路由规则的集合,相当于是一份静态的描述文件。
2. IngressController
IngressController 是规则的具体执行者。需要注意的是,它并不内置在 Kubernetes 中,而是交由社区根据规范实现。因此,IngressController 有着大量的实现,这其中,Nginx Ingress Controller 是应用最广泛的。
3. IngressClass
随着 Ingress 在现实中的应用,许多问题开始暴露:
- 出于某些原因,希望在项目中引入不同的 IngressController
- Ingress 规则过多,单一 IngressController 处理不过来
- 多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本高
- 集群中存在不同组户,它们对 Ingress 的需求差异很大
因此,Kubernetes 增加了 IngressClass 这一概念,它穿插在 Ingress 和 IngressController 中,作为流量规则和控制器的协调人,避免了二者的强绑定关系。
三、Ingress 的配置文件
1 |
|
四、IngressController 的部署
略。
参考
- Kubernetes
- Kubernetes 入门实战课
- 深入剖析 Kubernetes