k8s 基础入门篇之开启 firewalld
前面在部署k8s时,都是直接关闭的防火墙。由于生产环境需要开启防火墙,只能放行一些特定的端口, 简单记录一下过程。
1. firewall 与 iptables 的关系
1.1 防火墙(Firewall)
定义:
防火墙是网络安全系统,用于监控和控制进出网络的流量,基于预定义的规则允许或阻止数据包。它是广义上的概念,不依赖具体工具。
功能:流量过滤(允许/拒绝), 网络地址转换(NAT),端口转发,防御攻击(如 DDoS)
1.2. iptables
定义:
iptables 是 Linux 内核中实现防火墙功能的具体工具,通过配置规则控制网络流量。它是 Linux 系统上防火墙的底层实现之一。
核心机制:
- 表(
Tables):按功能分类规则集,如filter(过滤)、nat(地址转换)、mangle(修改数据包头)等。 - 链(
Chains):规则生效的节点,如INPUT(入站流量)、OUTPUT(出站流量)、FORWARD(转发流量)。 - 规则(
Rules):定义匹配条件和动作(如ACCEPT、DROP、REJECT)。
1.3 两者的关系
实现与工具:
防火墙是抽象的安全概念,iptables 是实现这一概念的具体工具。
iptables 通过操作 Linux 内核的 netfilter 框架(内核模块)来执行防火墙功能。
- netfilter 是内核中的核心引擎,负责执行流量处理。
- iptables 是用户空间的命令行工具,用于配置
netfilter规则。 - nftables:新一代 Linux 防火墙工具,取代
iptables,提供更简洁的语法和更高性能。
2. 开启 firewalld 遇到的问题
没有在FORWARD中放行端口。
利用iptables 或 内核版本更高的系统中使用ntf 在 INPUT 链中添加 需要放行的端口,
只放开了 INPUT 的端口,没有放开 FORWARD,因为pod id 是走的ipv4转发, 导致pod ip 与 主机节点ip 不通,跨节点时,A节点的pod ip 与B节点 service 的 cluster ip/pod ip 也不通。
下面是一个基本的放行脚本:FORWARD 放行所有端口:
pod ip : 10.42.0.0/16 网段
cluster ip : 10.43.0.0/16 网段
#!/bin/bash# 定义允许访问的节点IP及VIP(空格分隔)
service_ip_list=("172.10.9.2" ""172.10.9.3" ""172.10.9.4" )pod_cidr=10.42.0.0/16
service_cluster_cidr=10.43.0.0/16
# 对外端口
external_port_list="22, 80, 443, 30000-32767"# 节点之间互通端口
node_tcp_port_list="179, 2379, 2380, 6443, 10250, 10260"input_chain='filter_IN_public_allow'
forward_chain='filter_FWD_public_allow'# 添加新规则
function add_rules() {echo "[*] 添加新规则..."nft add rule inet firewalld $input_chain tcp dport { $external_port_list } acceptfor ip in "${service_ip_list[@]}"; doout=`ip addr | grep $ip`if [ -z "$out" ]; thennft add rule inet firewalld $input_chain ip saddr $ip tcp dport { $node_tcp_port_list } acceptnft add rule inet firewalld $forward_chain ip saddr $ip acceptfidonenft add rule inet firewalld $input_chain ip saddr $pod_cidr acceptnft add rule inet firewalld $input_chain ip saddr $service_cluster_cidr acceptnft add rule inet firewalld $forward_chain ip saddr $pod_cidr acceptnft add rule inet firewalld $forward_chain ip saddr $service_cluster_cidr acceptecho "[+] 规则添加完"
}
3. 排查过程
- 关闭防火墙后一切正常,可以确认是防火墙问题;
- 在INPUT 中放开所有的端口,发现问题依然存在;
- 在
FORWARD中放开pod ip和cluster ip网段后立马恢复。
可以确认是forward 影响的,之所以会想到这,是因为配置环境就设置了 net.ipv4.ip_forward = 1
那为什么会受转发的影响呢?
4. 问题分析
Kubernetes 集群网络有很多种实现,有很大一部分都用到了 Linux 网桥,按常理 pod IP 是一个桥接网络,而linux bridge是虚拟的二层转发设备。 iptables 规则是对IPv4/IPv6/arp 三层的网络的INPUT/OUTPUT/FORWARD链进行过滤处理。同网段 pod 之间直接走的二层转发,不用经过三层,那是什么把二层的流量转到三层去了呢?
这是因为在配置环境时开启了 net.bridge.bridge-nf-call-iptables = 1 这个内核参数。
net.bridge.bridge-nf-call-iptables这个参数是Linux内核中的一个网络桥接模块的配置参数。默认情况下,网桥工作在二层,也就是数据链路层,而iptables的规则是在三层(网络层)处理的,比如针对IP数据包的过滤。所以,默认情况下,网桥转发的流量可能不会经过iptables的FORWARD链,因为FORWARD链处理的是经过路由决策的三层转发,而桥接的流量可能被认为是二层的不经过路由。
当设置这个参数为1时,系统会在桥接的流量处理过程中调用netfilter的钩子函数,这样iptables的规则就会被应用到桥接的流量上。也就是说,原本在二层转发的数据包会被传递到三层的netfilter框架中,从而被FORWARD链或者其他链的规则处理。这样用户配置的iptables规则就可以影响到桥接的流量了。
1. 默认行为(参数为0时)
网桥工作在数据链路层(二层),直接根据 MAC 地址转发数据包。
不会触发 iptables 的三层规则(如 FORWARD 链),因为 iptables 默认只处理经过路由决策(三层)的流量。
2. 设置 bridge-nf-call-iptables=1 后的行为
内核会将网桥的流量注入到 netfilter 框架中,使其经过 iptables 规则处理。
二层转发的数据包会被以下 iptables 链处理:
- PREROUTING 链(在路由决策前)
- FORWARD 链(在转发时)
- POSTROUTING 链(在路由决策后)
因此,FORWARD 链的规则会生效,可对桥接流量进行过滤或修改。
代码跟踪:
https://github.com/torvalds/linux/blob/master/net/bridge/br_netfilter_hooks.c
先注册各种钩子:
https://github.com/torvalds/linux/blob/9d7a0577c9db35c4cc52db90bc415ea248446472/net/bridge/br_netfilter_hooks.c#L1111
{
.....ret = nf_register_net_hooks(net, br_nf_ops, ARRAY_SIZE(br_nf_ops));if (ret)return NOTIFY_BAD;brnet->enabled = true;return NOTIFY_OK;
}
然后根据优先级执行子钩子的回调函数:
会调用 br_nf_forward ,这就是为什么pod ip 在桥接下,iptables 的FORWARD中没有放行会导致 网络不通的原因。
{.hook = br_nf_forward,.pf = NFPROTO_BRIDGE,.hooknum = NF_BR_FORWARD,.priority = NF_BR_PRI_BRNF,
},
https://github.com/torvalds/linux/blob/9d7a0577c9db35c4cc52db90bc415ea248446472/net/bridge/br_netfilter_hooks.c#L1068
https://github.com/torvalds/linux/blob/9d7a0577c9db35c4cc52db90bc415ea248446472/net/bridge/br_netfilter_hooks.c#L671
static unsigned int br_nf_forward_ip(struct sk_buff *skb,const struct nf_hook_state *state,u8 pf)
{
.....nf_bridge->physoutdev = skb->dev;NF_HOOK(pf, NF_INET_FORWARD, state->net, NULL, skb,brnf_get_logical_dev(skb, state->in, state->net),parent, br_nf_forward_finish);return NF_STOLEN;
}
5. k8s pod ip
1. Pod IP 的本质
Pod IP 是虚拟的:Kubernetes 为每个 Pod 分配一个集群内唯一的 IP(通常由 CNI 插件管理,如 Calico、Flannel、Cilium 、kube-router 等)。
二层(L2):Pod IP 在同一个子网内可以直接通过 MAC 地址通信(如同一节点的 Pod)。
三层(L3):跨节点 Pod 通信需要经过路由或封装(如 VXLAN、IPIP)。
2. 为什么 Pod 流量会经过 iptables FORWARD
iptables 的 FORWARD 链负责处理 经过本机但目标不是本机 的流量(即“转发”流量)。Pod 流量进入 FORWARD 链的典型场景:
(1) 跨节点 Pod 通信
当 Pod A(Node 1) 访问 Pod B(Node 2):
流量从 Pod A 的虚拟网卡(如 veth)发出。
经过宿主机的网络栈(因为 Pod 网络是虚拟的,依赖宿主机路由)。
宿主机根据路由表将流量转发到目标节点(通过 calico/flannel/cilium 等 CNI 插件)。
此时流量是“转发”的(非本机流量),因此触发 iptables FORWARD 链。
(2) Kubernetes 的 Service 和 NetworkPolicy
Service 的 kube-proxy:默认使用 iptables 或 ipvs 实现负载均衡,可能修改 FORWARD 规则。
NetworkPolicy:如果使用 Calico/Cilium 等插件,它们会通过 iptables 在 FORWARD 链中插入规则,实现 Pod 间的访问控制(如 allow/deny)。
(3) CNI 插件的工作机制
许多 CNI 插件(如 Calico)依赖 iptables 实现:
- MASQUERADE:对出集群的流量做 SNAT。
- FILTER:过滤非法流量。
- FORWARD:允许或拒绝跨节点流量。
参考:
https://imroc.cc/kubernetes/appendix/faq/why-enable-bridge-nf-call-iptables/
https://izsk.me/2021/08/18/Kubernetes-bridge-nf-call-iptables/
相关文章:
k8s 基础入门篇之开启 firewalld
前面在部署k8s时,都是直接关闭的防火墙。由于生产环境需要开启防火墙,只能放行一些特定的端口, 简单记录一下过程。 1. firewall 与 iptables 的关系 1.1 防火墙(Firewall) 定义: 防火墙是网络安全系统&…...
Psychology 101 期末测验(附答案)
欢呼 啦啦啦~啦啦啦~♪(^∇^*) 终于考过啦~ 开心(*^▽^*) 撒花✿✿ヽ(▽)ノ✿ |必须晒下证书: 判卷 记录下判卷,还是错了几道,填空题2道压根填不上。惭愧~ 答案我隐藏了,实在想不出答案的朋友可以留言,不定时回复。 建议还是认认真真的学习~认认真真的考试~,知识就…...
安全协议分析概述
一、概念 安全协议(security protocol),又称密码协议。是以密码学为基础的消息交换协议,在网络中提供各种安全服务。(为解决网络中的现实问题、满足安全需求) 1.1 一些名词 那什么是协议呢? …...
基础学习:(7)nanoGPT 剩下的细节
文章目录 前言3 继续巴拉结构3.1 encode 和 embedding3.2 全局layernorm3.3 lm_head(language modeling) 和 softmax3.4 softmax 和 linear 之间的 temperature和topk3.5 weight tying 前言 在 基础学习:(6)中, 在运行和训练代码基础上,向代…...
【HDFS】verifyEC命令校验EC数据正确性
verifyEC命令是HDFS里用于验证EC文件正确性的一个工具。这是一个非常实用的工具,能帮助我们确定EC的数据内容是否正确,并且如果不正确的话,还有可能会触发reportBadBlock给NN,让NN进行块的重构。 本文先介绍一下verifyEC命令的使用方法,再描述其实现原理细节。 一、命令…...
YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响
在目标检测领域,标签噪声与尺度敏感问题始终是制约模型性能提升的"阿喀琉斯之踵"。2025年CVPR最佳论文提出的尺度动态损失函数(Scale-based Dynamic Loss, SDL),通过构建自适应损失调节机制,不仅实现了对YOLOv11检测精度的指数级提升,更重新定义了损失函数的设…...
Spark-SQL连接Hive总结及实验
一、核心模式与配置要点 1. 内嵌Hive 无需额外配置,直接使用,但生产环境中几乎不使用。 2. 外部Hive(spark-shell连接) 配置文件:将hive-site.xml(修改数据库连接为node01)、core-site.xml、…...
ROS 2的跨平台优势:国产芯片与Ubuntu系统的深度协同
一、国产硬件全场景适配:从教育到工业的ROS 2革命 瑞芯微三剑客性能解析 芯片架构特性ROS 2优化方案典型延迟/算力RK3399双核A72四核A53启用rmw_fastrtps内存池隔离通信延迟≤1.5msRK3588四核A766TOPS NPUrknn_ros2中间件实现算法热加载目标检测15ms4KRK3576六核A…...
Linux Wlan-四次握手(eapol)框架流程
协议基础 基于 IEEE 802.1X 标准实现的协议 抓包基础 使用上一章文章的TPLINK wn722n v1网卡在2.4G 频段抓包(v2、v3是不支持混杂模式的) eapol的四个交互流程 根据不同的认证模式不同,两者的Auth流程有所不同,但是握手流程基…...
web组件和http协议
1.web组件 2.自定义元素 3.影子DOM 4.HTML模板 5.http协议 6.tcp ip协议...
软件工程师中级考试-上午知识点总结(下)
6. 知识产权和标准化 软件著作权客体:指的是受软件著作权保护的对象,即计算机程序和相关文档。知识产权具有严格的地域性。不受保护期限制:著名权、修改权、保护作品完整权;注意的是,发表权受保护期限制。专利权在期满…...
IO流--字节流详解
IO流 用于读写数据的(可以读写文件,或网络中的数据) 概述: I指 Input,称为输入流:负责从磁盘或网络上将数据读到内存中去 O指Output,称为输出流,负责写数据出去到网络或磁盘上 因…...
Cesium学习笔记——dem/tif地形的分块与加载
前言 在Cesium的学习中,学会读文档十分重要!!!在这里附上Cesium中英文文档1.117。 在Cesium项目中,在平坦坦地球中加入三维地形不仅可以增强真实感与可视化效果,还可以提升用户体验与交互性,…...
FPGA 中 XSA、BIT 和 DCP 文件的区别
在 FPGA(现场可编程门阵列)开发中,XSA、BIT 和 DCP 文件是常见的文件类型,它们在功能、用途、文件内容等方面存在明显区别,以下是详细介绍: 1. XSA 文件 定义与功能 XSA(Xilinx Shell Archiv…...
Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
当前EXSI上虚拟机所在的单独数据磁盘空间满了,需要对空间进行扩容,我们先在主机对磁盘容量进行调整,然后在系统里面对磁盘空间进行拓展,这些操作需要保留数据并且不改变现有的磁盘格局。 遵循大致操作流程是: 1.先登录…...
Java排序算法百科全书:原理、实现与实战指南
一、排序算法全景视图 1. 算法分类体系 graph TDA[排序算法] --> B[比较排序]A --> C[非比较排序]B --> B1[基本排序]B1 --> B11[冒泡排序]B1 --> B12[选择排序]B1 --> B13[插入排序]B --> B2[高效排序]B2 --> B21[快速排序]B2 --> B22[归并排序]B…...
开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据
Author :PNJIE DATE: 2025/04/21 V0.0 前言 该项目旨在使用Matlab处理LTspice的.raw文件,包括动态计算和绘图,部分脚本基于LTspice2Matlab项目: PeterFeicht/ltspice2matlab: LTspice2Matlab - 将LTspice数据导入MATLAB github地址&#x…...
(二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)
框架:GrafanaPrometheusMysqld_exporter 一、监控查看端安装 Grafana安装-CSDN博客 普罗米修斯Prometheus监控安装(mac)-CSDN博客 1.启动Grafana服务 brew services start grafana 打开浏览器输入http://localhost:3000进入grafana登录…...
c++基础·列表初始化
目录 一、列表初始化的核心优势 二、基础数据类型与数组初始化 1. 基础类型初始化 2. 数组初始化 三、类与结构体初始化 1. 构造函数匹配规则 2. 注意事项 四、标准容器初始化 五、聚合类型(Aggregate Types)初始化 1. 聚合类型定义 2. 初始化…...
RK3588上编译opencv 及基于c++实现图像的读入
参考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安装依赖包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…...
论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Alignment: A Comprehensive Survey 人工智能对齐:全面调查 https://arxiv.org/pdf/2310.19852 https://alignmentsurvey.com/ https://www.doubao.com/cha…...
element-ui中的上传组件el-upload非自动上传监听不到success
当设置了:auto-upload"false" 监听不到success回调 要用自定义请求去监听 :http-request"requestUploadFile" //设置 auto-upload为false,要自定义请求http-request //:auto-upload"false" //:http-request"requestUploadFi…...
Git创建空分支并推送到远程仓库
new-empty-branch是新分支的名称 完全空提交(Git 2.23)【推荐】 git switch --orphan new-empty-branch git config user.email "youexample.com" git config user.name "Your Name" git commit --allow-empty -m "初始空提交…...
Github中项目的公开漏洞合集
前言 最近在搜CVE的时候,意外发现了GitHub Security Advisories。 可能对一些人来说,已经是老东西了。但我还是第一次见到。 觉得挺好用的,就分享出来。 GitHub Security Advisories GitHub Security Advisories 是 GitHub 提供的一项重要…...
蚂蚁全媒体总编刘鑫炜再添新职,出任共工新闻社新媒体研究院院长
2025年4月18日,共工新闻社正式宣布聘任蚂蚁全媒体总编刘鑫炜为新媒体研究院院长。此次任命标志着刘鑫炜在新媒体领域的专业能力与行业贡献再次获得权威机构认可。 刘鑫炜深耕新媒体领域多年,曾担任中国新闻传媒集团新媒体研究院院长、蚂蚁全媒体总编等职…...
吴恩达强化学习复盘(2)K-Means初始化|K的选择|算法优化
K-Means初始化 K-Means 算法的第一步是随机选择位置作为初始聚类中心(new one through newk),但如何进行随机猜测是需要探讨的问题。一般需要多次尝试初始猜测,以期望找到更好的聚类结果。 K 值选择及初始聚类中心选取方法 K 值…...
SQL优化案例分享 | PawSQL 近日推出 Lateral Join 重写优化算法
一、Lateral 查询语法介绍 Lateral 查询是SQL中的一种连接方式,它允许FROM子句中的子查询引用同一FROM子句中前面的表的列。虽然这种特性提供了强大的表达能力,但在某些场景下可能导致性能问题。PawSQL优化器近日实现了一种针对特定类型Lateral Join的重…...
电子电器架构 ---软件定义汽车的电子/电气(E/E)架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...
ONLYOFFICE协作空间3.1发布:虚拟数据房间中基于角色的表单填写、房间模板、改进访客管理等
全新升级的 ONLYOFFICE 协作空间有着约 40 项新功能和改进,将您的文档协作和管理体验提升到全新高度。阅读本文,了解所有优化功能。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目,专注于高级和安全的文档处理,可提供文本文档、…...
Docker如何更换镜像源提高拉取速度
在国内,由于网络政策和限制,直接访问DockerHub速度很慢,尤其是在拉取大型镜像时。为了解决这个问题,常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源,并提供当前可用的镜像源。 换源方法 方法1&#x…...
