kubernetes kube-proxy原理

时隔多年,又开始玩csdn。



k8s中的service是个虚拟概念,完全靠kube-proxy实现


每创建一个service,需要定义三个变量:clusterIP   port    targetPort   nodePort

其中:

clusterIP + port是内部pod访问service用的,随即分配

targetPort是容器的port

nodePort是外部访问service对应的后端pod用的,任何以节点的nodePort都可以访问到;




Userspace模式:

创建服务时:

1)api-server创建service对象,与service绑定的pod地址:称之为endpoints

2)每个节点上的kube-proxy从 api-server中获取到service,创建一个tcpsocketserver_for_serviceA,该服务使用随即端口

3)tcpsocketserver_for_serviceA,实时从apiservice中,获取endpoint的更新,任何对该服务的访问,都会被转发到后端pod中;



访问服务时:

内部pod访问cluster时: 自动被kube-proxy自动创建好的iptables规则,重定向到 tcpsocketserver_for_serviceA,该服务通过round算法转发到后端pod上

外部访问nodeIP+ nodePort时:自动被kube-proxy自动创建好的iptables规则,重定向到 tcpsocketserver_for_serviceA,该服务通过round算法转发到后端pod上


$ sudo iptables -S -t nat
...
-A KUBE-NODEPORT-CONTAINER -p tcp -m comment --comment "default/ssh-service1:" -m tcp --dport 30239 -j REDIRECT --to-ports 36463
-A KUBE-NODEPORT-HOST -p tcp -m comment --comment "default/ssh-service1:" -m tcp --dport 30239 -j DNAT --to-destination 10.0.0.5:36463
-A KUBE-PORTALS-CONTAINER -d 10.254.132.107/32 -p tcp -m comment --comment "default/ssh-service1:" -m tcp --dport 2222 -j REDIRECT --to-ports 36463
-A KUBE-PORTALS-HOST -d 10.254.132.107/32 -p tcp -m comment --comment "default/ssh-service1:" -m tcp --dport 2222 -j DNAT --to-destination 10.0.0.5:36463



iptables模式:

创建服务时:

kuberpeoxy会在每个节点上创建好iptables规则


访问服务时:

直接被iptables规则重定向;(iptables   probability可以实现负责均衡)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值