Kubernetes Ingress 介绍
通常情况下,Kubernetes 集群内的网络环境与外部是隔离的,也就是说 Kubernetes 集群外部的客户端无法直接访问到集群内部的服务,这属于不同网络域如何连接的问题。解决跨网络域访问的常规做法是为目标集群引入一个入口点,所有外部请求目标集群的流量必须访问这个入口点,然后由入口点将外部请求转发至目标节点。
同样,Kubernetes 社区也是通过增设入口点的方案来解决集群内部服务如何对外暴露的问题。Kubernetes 一贯的作风是通过定义标准来解决同一类问题,在解决集群对外流量管理的问题也不例外。Kubernetes 对集群入口点进行了进一步的统一抽象,提出了 3 种解决方案:NodePort、LoadBalancer 和 Ingress。下图是这三种方案的对比:
通过以上对比,我们可以发现,NodePort 和 LoadBalancer 主要工作在四层流量上,只能用于暴露集群中一个服务。当集群中对外暴露的服务数量增多时,NodePort 方案最终会因端口耗尽而无法暴露更多的服务,而 LoadBalancer 方案则会引入同等数量的 SLB,在增加成本的同时也给运维带来一定的负担。定位在七层流量上的 Ingress 方案可以通过定义基于虚拟主机域和路径的路由规则来完成对集群中服务的代理,Ingress 与后端服务是一对多的关系,有效的降低了机器成本。
此外,因为外部访问集群中服务的所有入口流量都先经过共享的 Ingress Provider 节点,所以集群管理者可以在 Ingress Provider 中额外实施访问控制策略来保证集群中服务的安全性和稳定性,并且可以通过采集监控指标、记录访问日志以及开启链路追踪来增强可观测建设。因此,目前 Ingress 方案是主流的选择。
Kubernetes Ingress Provider 介绍
上文提到,Ingress 是 Kubernetes 应对集群管理外部访问流量的场景抽象出来一个资源对象,用来描述集群外部如何访问集群内部服务的方式。通过 Ingress 资源来配置不同的转发规则,从而达到根据不同的规则设置外部访问集群内不同的 Service 所对应的后端 Pod。Ingress Provider 是真实存在的 Workload 节点ÿ