前面提到:service对集群之外暴露服务的蛀牙方式有两种:NodePort和LoadBalancer、但是这两种方式都有一定的缺点:
·NodePort方式缺点是会占用很多集群机器的端口、那么当集群服务变多的时候、这个缺点就越发明显
·LB方式的缺点是每个service需要一个LB,浪费、麻烦、并且需要kubernetes之外的设备支持
基于这种现状、kubernetes提供了Ingress资源对象、Ingress只需要一个NodePort或者一个LB就可以暴露多个service的需求、工作机制大致如下图:

实际上、Ingress相当于一个7层的负载均衡器、是kuberbetes对反向代理的一个抽象、它的工作原理类似于nginx、可以理解成
在Ingress里建立诸多映射规则、Ingrss Controller通过监听这些配置规则并转化成Nginx的反向代理配置、然后对外部提供服务。
这里有两个核心的概念:
·Ingress:kubernetes种的一个对象、 作用是定义请求如何转发到service的规则
·ingress controller:具体实现方向代理机负载均衡的程序、对ingress定义的规则进行解析、根据配置的规则来实现请求的转发、实现的方式有
··nginx
··Contour
··Haproxy
ingress(以nginx为例)的工作原理:
·用户编写ingress规则、说明哪个域名对应kubernetes集群中的哪个service
·ingress控制器动态感知ingress服务规则的变化、然后生成一段对应的nginx反向代理配置
·ingress控制器会将生成的nginx配置写入到一个运行着的nginx服务中、并动态更新
·到此为止、其实真正在工作的就是一个nginx了、内部配置了用户定义的请求转发规则
