一、service
- Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应
- 用可以方便地实现服务发现和负载均衡。
- service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现)
- service的类型:
ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。
NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个NodeIP:nodePort都将路由到ClusterIP。
LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均衡器,并将请求转发到 :NodePort,此模式只能在云服务器上使用。
ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过spec.externlName 设定)
二、IPVS模式的service实现
1.所有节点安装ipvs
yum install -y ipvsadm.x86_64
2.查看ipvs模块
[root@server2 pod]# lsmod | grep ip_vs
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145497 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 133095 10 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
3.修改模式为ipvs模式
kubectl edit cm kube-proxy -n kube-system
4.删除原来的副本
会自动重新创建,那么就会生效刚改的ipvs模式(即更新!!!)
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
ipvsadm -ln
5.访问测试
[root@server2 pod]# kubectl apply -f deployment.yaml #开启真正的后端
deployment.apps/nginx-deployment created
[root@server2 pod]# kubectl get pod
NAME