首页 > 系统相关 >为什么要开 bridge-nf-call-iptables?

为什么要开 bridge-nf-call-iptables?

时间:2024-02-21 16:46:39浏览次数:26  
标签:iptables bridge nf 网桥 call 节点

为什么要开 bridge-nf-call-iptables?

Kubernetes 环境中,很多时候都要求节点内核参数开启 bridge-nf-call-iptables:

sysctl -w net.bridge.bridge-nf-call-iptables=1
 

参考官方文档 Network Plugin Requirements

如果不开启或中途因某些操作导致参数被关闭了,就可能造成一些奇奇怪怪的网络问题,排查起来非常麻烦。

为什么要开启呢?本文就来跟你详细掰扯下。

基于网桥的容器网络

Kubernetes 集群网络有很多种实现,有很大一部分都用到了 Linux 网桥:

  • 每个 Pod 的网卡都是 veth 设备,veth pair 的另一端连上宿主机上的网桥。
  • 由于网桥是虚拟的二层设备,同节点的 Pod 之间通信直接走二层转发,跨节点通信才会经过宿主机 eth0。

Service 同节点通信问题

不管是 iptables 还是 ipvs 转发模式,Kubernetes 中访问 Service 都会进行 DNAT,将原本访问 ClusterIP:Port 的数据包 DNAT 成 Service 的某个 Endpoint (PodIP:Port),然后内核将连接信息插入 conntrack 表以记录连接,目的端回包的时候内核从 conntrack 表匹配连接并反向 NAT,这样原路返回形成一个完整的连接链路:

但是 Linux 网桥是一个虚拟的二层转发设备,而 iptables conntrack 是在三层上,所以如果直接访问同一网桥内的地址,就会直接走二层转发,不经过 conntrack:

  1. Pod 访问 Service,目的 IP 是 Cluster IP,不是网桥内的地址,走三层转发,会被 DNAT 成 PodIP:Port。
  2. 如果 DNAT 后是转发到了同节点上的 Pod,目的 Pod 回包时发现目的 IP 在同一网桥上,就直接走二层转发了,没有调用 conntrack,导致回包时没有原路返回 (见下图)。

由于没有原路返回,客户端与服务端的通信就不在一个 "频道" 上,不认为处在同一个连接,也就无法正常通信。

常见的问题现象就是偶现 DNS 解析失败,当 coredns 所在节点上的 pod 解析 dns 时,dns 请求落到当前节点的 coredns pod 上时,就可能发生这个问题。

开启 bridge-nf-call-iptables

如果 Kubernetes 环境的网络链路中走了 bridge 就可能遇到上述 Service 同节点通信问题,而 Kubernetes 很多网络实现都用到了 bridge。

bridge-nf-call-iptables 这个内核参数 (置为 1),表示 bridge 设备在二层转发时也去调用 iptables 配置的三层规则 (包含 conntrack),所以开启这个参数就能够解决上述 Service 同节点通信问题,这也是为什么在 Kubernetes 环境中,大多都要求开启 bridge-nf-call-iptables 的原因。

标签:iptables,bridge,nf,网桥,call,节点
From: https://www.cnblogs.com/cheyunhua/p/18025600

相关文章

  • 运行Xmind出现invalid configuration location报错的解决办法
    问题说明安装了XMind后,直接点击*.xmind文件,提示报错“invalidconfigurationlocation”。错误提示内容为:Theconfigurationareaat‘C:\Windows\systems.\configuration’isnotwritable.Pleasechooseawritablelocationusingthe‘-configuration’commandlineo......
  • NFLS 数学专题
    [WC2021]斐波那契题目描述众所周知,小葱同学擅长计算,尤其擅长计算组合数。但是对组合数有了充分研究的小葱同学对组合数失去了兴趣,而开始研究数列。我们定义\(F_0=a\),\(F_1=b\),\(F_i=(F_{i-1}+F_{i-2})\bmodm\)(\(i\ge2\))。现在给定\(n\)组询问,对于每组询问请找......
  • 初中英语优秀范文100篇-086The Person Who Has Influenced Me Most-对我影响最大的人
    PDF格式公众号回复关键字:SHCZFW086记忆树1Mymotheristhepersonwhohasinfluencedmemost.翻译我的母亲是对我影响最大的人简化记忆母亲句子结构主语Mymother作为主语,明确指出了影响说话者最大的人是“我的母亲系动词is系动词,用于连接主语和表语,表示主......
  • %C/jenkins/war/META-INF/MANIFEST.MF (No such file or directory)
     centos7部署jenkins时出现的问题,目前只有stackworkflow有这个问题讨论,但是最后跟当前问题不适配,所以做下记录: 解放方案是更新%C目录权限找到%C目录,一般在JENKINS_HOME目录下,如/var/lib/jenkins修改权限chown-Rjenkins:jenkins/var/lib/jenkins/%C如果更改了JE......
  • 关于NFS 网络文件共享服务的安装、配置
    NFS中文意思是网络文件系统。它用于类linux系统之间的文件共享、类似windows系统的文件共享、磁盘映射。NFS是C/S架构,在server上设置共享目录、并设置哪些共享网段、文件查看方式等。在client上挂载server共享目录到本地就可以查看共享内容。cilent和server之间通过tcp协议进......
  • Winform创建仅接收消息的窗口
    internalclassMessageOnlyWindow:NativeWindow{privateconststringWindowName="MessageOnlyWindow";publicLowLevelView(){varcreateParams=newCreateParams{Style=0,ExStyle=0,......
  • NFA到DFA的转换过程
    目录1.ε-NFA到NFA的转换2.NFA到DFA的转换子集构造法步骤:注意事项:总结从非确定有限自动机(NFA)到确定有限自动机(DFA)的转换过程是一个重要的计算理论概念。这个过程主要包括两个主要步骤:首先是将ε-NFA(带有ε-转换的NFA)转化为NFA,然后是将NFA确定化为DFA。下面详细介绍这两个步骤:......
  • winform实现最小化至系统托盘
    NotifyIcon类介绍NotifyIcon是.NET中的一个类,它用于在系统托盘中显示图标。这个类在System.Windows.Forms命名空间下。使用NotifyIcon类,你可以在系统托盘中创建一个图标,当用户点击或右键点击这个图标时,可以触发一些事件。例如,你可以创建一个上下文菜单(右键菜单),或者当用户......
  • password_encryption_type 和 pg_hba.conf 不匹配导致用户连不上
    问题概述xxx客户新上一套opengauss数据库,在测试中用户输入正确的密码,提示用户密码错误,导致用户被锁问题原因password_encryption_type和pg_hba.conf不匹配导致用户连不上模拟问题因没有opengauss的环境,测试环境选择Mogdb1、准备测试环境,修改password_encryption_type。......
  • Type information 反射信息 Type指一个对象的种类,某种自定义的class,某个interface或st
    Typeinformation反射信息Type指一个对象的种类,某种自定义的class,某个interface或string等,都是type的一种。 (本文参考了Thinkinginjava中的typeinformation这章)什么是TypeinformationType指一个对象的种类,某种自定义的class,某个interface或string等,都是type的一......