为什么Kubernetes工作节点上的Egress流量无法正常工作?
首先你配置的allow-all-egress网络策略本身逻辑是正确的,规则匹配所有Pod且允许全部出站流量,问题并不出在该策略本身,可按照以下步骤逐层排查:
1. 确认CNI插件网络策略支持情况
- 如果你使用的是默认Flannel CNI,其本身不支持NetworkPolicy能力,需要额外部署网络策略控制器(如Calico的策略控制器),但无网络策略控制器的情况下默认集群所有Pod流量全通,因此不会导致公网访问被阻断。
2. 分层排查连通性
先进入异常Pod执行命令验证:
# 先验证IP层连通性,跳过DNS解析 ping 114.114.114.114
- 如果IP ping不通,跳转第三步排查路由/NAT配置
- 如果IP能通,执行
nslookup baidu.com验证DNS解析:解析失败则检查kube-system命名空间下CoreDNS Pod运行状态,确认CoreDNS配置无异常。
3. 验证工作节点公网连通性
直接登录到对应工作节点执行公网ping测试:
- 如果节点本身无法访问公网,先修复节点基础网络,检查节点网关配置、公网IP绑定、运营商/云服务商出站规则限制。
- 如果节点本身可以访问公网,说明是Pod流量出节点时的NAT配置异常。
4. 排查CNI出站NAT配置
Kubernetes Pod默认使用私有网段,公网无法直接路由该网段地址,需要CNI配置出站MASQUERADE(地址伪装)将Pod流量源IP转换为节点IP:
- Calico CNI:执行
kubectl get ippools -o yaml,检查IP池配置中natOutgoing字段是否为true - Flannel CNI:检查工作节点上
/run/flannel/subnet.env文件中FLANNEL_IPMASQ参数是否为true
5. 排查节点防火墙规则
检查工作节点iptables FORWARD链规则,确认没有规则丢弃Pod网段的出站流量:
iptables -nvL FORWARD
如果FORWARD链默认策略为DROP,需要添加规则允许Pod网段的流量转发。
内容的提问来源于stack exchange,提问作者karthik
相关产品推荐
相关产品推荐

