为什么 kubernetes 环境要求开启 bridge-nf-call-iptables

2023-05-16

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 的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 kubernetes 环境要求开启 bridge-nf-call-iptables 的相关文章

  • Python的序列切片

    Python提供了一种把序列切成小块的操作 xff0c 称为切片 xff08 slice xff09 操作 xff0c 其本质是访问由序列中的某些元素所构成的子集 Python的序列数据结构都支持切片操作 xff0c 如列表 元组 字符串等
  • CMFCShellTreeCtrl控件的效率改进

    VS2010新增加 xff08 相较于VC6 xff09 了一个CMFCShellTreeCtrl 类 xff0c 说实话 xff0c 这个类确实很好 xff0c 但是有一点你会发现 xff0c 在展开某些节点的时候可能会很慢很慢 这严重影
  • 利用storyboard 自定义cell

    现在讲究的是快速开发 xff0c storyboa 39 r 39 d自定义cell还是比较少用得 xff0c 但是开发起来特别快 镔哥就不多说了 xff0c 直接给你们demo看吧 1 xff1a 自定义cell xdxTableView
  • gcc命令行详解

    1 gcc包含的c c 43 43 编译器 gcc cc c 43 43 g 43 43 gcc和cc是一样的 xff0c c 43 43 和g 43 43 是一样的 xff0c 没有看太明白前面这半句是什 么意思 一般c 程序 就用gcc
  • 解决远程桌面不能复制粘贴的方法

    1 杀死rdpclip exe进程 2 开始 gt 运行 gt rdpclip exe 重新运行此程序
  • 《计算机应用》期刊投稿经验

    文章目录 投稿经历投稿流程正刊 OR 增刊版面费注意事项常见问题 投稿经历 1 做的区块链方向 2 从做完试验 xff0c 然后开始写论文 xff0c 写了一个月左右 xff0c 然后交给导师改 xff0c 改了一个礼拜 xff0c 之后就
  • mac初次使用php环境简单搭建

    mac电脑默认已经安装apache服务 xff0c apache配置文件路径为 xff1a etc apache2 httpd conf apache服务启动 关闭 重启命令 xff1a sudo apachectl start stop
  • 阿里云缓存服务器里面的一个坑

    今天在做视频同步的时候无意中发现的一个坑 公司的服务器是放在了阿里云上面的 xff0c 阿里云有个十分给力的路由缓存功能 xff0c 就是通过各种cache头去访问服务器的时候 xff0c 阿里云会把这个结果保存到缓存服务器中 xff0c
  • 【树莓派4B学习笔记】无显示屏使用网线配置树莓派系统

    在咸鱼买了个二手树莓派4B 4G xff0c 准备拿来学习Linux的 xff0c 不过目前还是先学习配置官方的系统Raspios xff08 以前叫Raspbian xff09 其实到手的时候卡里有系统 xff0c 但还是想自己动手试试
  • ESP8266工作模式/烧录模式(整合)

    目录 一 硬件部分 1 工作模式 烧录模式 Q amp A xff1a 二 ESP 01 arduino烧写 1 首选项配置 2 https arduino esp8266 com stable package esp8266com ind
  • 以太网与 TCP/IP

    以太网 Ethernet 以太网是一套标准 xff0c 制定了相当于 OSI 模型 中第一层 xff08 物理层 xff09 和第二层 xff08 数据链路程 xff09 的技术规范 在物理层上 xff0c 以太网采用 RJ45 接口和双铰
  • Debian10(xfce4)Linux换源中文输入法sudo等常用软件安装配置

    文章目录 1 debian系统安装选英文还是中文2 安装设置sudo xff08 debian默认是没有的 xff09 xff1a 3 debian10换国内源https测试版testing源稳定版stable源 3 安装网络管理插件与代理
  • 关于ACLLib

    文章目录 ACLLib基本操作 xff1a Dev C 43 43 下创建配置 xff1a 绘图函数 xff1a The Callbacks xff08 回调事件 xff09 MVC设计模式 ACLLib基本操作 xff1a Dev C 4
  • 数据结构笔记Data Structure

    文章目录 抽象行为抽象数据抽象 数据结构Data Structure抽象数据类型ADT xff08 Abstract Data Type xff09 线性结构多项式存储多项式加法运算多项式的表示 xff08 相乘和相加 xff09 线性表L
  • python24个顶级

    用于不同数据科学任务的Python库 用于数据收集的Python库 Beautiful Soup Scrapy Selenium 用于数据清理和数据操作的Python库 Pandas PyOD NumPy Spacy 用于数据可视化的Pyt
  • python3网络爬虫开发实战(配置踩坑及学习备忘)

    文章目录 一 开发环境配置1 1 xff0c python安装Windows xff08 设置环境变量 xff09 LinuxMac 1 2 请求库的安装requestsSeleniumChromeDriverGeckoDriverPhan
  • windows实用工具软件

    windows实用工具软件 MD5校验 MD5校验 WINDOWS自带的工具certutil exe 命令终端输入 xff1a certutil hashfile filename exe MD5
  • 开源项目预览

    开源项目网址插入dev ide 打开预览 xff1a https dev ide
  • Debian搭建web服务器(最简单的搭建)

    apt install y apache2 安装完成之后 xff0c 浏览器中输入http localhost 或者 http 127 0 0 1 就可以看到apache2的默认页面 xff0c apache2默认网页文件存放在 var w
  • 编程的智慧

    编程的智慧 反复推敲代码 xff0c 质 gt 量 代码模块化 避免太长函数 xff08 40行 xff1f xff09 多复用提取成函数 复杂逻辑提取成辅助函数 xff0c 简化逻辑 复杂表达式做成中间变量 xff08 嵌套函数 xff0

随机推荐