ingress与ingress-controller
要理解ingress,需要区分两个概念,ingress和ingress-controller:
ingress对象: 指的是k8s中的一个api对象,一般用yaml配置。作用是定义请求如何转发到service的规则,可 以理解为配置模板。
ingress-controller: 具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现 请求转发。
简单来说,ingress-controller才是负责具体转发的组件,通过各种方式将它暴露在集群入口,外部对 集群的请求流量会先到ingress-controller,
而ingress对象是用来告诉ingress-controller该如何转发请 求,比如哪些域名哪些path要转发到哪些服务等等。
ingress-controller
ingress-controller并不是k8s自带的组件,实际上ingress-controller只是一个统称,用户可以选择不 同的ingress-controller实现,目前,由k8s维护的ingress-controller只有google云的GCE与ingressnginx两个,其他还有很多第三方维护的ingress-controller,具体可以参考官方文档。但是不管哪一 种ingress-controller,实现的机制都大同小异,只是在具体配置上有差异。一般来说,ingresscontroller的形式都是一个pod,里面跑着daemon程序和反向代理程序。daemon负责不断监控集群 的变化,根据ingress对象生成配置并应用新配置到反向代理,比如nginx-ingress就是动态生成nginx 配置,动态更新upstream,并在需要的时候reload程序应用新配置。为了方便,后面的例子都以k8s 官方维护的nginx-ingress为例。
ingress
ingress是一个API对象,和其他对象一样,通过yaml文件来配置。ingress通过http或https暴露集群 内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的方向代理。ingress要 依靠ingress-controller来具体实现以上功能。