一、IPVS模式的service
Service 是由 kube-proxy 组件,加上 iptables 来共同实现的。 kube-proxy 通过 iptables 处理
Service 的过程,需要在宿主机上设置相当多的 iptables
规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU资源。
IPVS模式的service,可以使K8s集群支持更多量级的Pod。
kubectl edit cm kube-proxy -n kube-system
修改内容
更新kube-proxy pod
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡:kube-ipvs0,并分配service IP
vim svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: myapp
ip addr
kube-proxy通过linux的IPVS模块,以rr轮询方式调度service中的Pod
二、k8s service的四种类型
1、ClusterIP
这个类型的service有一个ClusterIP,其实就一个VIP。具体实现原理依靠kubeproxy组件,通过iptables或是ipvs实现,这种类型的service只能在集群内访问