LoadBalancer:与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾讯云、AWS等)上的负载均衡器,将每个Node ([NodeIP]:[NodePort])作为后端添加进去
LoadBalancer
大多数公有云平台都支持创建这种类型的服务,每个服务可以支持多种协议和多个端口,使用单个IP来访问。
因为需要在集群外访问内部服务,所以这个IP地址是公有的,这会产生额外的费用。如果暴露的服务很多,使用时需要慎重。
在私有云环境中,不能创建此类的服务,可以创建NodePort类型的服务然后使用HAproxy来充当Load Balancer,这样和公有云平台的LoadBalancer差别不大。
Service的三种类型:ClusterIP、NodePort、LoadBalancer,后一种是前一种的增强,NodePort类型Service会创建ClusterIP类型Service,LoadBalancer类型Service会创建NodePort和ClusterIP类型Service。
Service组件依赖操作系统中的iptables或ipvs,这是Service的灵魂。有一点需要注意,当使用NodePort类型的服务时,请求会直接转发给实际的Pod而不用转发给Service的Cluster IP(kube-proxy工作在iptables模式),具体实现方法可以在搜索引擎上搜“NodePort类型Service的工作原理”。
![](https://img-blog.csdnimg.cn/img_convert/2553fc60e4b54aa3b8dc596a7a81e5d5.png)
![](https://img-blog.csdnimg.cn/img_convert/a2bae48f98fc48b3b96510e5aa47f220.png)
注意这里的服务端口不是9999,是7788。
![](https://img-blog.csdnimg.cn/img_convert/86a39726fea54467aed7f10fe2bdc7a5.png)
![](https://img-blog.csdnimg.cn/img_convert/5b76fe6730024a39b7fa3f1133ce22af.png)
可以看到elb监听器后端是pod所在节点的ip,同时还有一个端口32462。
![](https://img-blog.csdnimg.cn/img_convert/50d868c43e4641ffb0ec3a730451ea43.png)