二 kube-proxy深入理解
通过'Cluster IP:port'可以访问我们的服务,一定是通过'kube-proxy'去帮我们做一个代理
(1)官网介绍
kube-proxy负责为Service提供'Cluster内部'的'服务发现'和'负载均衡',它以'daemonset'形式运行在每个Node计算节点上,负责Pod网络代理, 它会'定时'从etcd服务获取到service信息来'做相应的策略',维护网络规则和'四层负载均衡'工作
kube-proxy的主要作用就是'负责Service的具体的实现'-->实现方式:'iptables'、'ipvs'
kube-proxy其实就是'管理Service'的访问入口 -->'如何管理'呢?-->'kube-proxy'和'api-server'如何通信?
(2)kubeadm安装后的体现
kubectl get daemonsets.apps -n kube-system kube-proxy -o wide
kubectl get daemonsets.apps -n kube-system kube-proxy -o yaml
kubectl get cm -n kube-system kube-proxy -o yaml
mode --> 'kube-proxy对应的工作模式'
通过'scheduler参数'来实现'ipvs'的全局代理模式的修改 -->命令行'–ipvs-scheduler'
'查看日志'
kubectl logs -f -n kube-system kube-proxy-26d8d
(3)kube-proxy的代理模式
学习思路:userspace'了解'即可、'iptables重点掌握'、ipvs重要程度'次之'
② iptables 代理模式
③ ipvs 代理模式
④ iptables和ipvs的对比
ipvs的策略比较多 -->更改:全局的修改,不能指定某个node
kube-proxy组件-->对应的configmap文件!--> mode(如果不满足、即使是ipvs,也会降级)
备注: 10个节点一下,iptables > ipvs ;100个节点 ipvs > iptales
说明:kube-proxy的日志去印证'后端负载'的类型
(4)kube-proxy和Service的关系
(5)kube-proxy和kube-apiserver通信机制
kube-proxy是如何感知'规则'变化,做相应'策略'的变动?
① kube-proxy
核心: 'Watch | Listen机制'
kube-proxy'通过api-server'与'etcd通信','监听'service和endpoint的变化'service创建删除和修改, pod的扩张与缩小',将需要'新增的规则'添加到iptables中
kube-proxy'只是作为controller',而不是server,真正服务的是'内核的netfilter',体现在'用户态'则是iptables
kube-proxy的'iptables方式'也支持RoundRobin(默认模式-->'不是特别准确,实际是随机')和SessionAffinity负载分发策略
kubernetes只操作了'filter和nat表'
② endpoint controller
endpoint controller是k8s集群'控制器'的其中'一个组件',其功能如下:
1)负责'生成和维护'所有endpoint对象的控制器-->'关于何时生成前面有过讲解-->slector'
2)负责'监听'service和对应pod的'变化'
3)监听到'service被删除',则删除和该service'同名的endpoint对象'
4)监听到'新的service被创建',则根据新建service信息'获取相关pod列表',然后'创建对应endpoint对象'
5)监听到'service被更新',则根据更新后的service信息'获取相关pod列表',然后'更新'对应endpoint对象
6)监听到'pod事件',则更新对应的service的'endpoint对象',将podIp'记录到'endpoint中
备注1:'endpoint controller'对service、pod'变化'的感知
备注2: 加上'就绪(业务)探针'检测之后,'才会加入'endpoints
(6)kube-proxy 中mode为iptables
说明: 具体分析创建Service会创建哪些'iptables'规则?
++++ '分割线' ++++
备注: 本文以一个最简单的'type=Cluster IP'的'nginx'Service的创建
思考:ClusterIP,如果pod不在当前node上(curl clusterip:port所在的node上)通过哪个端口
(7) Service和Endpoints规则在etcd中的体现
说明: 仍然以'iptables'为例子
四 云厂商Service的特点
华为: 'CCE'、腾讯: 'TKE'、阿里: 'CCE'