描述自己做的网站百度关键词价格排行榜
Service基本概念
K8S Service是K8S实现微服务架构最重要的组件之一,主要作用:1)为Pod提供稳定的访问地址(域名或IP),2)实现负责均衡,3)自动屏蔽后端Endpoints的变化。
假设我们开发了一个用户认证和授权的功能,这个功能以Deployment的形式来部署,replicas是5,即有5个pod可以同时提供认证和授权的功能。如果没有Service,客户端在使用此功能的时候,需要知道这5个Pod的IP地址,并访问某一个IP地址。这里带来了很多问题,1)客户端需要维护这5个IP地址,并选择某一个IP地址,增加了客户端的复杂性。2)如果客户端的IP地址发生变化,客户端并不会自动感知,很难及时通知到客户端。使用K8S的Service就能完美解决此问题。
由于Service的域名或IP地址不会发生变化,所以对客户端来说其看到的服务域名是不变的,即便Service对应的Endpoints发生了改变。一个Service的后端有多个Endpoints,所以Service在选择某个Endpoint的时候会通过LB的方式来进行(通过kube-proxy组件来实现LB,具体基于iptables或ipvs)。K8S的Service降低了普通微服务架构中服务注册和发现的开销,很轻量级的实现了微服务架构中对服务的管理。
Service重要配置
Service中最重要的配置是ports和selector,其中ports中定义了Service本身的端口和后端Pod的端口,selector定义了选择哪些Pod来作为该Service的Endpoints。K8S的Service控制器会持续监控后端Pod列表的变化,如果发生改变,则其会实时更新Endpoints列表。
Service负载均衡机制
从Service的IP到后端Pod的选择是由运行在每个Node上的kube-proxy来实现的。可以选择iptables模式或者ipvs模式,通过启动参数--proxy-mode来设置。
iptables:基于Linux kernel的iptables规则来实现路由规则的定义和数据包的转发,关于iptables可以参考:
https://www.cnblogs.com/kalixcn/p/17323391.html
https://zhuanlan.zhihu.com/p/633712699
ipvs:IPVS是Linux kernel内置的层四的LB,比iptables的性能高,且支持比较多的LB算法,如rr,lc,dh,sh等。