Weave网络策略控制器(NPC)设计与实现解析
weave 项目地址: https://gitcode.com/gh_mirrors/we/weave
概述
Weave网络策略控制器(Weave NPC)是Weave网络解决方案中负责实现Kubernetes网络策略的关键组件。本文将深入解析其核心设计原理和实现机制,帮助读者理解网络策略在容器网络中的执行过程。
IPSet机制解析
IPSet是Linux内核提供的高效IP地址集合管理机制,Weave NPC利用它来优化策略匹配性能。
IPSet类型与用途
Weave NPC维护多种类型的IPSet集合:
-
命名空间级IPSet:
hash:ip
类型集合,存储允许默认入站流量的Pod IPhash:ip
类型集合,存储允许默认出站流量的Pod IP
-
策略级IPSet:
list:set
类型集合,管理匹配命名空间选择器的IPSet集合hash:ip
类型集合,存储匹配Pod选择器的IP地址hash:net
类型集合,存储网络策略中定义的CIDR例外列表
IPSet命名与生命周期
IPSet名称通过SHA哈希算法生成,确保唯一性:
- 基础格式:
weave-<base85-hash>
- 命名空间级选择器会附加命名空间名称前缀
- 名称长度限制为31字符,采用base85编码压缩
IPSet的生命周期完全由控制器自动管理,响应Kubernetes API事件:
- 创建:当检测到新的命名空间或策略时
- 更新:当Pod或策略变更时
- 删除:当相关资源被移除时
注意:Weave NPC依赖内核模块
xt_set
,部署前需确保该模块已加载。
iptables规则架构
Weave NPC构建了一个多层次的iptables规则体系,实现精细化的流量控制。
入站流量处理链
-
WEAVE-NPC主链:
- 静态规则处理已建立连接
- 新连接依次通过默认策略链和入站策略链
-A WEAVE-NPC -m state --state RELATED,ESTABLISHED -j ACCEPT -A WEAVE-NPC -m state --state NEW -j WEAVE-NPC-DEFAULT -A WEAVE-NPC -m state --state NEW -j WEAVE-NPC-INGRESS
-
WEAVE-NPC-DEFAULT链:
- 动态维护DefaultAllow命名空间的放行规则
- 匹配目标IP在允许集合则直接ACCEPT
-
WEAVE-NPC-INGRESS链:
- 为每个网络策略的入站规则创建匹配规则
- 组合匹配协议、源/目标集合和端口
出站流量处理链
-
WEAVE-NPC-EGRESS主链:
- 静态规则处理已建立连接
- 新连接依次通过默认出站链和自定义出站链
- 最终未标记流量将被丢弃
-A WEAVE-NPC-EGRESS -m state --state RELATED,ESTABLISHED -j ACCEPT -A WEAVE-NPC-EGRESS -m state --state NEW -j WEAVE-NPC-EGRESS-DEFAULT -A WEAVE-NPC-EGRESS -m state --state NEW -m mark ! --mark 0x40000/0x40000 -j WEAVE-NPC-EGRESS-CUSTOM -A WEAVE-NPC-EGRESS -m mark ! --mark 0x40000/0x40000 -j DROP
-
WEAVE-NPC-EGRESS-DEFAULT链:
- 动态维护DefaultAllow命名空间的放行规则
- 匹配源IP在允许集合则跳转到标记链
-
WEAVE-NPC-EGRESS-ACCEPT链:
- 静态规则为允许流量设置标记(0x40000)
-
WEAVE-NPC-EGRESS-CUSTOM链:
- 为每个网络策略的出站规则创建匹配规则
流量引导机制
Weave NPC通过以下规则将特定流量导入策略引擎:
-A INPUT -i weave -j WEAVE-NPC-EGRESS
-A FORWARD -i weave -j WEAVE-NPC-EGRESS
-A FORWARD -o weave -j WEAVE-NPC
受影响的流量类型
- 本地容器间桥接流量
- 路由器到本地容器的桥接流量
- 互联网到NodePort的流量(经DNAT后)
不受影响的流量类型
- 本地容器到路由器的流量
- 主机网络命名空间的进程流量
- 容器到互联网的路由流量
关键依赖:需要加载
br_netfilter
内核模块并启用bridge-nf-call-iptables
系统参数。
设计原理深度解析
Weave NPC的设计体现了几个关键优化思想:
- 分级处理:将策略匹配分为默认策略和自定义策略,减少不必要的规则匹配
- 状态感知:优先处理已建立连接,提升性能
- 标记机制:使用数据包标记记录策略决策结果
- 集合优化:利用IPSet减少重复规则,提升匹配效率
这种设计在保证策略灵活性的同时,最大程度降低了网络性能开销,是容器网络策略实现的典范方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考