专栏首页Cloud Native 云原生自习室k8s使用的iptables,具体原理是什么?深入浅出
原创

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

1. netfilter

指的是内核中的netfilter框架,这个框架在协议栈中增加了5个hook,并维护内核模块在这些hook的地方注册的callback函数。

1.1. iptables和netfilter的关系

iptables是用户空间的一个程序,通过一定机制和内核的netfilter打交道,负责往hook上配置callback函数。

2. netfilter的5个hook

在这里插入图片描述

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

● 本机收到的,目的IP是本机的package:NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN

● 本机收到的,目的IP不是本机的package:NF_IP_PRE_ROUTING -> NF_IP_FORWARD -> NF_IP_POST_ROUTING

● 本机发出去的package:NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING

3. hook回调函数:rule

向hook注册的回调函数就是rule,rule = match + target

示例:

#允许ftp服务的21端口 iptables -A INPUT -p tcp --dport 21 -j ACCEPT

3.1. match

● -p tcp:--protocol tcp协议

● --dport 21:--destination-port,目的port是21

3.2. target

● -j ACCEPT :接收此package

常见的target有:

● DROP丢弃

● RETURN跳出当前chain

● ACCEPT通过

● QUEUE放入用户空间队列

custom-chain:跳转到用户自定义的chain

4. table:对rule进行分类

rule具备不同的能力,根据rule的能力分为5类,如:

● FIlter表:rule用于过滤

● NAT表:rule用于地址转换

● Mangle表:rule用来修改IP数据包头,如修改TTL

● Raw表:rule给package打标记

● Security表:rule和SELinux有关

5. hook如何调rule:hook调chain,chain将rule组织成链

rule有很多很多,hook只有5个点位,hook如何调这么多的rule呢?

答:将rule组织成5条链,每条链对应一个hook

table-chain-rule关系:

在这里插入图片描述
在这里插入图片描述

6. 自定义chain

创建自定义chain时需要指定,在哪个table里创建,默认是在filter表。

在nat表里创建自定义chain

iptables -t nat -N CUSTOM_NAT

hook无法直接调用自定义chain,hook调用5大chain,5大chain里的rule通过jump到自定义的chain。

7. 总结

netfilter包的处理流程汇总如下:

● 包按netfilter框架分别经过5个hook点

● 每个hook点调用自己对应的官方chain

● 官方chain串联的rule按类别分散在5张表里

● 官方chain按照预先定义的表的顺序来执行rule

● 表里的rule可以jump到表里自定义的chain

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 基于源码深入浅出来理解k8s的services工作原理

    k8s 中的 services 就是一组同label类型 pod 的服务抽象,为服务提供了LB和反向代理的能力,集群中表示一个微服务的概念。kube-proxy...

    机械视角
  • 事件总线的原理是什么?事件总线如何使用?

    我们都知道在vue组件中有很多通信方式,例如我们都熟知和常见的父子组件通信和兄弟组件通信。在其中还有一种功能非常强大的通信方式,可以做到跨组件通信,那就是事件总...

    用户8715145
  • javafx的使用原理是什么?javafx与java有什么不同?

    在生活中人们接触java比较多,很多人却不知道javafx是什么。javafx是一种编程语言,使用这种语言能够开发丰富的网络程序,目前javafx包括两种类别,...

    用户8739405
  • 深入理解kubernetes(k8s)网络原理之二-service原理

    上一篇文章中我们介绍了pod与主机互通及pod访问外网的原理,在这一章我们将介绍pod与pod的相互访问以及外部服务访问pod的方式,由此引出k8s的servi...

    一生无聊
  • Kubernete折腾记:对外暴露服务

    应用搭建完成后,我们就要让其可以通过外部进行访问,而部分应用(如MySQL、Redis等)可能需要集群内部其它服务访问,这时候我们就需要引入k8s的服务Serv...

    yaxin
  • 微信微博都在使用的OAuth2是什么原理

    现在开放平台非常流行,例如微信开放平台、微博开放平台等,开放平台都涉及用户授权问题,OAuth2就是目前的主流授权解决方案 OAuth2是什么 OAuth(...

    dys
  • 何时该使用 ThreadLocal,它的工作原理是什么(面试必背)?

    ThreadLocal 的概念,面试的时候容易被问到。它的概念很简单,从类的名字就可以知道,线程本地变量的意思。即该变量运行在线程中时,每个线程都独立拥有它而不...

    水货程序员
  • Go 并发编程 — 深入浅出 sync.Pool ,最全的使用姿势,最深刻的原理

    Go 并发相关库 sync 里面有一个有趣的 package Pool,sync.Pool 是个有趣的库,用很少的代码实现了很巧的功能。第一眼看到 Pool 这...

    KevinYan
  • kubernetes 组件之 kube-proxy

    我们知道容器的特点是快速创建、快速销毁,Kubernetes Pod和容器一样只具有临时的生命周期,一个Pod随时有可能被终止或者漂移,随着集群的状态变化而变化...

    看、未来
  • kube-proxy工作原理

    kube-proxy & service必要说明 说到kube-proxy,就不得不提到k8s中service,下面对它们两做简单说明: kube-proxy其...

    Walton
  • Istio 学习笔记:Istio CNI 插件

    当前实现将用户 pod 流量转发到 proxy 的默认方式是使用 privileged 权限的 istio-init 这个 init container 来做的...

    imroc
  • 《Kubernetes》,你需要掌握的 Service 和 Ingress

    k8s 我们已经从 NameSpace、Pod、PodController到Volumn都介绍过了,相信看完的小伙伴们也会很有收获的~那么今天我们继续来到k8s...

    蔡不菜丶
  • 《Kubernetes》,你需要掌握的 Service 和 Ingress

    k8s 我们已经从 NameSpace、Pod、PodController到Volumn都介绍过了,相信看完的小伙伴们也会很有收获的~那么今天我们继续来到k8s...

    潜行前行
  • 502偶现故障的分析

    周五的上午时候,被业务方同学喊过去解决技术问题。问题表象是:业务偶发http 502, 且一次502就会导致上游业务方修数据,因此急需解决这个问题。之前开...

    richard.xia_志培
  • 《k8s权威指南》读书笔记-核心原理篇

    docker技术依赖于linux内核虚拟化技术的发展,对linux内核特性有很强依赖。docker用到的linux技术包括:

    kinnylee
  • 跨VPC或者跨云供应商搭建K8S集群正确姿势-番外篇

    上周发了几篇关于Kubernetes集群搭建相关的文章,里面有一个部分谈到了Kubernetes集群CNI插件(也就是容器网络接口)的部署,很多读者看到了这个部...

    我的小碗汤
  • 综合题:一个请求如何从service到达Pod ?

    今天我们来聊一个有意思的话题:当我们向一个K8s service发起请求后,这个请求是如何到达这个服务背后的Pod上的?

    LanceZhang
  • 跨VPC或者跨云供应商搭建K8S集群正确姿势-番外篇

    上周发了几篇关于Kubernetes集群搭建相关的文章,里面有一个部分谈到了Kubernetes集群CNI插件(也就是容器网络接口)的部署,很多读者看到了这个部...

    云爬虫技术研究笔记
  • 老骥伏枥-Network Policy之iptables实现

    今天这篇是Network Policy系列第二篇,前一篇链接在这里“镜子-或许我们也和Pod一样生活在虚拟世界”。嗯,二哥是一个贴心的人。

    LanceZhang

扫码关注腾讯云开发者

领取腾讯云代金券