Bootstrap

Kubernetes4——service(NodePort、Headless、LoadBalancer、ExternalName)

一、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                     
;