Ingress 是什么:
1 | kubectl explain ingress |
Ingress 是一组允许外部请求进入集群的路由规则的集合。它可以给 Service 提供集群外部访问的 URL,负载均衡,SSL 终止等。
直白点说,Ingress 就类似起到了智能路由的角色,外部流量到达 Ingress ,再由它按已经制定好的规则分发到不同的后端服务中去。
看起来它很像我们使用的负载均衡器之类的。那你可能会问,Ingress 与 LoadBalancer 类型的 Service 的区别是什么呢?
1 | Ingress 不是一种 Service 类型 |
由社区维护(或是说官方支持的)有两个:适用于 Google Cloud 的 GLBC,当你使用 GKE 的时候,便会看到它;和 NGINX Ingress Controller它是使用 ConfigMap 存储 NGINX 配置实现的。
第三方的实现还有:
基于 Envoy 的 Contour;
F5 的 F5 BIG-IP Controller;
基于 HAProxy 的 haproxy-ingress;
基于 Istio 的 Control Ingress Traffic;
现代化的反向代理服务器 Traefik;
以及 Kong 支持的 Kong Ingress Controller for Kubernetes
NGINX 官方支持的 NGINX Ingress Controller
这里可以看到 K8S 社区和 NGINX 都有 NGINX Ingress Controller,很多人在一开始接触 Ingress 的时候便陷入了选择的苦恼中,除去前面的那些选择外,单 NGINX 的控制器就有两个,到底应该怎么选。
这里提供两点建议:
可能多数人使用的都是 NGINX 而非 NGINX Plus,如果你需要会话保持(Session persistence)的话,那你应该选择 K8S 社区维护的版本
即使我们平时使用 NGINX 的时候,也常常会有动态配置的需求,如果你仍然有这样的需求,那你还是继续使用 K8S 社区维护的版本(其中内置了 Lua 支持)。