Weave网络策略控制器(NPC)设计与实现解析

Weave网络策略控制器(NPC)设计与实现解析

weave weave 项目地址: https://gitcode.com/gh_mirrors/we/weave

概述

Weave网络策略控制器(Weave NPC)是Weave网络解决方案中负责实现Kubernetes网络策略的关键组件。本文将深入解析其核心设计原理和实现机制,帮助读者理解网络策略在容器网络中的执行过程。

IPSet机制解析

IPSet是Linux内核提供的高效IP地址集合管理机制,Weave NPC利用它来优化策略匹配性能。

IPSet类型与用途

Weave NPC维护多种类型的IPSet集合:

  1. 命名空间级IPSet

    • hash:ip类型集合,存储允许默认入站流量的Pod IP
    • hash:ip类型集合,存储允许默认出站流量的Pod IP
  2. 策略级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规则体系,实现精细化的流量控制。

入站流量处理链

  1. 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
    
  2. WEAVE-NPC-DEFAULT链

    • 动态维护DefaultAllow命名空间的放行规则
    • 匹配目标IP在允许集合则直接ACCEPT
  3. WEAVE-NPC-INGRESS链

    • 为每个网络策略的入站规则创建匹配规则
    • 组合匹配协议、源/目标集合和端口

出站流量处理链

  1. 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
    
  2. WEAVE-NPC-EGRESS-DEFAULT链

    • 动态维护DefaultAllow命名空间的放行规则
    • 匹配源IP在允许集合则跳转到标记链
  3. WEAVE-NPC-EGRESS-ACCEPT链

    • 静态规则为允许流量设置标记(0x40000)
  4. 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

受影响的流量类型

  1. 本地容器间桥接流量
  2. 路由器到本地容器的桥接流量
  3. 互联网到NodePort的流量(经DNAT后)

不受影响的流量类型

  1. 本地容器到路由器的流量
  2. 主机网络命名空间的进程流量
  3. 容器到互联网的路由流量

关键依赖:需要加载br_netfilter内核模块并启用bridge-nf-call-iptables系统参数。

设计原理深度解析

Weave NPC的设计体现了几个关键优化思想:

  1. 分级处理:将策略匹配分为默认策略和自定义策略,减少不必要的规则匹配
  2. 状态感知:优先处理已建立连接,提升性能
  3. 标记机制:使用数据包标记记录策略决策结果
  4. 集合优化:利用IPSet减少重复规则,提升匹配效率

这种设计在保证策略灵活性的同时,最大程度降低了网络性能开销,是容器网络策略实现的典范方案。

weave weave 项目地址: https://gitcode.com/gh_mirrors/we/weave

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻珺闽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值