本文主要是介绍死磕k8s之calico-nodeport,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
死磕k8s之calico-nodeport
- 序言:
- 我的环境
- 注意
- 开始发请求到nodeport
- 到达work节点1
- 1.首先会到达raw的PREROUTING,包的流向如下
- 2.然后到达mangle的PREROUTING,包的流向如下
- 3.然后到了重要表nat的PREROUTING,在PREROUTING一般对包做DNAT操作,包的流量如下:
- 4.然后就开始第一次的路由选择了
- 5.由于匹配到了路由信息,所以此时会走的链是mangle的FORWARD,但是该表没有对它作任何操作
- 6.接下来看看filter表的FORWARD
- 7.然后是到了mangle的POSTROUTING,然而该表没有任何规则
- 8.接下来到了nat表的POSTROUTING链,nat表重要的是做了一个重要的操作SNAT
- 9.此时包的路径分析基本已经结束了,因为包已经走到pod里面去了。
- 10.因为我们此时我们的pod正好在请求的ip的节点上,如果pod在work节点2上包的走向又会怎么样呢?
- 11.现在就要从上面第3条的nat的PREROUTING开始继续分析
- 12.然后会经历一波路由策略
- 13.mangle的FORWARD链没有任何规则,忽略
- 14.filter的FORWARD链没有重要的规则,但是有一条需要注意,其他的和上面的流程分析一致
- 15.mangle的POSTROUTING没有任何规则,故忽略
- 16.接下来nat的POSTROUTING会做一个SNAT操作
- 17.此时包就从tunl0通道留到work节点2的ens192网卡上了。又要走一遍work节点2上的四表五链。下面是我的抓包信息,可以佐证:
- 18.raw表的PREROUTING和上面的分析一致,没有操作。mangle表的PREROUTING此时也没有什么操作。nat表的PRESOUTING上上面分析的有差别了,就会匹配到
- 19.然后会做路由决策
- 20.接下来会走到mangle的FORWARD表,但是没有规则可匹配。nat的FORWARD也没有什么好分析的,该包也直接进入mangle的POSTROUTING,但是没有规则。然后到了nat的POSTROUTING,此时需要注意一点的是:
- 简单总结
序言:
本篇文章将要聚焦于k8s在使用calico作为网络插件的时候,当pod以nodeport的形式暴露出来,我们以集群节点的ip加端口的形式访问的时候,流量如何转发到具体的pod,流量经过了哪些路由和哪些iptables链。如集群还没准备好,请参考[死磕k8s之calico-环境准备
这篇关于死磕k8s之calico-nodeport的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!