Kubernetes(二十四)Service(三)原理分析

二  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重要程度'次之'

①  userspace 代理模式

②  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'
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值