如何通过Kubernetes NetworkPolicy阻断Pod互联网访问仅允许10.0.0.0/8网段
问题根因与解决方案
你当前配置的默认拒绝所有出站的网络策略语法符合规范,配置后仍然能访问公网通常是以下几类原因导致,对应的解决方案如下:
1 确认集群满足网络策略生效前提
- Kubernetes 网络策略必须由集群使用的CNI插件支持才能生效,如果你使用的是不支持网络策略的CNI(比如未开启网络策略扩展的Flannel、原生不支持的基础CNI实现),所有NetworkPolicy配置都不会生效。目前支持网络策略的主流CNI包括Calico、Cilium、Weave Net等,如果你使用的是Flannel,需要额外安装网络策略控制器组件才可让策略生效,请先确认你的集群CNI配置符合要求。
- 检查目标Pod是否开启了
hostNetwork: true,使用主机网络的Pod不受集群网络策略管控。 - 排查集群中是否存在其他优先级更高的全局出站允许策略,覆盖了你配置的拒绝规则。
2 符合需求的完整网络策略配置
你需要实现Pod仅可访问10.0.0.0/8本地网段、阻断公网访问的需求,可直接使用以下合并后的配置:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: restrict-egress-only-local spec: podSelector: {} # 匹配所有Pod,你也可以调整标签选择器指定需要限制的Pod范围 policyTypes: - Egress egress: - to: - ipBlock: cidr: 10.0.0.0/8
该策略会明确禁止所有匹配Pod访问10.0.0.0/8以外的所有网段,包括公网。
3 生效验证
配置完成后进入Pod测试:
- 访问10.0.0.0/8内的内部服务:可正常连通
- 访问公网地址(比如公共HTTP服务、公共DNS):连接超时/失败即为配置生效
内容的提问来源于stack exchange,提问作者slidmac07
相关产品推荐
相关产品推荐

