在kubernetes中,如果对外暴露端口,我们可以用方式
1.pods共享宿主机的网络命名空间pod.spec.hostNetwork(无法实现LB)
2.service通过暴露nodeport的方法代理pods向外保罗(无法基于七层协议暴露)
3.通过ingreses-nginx,envoy等kubernetes的副本来向外暴露(可以基于七层协议暴露,实现ssl回话,)
基于ingress-nginx 的安装,可以自己查看kubernetes的ingress-nginx的官网
实现的逻辑如下图
extrenalLB通过外界的LB调度器,均衡到service代理暴露的ingress-nginx(pods)的端口,通过selecotr选择选择对应的ingress-nginx,ingress是将backend中的real主机的信息写入到ingress-nginx的配置文件中,因为代理的pods可能会随时丢弃,随时重启,对应的pod属性也会改变,所以需要service来代理pods,ingress将监控service,并将信息写入到ingress-nginx中。
。
当然
externalLB—>ingress-nginx–>ingressController的这一步,可以将ingreessController以DeamoSet的控制的方式,挂载在能够容忍某些指定污点的node上,直接对外暴露服务,不需要通过service代理。