十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管

目录

  • 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
0. Ingress 解决了什么问题上一篇笔记中讲解了 Service 的功能和运行机制 。Service 本质上是一个由 kube-proxy 控制的四层负载均衡,在 TCP/IP 协议栈上转发流量 。然而四层负载均衡能做的很有限,现在绝大多应用运行在应用层(五层/ OSI 七层)的 HTTP/HTTPS 协议之上,有更多的高级路由条件,而这些在传输层是不可见的 。
Service 比较适合代理集群内部的服务 。如果想要把服务暴露到集群外部,就只能使用 NodePort 或者 LoadBalancer 这两种方式,而它们都缺乏足够的灵活性,难以管控 。
Kubernetes 为了解决这个问题,引入了一个新的 API 对象做七层负载均衡 。除了七层负载均衡,这个对象还承担了更多的职责——作为流量的总入口,管理进出集群的数据(南北向流量),让外部用户能够安全便捷地访问集群内部的服务 。这个 API 对象被命名为 Ingress,意思就是集群内外边界上的入口 。
十一 【Kubernetes】K8s笔记: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 。
十一 【Kubernetes】K8s笔记:Ingress 集群进出流量总管

文章插图
*图示展示了 Ingress Controller 在集群中的位置 图片来源
2. 指定 Ingress Class 使用多个 Ingress ControllerIngressClass Docs
起初,Kubernetes 集群内只有一个 Ingress Controller,这样的用法会带来一些问题:
  • 由于某些原因,项目组需要引入不同的 Ingress Controller,但 Kubernetes 不允许这样做
  • Ingress 规则太多,都交给一个 Ingress Controller 处理会让它不堪重负
  • 多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本很高
  • 集群里有不同的租户,他们对 Ingress 的需求差异很大甚至有冲突,无法部署在同一个 Ingress Controller 上
Kubernetes 就又提出了一个 Ingress Class 的概念,让它插在 Ingress 和 Ingress Controller 中间,作为流量规则和控制器的协调人,解除了 Ingress 和 Ingress Controller 的强绑定关系 。

经验总结扩展阅读