service & ingress

service是一个四层的IPVS或iptables规则,只有四层转发等功能,所以该节点上的pod网络请求都会被这些四层IPVS或iptables规则拦截,是这些规则将节点上所有pod网络请求统合起来管理
 
 
ingress类似七层负载,是一个应用程序,在操作系统中表现为一个进程,之于K8s系统上一般将进程运行为pod,所以ingress就是一个pod,它可以完成网络七层的功能包括类似https等各类应用功能的剥离或修改等。而ingress是pod,它如何统一地处理K8s系统内的网络请求?或所有K8S上pod的网络七层请求,如何被其中的一个pod拦截、剥离、修改?
通过将ingress controller与所在节点的网络空间共享,例如所有发往该节点的80端口网络请求都会被转发至监听在该节点80端口的ingress controller上,经ingress controller处理后再转发至该节点内的目标pod。
 
 
ingress和service的组合
1.当流量通过ingress controller进入集群内部,ingress controller借助service提供标签选择器功能向后段pod转发请求。
2.后端pod controller在对pod管理时pod的增加或减少,ingress controller也是通过service得知
 
 
ingress生产环境应用举例
1.有6个节点,其中3个有外网地址,可使用pod控制器DaemonSet利用节点选择器,控制ingress运行在3个有外网地址的节点上,同时使用污点方式控制其它pod不被调用到这3个节点上。
2.在这些ingress上使用hostport,将访问该3个有外网ip节点的请求转发至ingress,ingress再转发至集群内部其它pod。或者ingress使用hostNetwork方式,直接与宿主机共用网络环境,再转发给集群内其它pod,这样可以少一次转发。
3.为何ingress不使用nodeport service,nodeport service不使用标准端口,需要在nodeport service的前端加一个服务做端口转换,这样会增加系统复杂度,也会降低效率。
posted @ 2020-09-22 20:18  Edward_han  阅读(166)  评论(0编辑  收藏  举报