Ingress

Ingress 是什么:

1
kubectl explain ingress

Ingress 是一组允许外部请求进入集群的路由规则的集合。它可以给 Service 提供集群外部访问的 URL,负载均衡,SSL 终止等。
直白点说,Ingress 就类似起到了智能路由的角色,外部流量到达 Ingress ,再由它按已经制定好的规则分发到不同的后端服务中去。
看起来它很像我们使用的负载均衡器之类的。那你可能会问,Ingress 与 LoadBalancer 类型的 Service 的区别是什么呢?

1
2
3
4
5
Ingress 不是一种 Service 类型
Ingress 是 K8S 中的一种资源类型,我们可以直接通过 kubectl get ingress 的方式获取我们已有的 Ingress 资源。
Ingress 可以有多种控制器(实现)
通过之前的介绍,我们知道 K8S 中有很多的 Controller (控制器),而这些 Controller 已经打包进了 kube-controller-manager 中,通过 --controllers 参数控制启用哪些。
但是 Ingress 的 Controller 并没有包含在其中,而且有多种选择。

由社区维护(或是说官方支持的)有两个:适用于 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 支持)。