在基于Kubernetes部署AI Agent或自动化代理服务时,多个Agent实例之间以及Agent与后端系统之间经常需要通信,但如果不加约束,一旦某个Agent被攻破,攻击者就能在集群内部横向移动。网络隔离正是用来收敛这种东西向流量的手段。本文围绕NetworkPolicy与防火墙两条技术路线,分析它们如何解决Agent网络隔离问题。

NetworkPolicy的工作原理与典型配置
NetworkPolicy是Kubernetes原生的网络隔离对象,它本身只是声明式规则,真正生效依赖集群的CNI插件(如Calico、Cilium)将规则翻译成iptables或eBPF程序。它通过podSelector和namespaceSelector匹配源和目的Pod,再结合ingress与egress字段定义允许或拒绝的流量。对于Agent场景,我们可以给不同职能的Agent打上不同标签,从而限制它们只能访问特定的API服务。
例如,一个负责抓取数据的Agent带有标签role=collector,我们希望它只能向外请求数据库,而不能被其他Agent主动连接。下面这段配置拒绝命名空间内所有入站流量,仅开放来自监控系统的访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: agent-collector-isolate
namespace: agents
spec:
podSelector:
matchLabels:
role: collector
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: monitor
这种方式的优势在于策略跟随Pod生命周期自动更新,Agent扩容或重建时IP变化不会影响规则。但需要注意,NetworkPolicy只能控制集群内的Pod流量,对节点级进程或离开集群的流量无能为力,而且并非所有CNI都完整支持,使用前必须确认网络插件能力。
防火墙在Agent隔离中的定位与局限
传统防火墙或云安全组工作在节点网络层或VPC边界,通过五元组(源IP、目的IP、协议、端口、状态)过滤报文。对于部署在虚拟机或裸金属上的Agent,防火墙可以限制某台主机只能访问特定后端地址。在混合架构中,部分Agent跑在Kubernetes外,防火墙就成了统一隔离手段。
下面是用iptables在主机上限制Agent进程仅能访问内部日志服务的示例,假设Agent本地出口标记为1001:
# 清空自定义链 iptables -N AGENT_OUT # 允许访问日志服务 10.0.0.5:514 iptables -A AGENT_OUT -d 10.0.0.5 -p udp --dport 514 -j ACCEPT # 拒绝其他出站 iptables -A AGENT_OUT -j DROP # 将Agent相关流量引入链 iptables -A OUTPUT -m owner --uid-owner 1001 -j AGENT_OUT
防火墙规则直观且对遗留系统友好,但面对Kubernetes中Pod IP频繁变更时,基于IP的防火墙策略会迅速失效,需要借助IP固定或外部控制器同步。此外,防火墙难以感知应用层语义,无法像NetworkPolicy那样用标签描述“只允许带某标签的调用方”,在大规模Agent编排中运维负担较重。
联合方案与排障思路
实际生产中,单一手段往往不够。常见做法是集群内用NetworkPolicy做细粒度Pod隔离,集群边界和底层主机用防火墙做兜底。比如Agent需要通过节点端口对外暴露调试接口时,防火墙限制该端口仅对运维网段开放,而NetworkPolicy保证Agent Pod不会被同命名空间其他负载随意调用。
排障时首先要分清流量被哪一层丢弃。可以在Agent Pod内用curl或telnet测试连通性,若Pod间不通但主机防火墙未限制,多半是CNI未生效NetworkPolicy;若出集群即失败,则应检查节点iptables或云安全组。通过kubectl describe networkpolicy确认选择器匹配,再用iptables -L -n -v在节点上观察计数器变化,能快速定位策略落点。
总体而言,解决Agent网络隔离不应盲目二选一。理解NetworkPolicy的标签驱动模型和防火墙的IP包过滤本质,结合运行环境选型,才能在动态伸缩和安全收敛之间取得平衡。随着Agent规模增长,建议将策略代码化并纳入CI校验,避免人工配置带来的隔离漏洞。
NetworkPolicy防火墙网络隔离修改时间:2026-08-18 04:16:24