由控制器来完成集群的工作负载,service(微服务)是将工作负载的应用暴露出去,从而解决访问问题

作用:无论是在集群内还是集群外,都可以访问pod上的应用,其实现对集群内的应用pod自动发现和负载均衡
service默认支持四层负载均衡,七层需要inggress来支持

通信必须要有proxy,如果是跨节点网络通信还需要flannel节点,然后再结合每个节点上的iptables,从而实现负载均衡





默认类型为ClusterIP,不指定的话就默认为ClusterIP

默认使用iptables,调度iptables算法是随机的,推荐使用lvs

IPVS模式
kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU 资源;
IPVS模式的service,可以使K8s集群支持更多量级的Pod。
lvs内核调度,算法更强大,性能更好,可以减少在刷iptables所带来的cpu消耗

修改proxy配置

重启pod,删除重建

在切换成ipvs模式后,kube-proxy会自动在宿主机上添加一个虚拟网卡,并给其分配serviceIP

Nodeport


nodeport在集群节点上绑定端口,每个端口对应一个服务

Headless(无头服务)

headless模式不需要分配VIP

该类型也是以一中特殊的clusterIP类型,clusterIP仅限于集群内进行访问
headless通过svc名称访问,由集群内dns提供解析

集群内直接使用service名称进行访问

该模式访问仅限于在集群内
LoadBalancer(从外部访问的第二种方式)


默认无法分配外部访问ip

loadBlabcer -> nodeport -> clusterip -> pod
LoadBalancer模式适用于云平台,裸金属环境需要安装metallb提供支持
官网:https://metallb.universe.tf/installation/



下载部署文件

在harbor仓库中新建一个metallb项目,并将镜像拉取在上面

拉取完成后,修改文件中的镜像地址,与刚拉取的harbor仓库保持一致



给镜像打上标签,并且上传到harbor仓库


部署服务

配置分配地址段



