写在前面
学习K8s中Service遇到,单独整理分享给小伙伴
博文内容涉及:
Metallb的创建
LoadBalancer类型的Service的负载Demo
有些人心如花木,皆向阳而生——烽火戏诸侯《剑来》
Service负载均衡问题
NodePort还没有完全解决外部访问Service的所有问题,比如负载均衡问题,假如我们的集群中有10个Node,则此时最好有一个负载均衡器,外部的请求只需访问此负载均衡器的IP地址,由负载均衡器负责转发流量到后面某个Node的NodePort上。如图
NodePort的负载均衡LoadBalancer方式
Loadbalancer组件独立于Kubernetes集群之外,通常是一个硬件的负载均衡器,或者是以软件方式实现的,例如HAProxy或者Nginx。对于每个Service,我们通常需要配置一个对应的Loadbalancer实例来转发流量到后端的Node上
Kubernetes提供了自动化的解决方案,如果我们的集群运行在谷歌的GCE公有云上,那么只要我们把Service的type-NodePort改为type-LoadBalancer,此时Kubernetes会自动创建一个对应的Loadbalancer实例并返回它的IP地址供外部客户端使用。在没有公有云的情况下,我们也可以用一些插件来实现,如metallb等
LoadBalancer需要建立服务之外的负载池。然后给Service分配一个IP。
我们直接创建一个LoadBalancer的Service的时候,会一直处于pending状态,是因为我们没有对应的云负载均衡器
┌──[root
vms81.liruilongs.github.io]-[~/ansible/k8s-svc-create]└─$kubectlexpose--name=blogsvcpodblog--port=80--type=LoadBalancerservice/blogsvcexposed┌──[rootvms81.liruilongs.github.io]-[~/ansible/k8s-svc-create]└─$kubectlgetsvc-owide
grepblogsvcblogsvcLoadBalancer10..28.pending80:/TCP26srun=blog┌──[root
vms81.liruilongs.github.io]-[~/ansible/k8s-svc-create]└─$Metallb创建
Metallb可以通过k8s原生的方式提供LB类型的Service支持
使用:metallb