本文以ClusterIP类型的servic为例,详细阐明service的实现原理
Service创建流程
1.Master节点中的api server接收到创建service资源的事件,api server创建service资源;
2.Master节点中的 endpoint-controller会监听service,pod资源的创建,当service对象创建之后,endpoint-controller会根据service中的selector匹配相应的pod,然后生产endpoint对象;
3.Node节点上都会有kube-proxy组件去监听service对象以及endpoint对象,根据这两个对象的生成去修改iptabels或者IPVS的路由规则;
4.Node节点上会有DNS组件监听service对象的变更,形成service域名到ClusterIP的映射关系。
Service访问流程
1.Node上的Pod访问service时,首先会去DNS组件中根据需要访问的service域名查找ClusterIP;
2.Pod拿到ClusterIP后,经过iptabels或者IPVS时,会被重定向为service对应的Pod的真实IP。