k8s使用的iptables,具体原理是什么?深入浅出

  1. netFilter

netfilter指的是linux内核中的一个框架,这个框架在协议中引入了5个hook点,并允许内核模块在这些hook点注册回调函数

1.1. iptables和netfilter的关系 iptables是一个用户空间的工具,通过特定的机制与内核中的netfilter框架进行交互,负责在这些hook点上配置回调函数。

  1. netfilter的5个hook k8s使用的iptables,具体原理是什么?深入浅出

2.1. 数据包常见的三种hook路径

  • 本机接收到的,目标IP是本机的数据包:NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN
  • 本机接收到的,目标IP不是本机的数据包:NF_IP_PRE_ROUTING -> NF_IP_FORWARD -> NF_IP_POST_ROUTING
  • 本机发送出去的数据包:NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING
  1. hook回调函数:注册到hook点的规则(rule)就是回调函数,rule由匹配条件(match)和目标操作(target)组成。

示例: 3.1. match

  • -p tcp:–protocol tcp,指定TCP协议
  • –dport 21:–destination-port,指定目的端口为21

3.2. target

  • -j ACCEPT:接受此数据包

常见的target有:

  • DROP:丢弃数据包
  • RETURN:跳出当前链
  • ACCEPT:通过数据包
  • QUEUE:将数据包放入用户空间队列
  • custom-chain:跳转到用户自定义的链
  1. table:对规则进行分类 规则具有不同的功能,根据其功能分为五类,如:
  • Filter表:用于过滤规则
  • NAT表:用于地址转换规则
  • Mangle表:用于修改IP数据包头,如TTL
  • Raw表:用于给数据包打标记
  • Security表:与SElinux相关的规则
  1. hook如何调rule:hook调用chain,chain将rule组织成链 规则数量众多,而hook点只有5个,hook如何调用这些规则呢?

答:将规则组织成5条链,每条链对应一个hook点。

table-chain-rule关系: k8s使用的iptables,具体原理是什么?深入浅出k8s使用的iptables,具体原理是什么?深入浅出

  1. 自定义chain 创建自定义链时需要指定在哪个表中创建,默认是在filter表中。

在nat表中创建自定义链时,hook点无法直接调用自定义链,hook点调用5大官方链,官方链中的规则通过jump跳转到自定义链。

  1. 总结 netfilter包的处理流程汇总如下:
  • 数据包按照netfilter框架分别经过5个hook点
  • 每个hook点调用自己对应的官方链
  • 官方链串联的规则按类别分布在5张表中
  • 官方链按照预先定义的表的顺序执行规则
  • 表中的规则可以跳转到表内自定义的链

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享