Kubernetes混合集群下无需Network Policy隔离Pod跨命名空间通信的方法
Flannel混合集群下无Network Policy的跨命名空间隔离方案
以下方案均不依赖Network Policy能力、无需替换当前Flannel CNI、完全兼容CentOS控制节点与Windows 2019 Worker节点的containerd运行时,可直接落地:
具体实现手段
- 节点系统侧防火墙流量拦截
Flannel采用扁平三层vxlan网络模型,跨命名空间的Pod流量必然经过所在节点的网络转发面,直接在节点操作系统层面配置规则拦截非授权流量即可:- Linux类节点(Master、边缘转发节点):通过
iptables/nftables为每个需要隔离的命名空间预留固定的Pod IP段,基于源IP匹配规则,拦截该ns下Pod访问其他非授权ns的Pod网段、Service网段的流量 - Windows 2019 Worker节点:通过高级Windows防火墙规则,匹配HNS(主机网络服务)为Pod分配的vNIC对应IP段,拦截跨非授权网段的vxlan转发流量,完全适配Flannel在Windows节点上的网络封装逻辑
- 配套轻量化定时脚本同步防火墙规则,适配Pod扩缩容带来的IP变化,无需额外安装任何网络插件
- Linux类节点(Master、边缘转发节点):通过
- CoreDNS解析层分区拦截
集群内绝大多数Pod间通信依赖K8s Service域名解析,从DNS层拦截非授权解析请求即可从源头切断跨ns流量入口:- 在CoreDNS配置中启用
template、rewrite插件,识别DNS请求源Pod所属的命名空间,对非授权来源发起的跨ns Service域名请求,直接返回NXDOMAIN错误,让源Pod无法解析到目标服务IP,自然无法建立跨ns连接 - 该方案完全在控制面实现,不需要在Windows Worker节点上修改任何系统配置,对Flannel网络零侵入
- 在CoreDNS配置中启用
- 服务侧轻量白名单过滤
对需要对外提供访问能力的服务,在前端部署轻量反向代理(可直接通过containerd运行在Linux节点):- 配置反向代理访问白名单,仅放行同命名空间下的Pod网段访问请求,对来自其他命名空间的源IP直接拒绝连接
- 该方案不需要节点层面的系统权限,可按单个服务的隔离需求灵活调整,同样适配Windows节点上的工作负载对外访问场景
落地约束提示
以上方案为Network Policy的替代实现,存在固定的场景局限性:
- 无法完全拦截硬编码Pod IP发起的跨命名空间直连流量,需要搭配基础流量审计规则做兜底
- 所有规则需要配套自动化同步逻辑,避免Pod IP漂移、扩缩容导致的规则失效
- 不要在现有Flannel网络上叠加额外的流量封装层,避免与Windows 2019的HNS网络出现兼容性故障
内容的提问来源于stack exchange,提问作者uttara bhosale
相关产品推荐
相关产品推荐

