kube-proxy运行机制解析
kube-proxy运行机制解析
基于1.29
第一代Proxy
一开始是一个真实的TCP/UDP代理,类似于HAProxy,负责转发从Service到Pod的访问流量,这被称为“userspace”模式
第二代Porxy
从v1.2版本开始,K8s将iptables作为kube-proxy的默认模式,iptables模式组作为kube-proxy都默认模式
- iptables模式,不再起到数据层面的Porxy作用,client向Service的请求流量通过iptables的NAT规则 直接发送到目标Pod,不再经过kube-proxy的转发,kube-proxy只承担控制层面的功能,即通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新Node上相应的iptables规则
kube-proxy针对于Service和Pod创建一些主要的iptables规则如下:
- KUBE-CLUSTER-IP:在masquerade-all=true或ClusterCIDR被指定的情况下对Service Cluster IP地址进行伪装,以解决数据包欺骗问题
- KUBE-EXTERNAL-IP:将数据包伪装成Service的外部IP地址
- KUBE-LOAD-BALANCER、KUBE-LOAD-BALANCER-LOCAL:伪装成Load Balaner类型的Service流量
- KUBE-NODE-PORT-TCP、KUBE-NODE-PORT-LOCAL-TCP、KUBE-NODE-PORT-UDP、KUBE-NODE-PORT-LOCAL-UDP:伪装NodePort类型的Service流量
第三代Porxy
从K8s v1.8引入了IPVS模式,在v1.11 GA
iptables模式和ipvs模式都是基于Nerfilter实现,但是定位不同
iptables主要是为了防火墙设计
ipvs用于高性能负载均衡,并且使用更高效的哈希表
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论