目录
- 0. Ingress 解决了什么问题
- 1. Ingress Controller
- 2. 指定 Ingress Class 使用多个 Ingress Controller
- 3. 使用 YAML 描述 Ingress / Ingress Class
- 3.1 Ingress
- 3.2 Ingress Class
- 4. 使用 Ingress / Ingress Class
- 5. 使用 Ingress Controller
Service 比较适合代理集群内部的服务 。如果想要把服务暴露到集群外部,就只能使用 NodePort 或者 LoadBalancer 这两种方式,而它们都缺乏足够的灵活性,难以管控 。
Kubernetes 为了解决这个问题,引入了一个新的 API 对象做七层负载均衡 。除了七层负载均衡,这个对象还承担了更多的职责——作为流量的总入口,管理进出集群的数据(南北向流量),让外部用户能够安全便捷地访问集群内部的服务 。这个 API 对象被命名为 Ingress,意思就是集群内外边界上的入口 。
文章插图
*图示是一个将所有流量都发送到同一 Service 的简单 Ingress 示例 图片来源
1. Ingress ControllerService 本身是没有服务能力的,它只是一些
iptables
规则,真正配置、应用这些规则的实际上是节点里的 kube-proxy 组件 。如果没有 kube-proxy,Service 定义得再完善也没有用 。同样的,Ingress 也只是一些 HTTP 路由规则的集合,相当于一份静态的描述文件,真正要把这些规则在集群里实施运行,还需要有另外一个东西,这就是 Ingress Controller,它的作用就相当于 Service 的 kube-proxy,能够读取、应用 Ingress 规则,处理、调度流量 。
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器 。Ingress 控制器不是随集群自动启动的,用户可以选择最适合集群的 Ingress 控制器实现 。Kubernetes 目前支持和维护 AWS、 GCE 和 Nginx Ingress 控制器 。还有很多控制器可供选择 。
从 Ingress Controller 的描述上我们也可以看到,HTTP 层面的流量管理、安全控制等功能其实就是经典的反向代理,而 Nginx 则是其中稳定性最好、性能最高的产品,所以它也理所当然成为了 Kubernetes 里应用得最广泛的 Ingress Controller 。不过,因为 Nginx 是开源的,谁都可以基于源码做二次开发,所以它又有很多的变种 。这里我们选取 Nginx 对 Ingress Controller 的开发实现 NGINX Ingress Controller 。
文章插图
*图示展示了 Ingress Controller 在集群中的位置 图片来源
2. 指定 Ingress Class 使用多个 Ingress ControllerIngressClass Docs
起初,Kubernetes 集群内只有一个 Ingress Controller,这样的用法会带来一些问题:
- 由于某些原因,项目组需要引入不同的 Ingress Controller,但 Kubernetes 不允许这样做
- Ingress 规则太多,都交给一个 Ingress Controller 处理会让它不堪重负
- 多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本很高
- 集群里有不同的租户,他们对 Ingress 的需求差异很大甚至有冲突,无法部署在同一个 Ingress Controller 上
经验总结扩展阅读
- 2023年农历五月十九搬家乔迁好不好
- 2023年农历八月十九宜洗澡吗 2023年10月3日洗澡好不好
- 我的世界里怎么骑马(我的世界怎样骑马)
- 2024年九月初四出生江姓女孩名字叫什么好名字推荐
- 张姓男孩名字2024年10月5日出生的生辰八字五行查询
- 2023年2月7日出海打鱼吉日一览表 2023年2月7日出海打鱼好吗
- 大白菜从什么时候开始有的
- 西甲硅油功效作用是什么?
- iPhone15系列电池容量曝光 苹果或告别128GB存储吗
- 老九门点天灯是第几集?