Ingress选型
在 Kubernetes 中,service IP 和 Pod IP 主要供集群内部访问使用,对于集群外部是不可见的。
如果要从集群外部访问,常用是的以下 3 种方式。
(1)通过 NodePort 方式
如下图:
我们忽略具体的实现细节,通过 NodePort 的方式会在所有的 Node 节点上映射一个端口,端口范围默认是 30000-32767。然后用户通过任意主机+映射端口
来访问集群内部。
这种方式的优点是实现方式比较简单,缺点是如果映射的端口太多不好管理,每一个端口只能提供一种服务,还有以此生成的 iptables 规则也很多。
(2)通过 LoadBalancer 方式
如下图:
从图种可以看到 Load Balancer 服务暴露服务非常直接,直接把服务暴露到 Internet,通往指定端口的流量都会被转发到对于的服务,它没有过滤条件、没有规则等。
这种方式最大的缺点就是每个 LoadBalancer 都需要一个固定的 IP,而且更多情况下是需要云产商的支持。
(3)通过 Ingress 方式
如下图:
Ingress 本身不提供服务,它依赖 Ingress Controller,Ingress Controller 以 Pod 的形式部署在 Kubernetes 集群内,实质上我们无法从外面直接访问,依然要将其暴露出来,暴露方式有几种:
- 通过 NodePort 形式暴露,前面需接一个负载均衡
- 通过 LoadBalancer 形式暴露,云产商默认就是这种方式
- 直接在 Pod 中使用 hostport,前面需接一个负载均衡
ingress 的实现方式更智能、更友好,相对的配置就略微复杂,它一个 IP 可以暴露多个应用,支持同域名不同 uri,支持证书等功能。
目前 Ingress 暴露集群内服务的行内公认最好的方式,不过由于其重要地位,世面上有非常多的 Ingres Controller,常见的有:
- Kubernetes Ingress
- Nginx Ingress
- Kong Ingress
- Traefik Ingress
- HAProxy Ingress
- Istio Ingress
- APISIX Ingress
除了上面列举的这些,还有非常多的 Ingress Controller,面对如此多的 Ingress Controller,我们该如何选择呢?参考的标准是什么?
一般情况下可以从以下几个维度进行判断:
- 支持的协议:是否支持除 HTTP(S)之外的协议
- 路由的规则:有哪些转发规则,是否支持正则
- 部署策略:是否支持 ab 部署、金丝雀部署、蓝绿部署等
- upstream 探针:通过什么机制判定应用程序正常与否,是否
- 负载均衡算法:支持哪些负载均衡算法,Hash、会话保持、RR、WRR 等
- 鉴权方式:
- DDoS 防护能力:是否支持基本的限速、白名单等
- 全链路跟踪:能否正常接入全链路监控
- JWT 验证:
- 图像界面:是否需要图形界面
- 定制扩展性:是否方便扩展
下面分别对上述的 Ingress Controller 做简要介绍。
Kubernetes Ingress
Kubernetes Ingress 的官方推荐的 Ingress 控制器,
由于 Nginx 的普及使用,在将应用迁移到 K8S 后,该 Ingress 控制器是最容易上手的控制器,而且学习成本相对较低,如果你对控制器的能力要求不高,建议使用。
不过当配置文件太多的时候,Reload 是很慢的,而且
Nginx Ingress
Nginx Ingress 是 NGINX 开发的官方版本,它基于 NGINX Plus 商业版本,
相比官方控制器,它支持 TCP/UDP 的流量转发,付费版有很广泛的附加功能,主要缺点就是
Kong Ingress
kong 在之前是专注于 API 网关,现在已经成为了成熟的 Ingress 控制器,相较于官方控制器,在路由匹配规则、upstream 探针、鉴权上做了提升,并且支持大量的模块插件,并且便与配置。
Traefik Ingress
traefik Ingress 是一个功能很全面的 Ingress,官方称其为:Traefik is an Edge Router that makes publishing your services a fun and easy experience.
__
Istio Ingress
Istio 是 IBM,Google 和 Lyft(Envoy 的原始作者)的联合项目,它是一个全面的服务网格解决方案。它不仅可以管理所有传入的外部流量(作为 Ingress 控制器),还可以控制集群内部的所有流量。在幕后,Istio 将 Envoy 用作每种服务的辅助代理。从本质上讲,它是一个可以执行几乎所有操作的大型处理器。其中心思想是最大程度的控制,可扩展性,安全性和透明性。
__
借助 Istio Ingress,您可以微调流量路由,服务之间的访问授权,平衡,监控,金丝雀发布等.
不过社区现在更推荐使用 Ingress Gateways。
HAProxy Ingress
HAProxy 作为王牌的负载均衡器,在众多控制器中最大的优势还在负载均衡上。
__
APISIX Ingress
ApiSix Ingress 是一个新兴的 Ingress Controller,它主要对标 Kong Ingress。
下面附一张对比图:
图片来自腾讯云社区分享
__
这里还有一个更全的对比方案:https://docs.google.com/spreadsheets/d/1DnsHtdHbxjvHmxvlu7VhzWcWgLAn_Mc5L1WlhLDA__k/edit#gid=0
写在最后
每个控制器都有自己的优缺点,在选型的时候除了参考上面的标准外,还应考虑:
- 技术人员的技术栈、维护能力
- 公司业务的真实诉求
适合公司的才是最好的,一切不是为了用而用,而是因为需要而用。
参考链接: