本文介绍 VKE 集群 NetworkPolicy 的设计与配置实践,涵盖最小权限控制、标签与选择器、默认拒绝、容量规划、可观测性及渐进式发布等,帮助您在集群中安全、稳定地实施网络隔离。
NetworkPolicy 支持基于 Pod、命名空间、IP 网段和端口控制三层、四层流量。使用该能力前,请确保集群已安装支持 NetworkPolicy 的网络插件。
未被任何 NetworkPolicy 选中的 Pod,其入站和出站流量默认放行。标准 NetworkPolicy 不支持显式拒绝规则和策略优先级;同一方向存在多条策略时,允许规则取并集。若要默认拒绝某一方向的流量,可在 policyTypes 中声明该方向,并将对应的允许规则留空。
要成功建立连接,源 Pod 的出站策略和目标 Pod 的入站策略必须同时允许;未被策略隔离的方向默认放行。更多介绍,请参见 官方文档。 警告
请勿直接在生产命名空间中配置默认拒绝策略。启用默认拒绝后,策略选中的 Pod 在相应方向上,未被显式允许的流量均会被拒绝。若放行规则遗漏 DNS、健康检查或上游服务等必要依赖,可能导致业务立即中断。建议先在测试命名空间中验证策略,确认必要依赖均已放行后,再按工作负载或业务范围分批应用到生产环境。
在集群中配置 NetworkPolicy 时,常见的核心字段说明和注意事项,如下表所示。
NetworkPolicy 的设计目标是遵循最小权限原则,明确并验证业务所需的网络访问关系,而非一次性阻断命名空间内的所有流量。建议遵循以下原则进行设计。
- 使用 app.kubernetes.io/name、app.kubernetes.io/component、environment 等稳定标签标识应用、组件和环境。
- 避免将 Pod 名称、发布批次、哈希值等频繁变化的值用作 NetworkPolicy 的长期选择条件。
- 修改工作负载标签前,请检查现有 NetworkPolicy 的选择范围,避免滚动发布期间新旧 Pod 因标签不同而获得不一致的网络访问权限。
在 vpc-cni 组件的 Cilium 参数中,可以配置 Cilium 识别的 Pod 标签范围。下图展示未启用 NetworkPolicy 时的 labels 配置示例。启用 NetworkPolicy 后,请根据策略实际依赖的稳定标签调整该配置,避免直接沿用示例值。
不合理的网络策略可能产生大量 policy_map 表项,增加数据写入量,降低策略同步性能,甚至超出 policy_map 默认的 16384 条容量限制。配置网络策略时,请重点关注以下场景:
- 组合使用 cidr 和 except:except 可能将一个较大的 CIDR 拆分为多个较小的 CIDR,每个拆分后的 CIDR 都会分配对应的 Cilium Identity。拆分数量过多时,将占用较多的 policy_map 容量。因此,应避免使用大网段配合大量 except 的复杂规则。
- 放行整个命名空间:使用 NetworkPolicy 放行整个命名空间时需谨慎。该配置会将命名空间内所有 Pod 对应的 ID 下发至 policy_map。配置前,请根据 Pod 规模评估 policy_map 的容量是否充足。
如果优化网络策略后仍需扩大 policy_map 容量,或需要更多技术支持,可 提交工单 随时联系我们。 启用 NetworkPolicy 会增加网络组件和 API Server 的资源消耗。在大规模集群中,应重点关注网络组件资源使用情况、策略和身份规模,以及控制面的访问压力。
- 从安全身份的计算范围中排除与访问控制无关、基数较高的标签,避免产生过多 CiliumIdentity。
- 优先按应用或组件精确放行,避免使用大范围的命名空间放行规则。选择范围越大,策略计算量和下发量通常越高。
- 减少复杂的 CIDR 拆分和大量 except 配置,确保规则规模可控,并便于审计和测试。
- Service 和 NetworkPolicy 均依赖 Cilium BPF Map。随着规则数量增加,相关 Map 可能达到容量上限。建议通过以下指标监控 Map 使用率:
- 规划大规模集群时,请提前提交工单进行容量评估,避免直接沿用小规模集群的配置。更多信息,请参见 大规模集群版本和配置。
- 集群节点数超过 500 时,建议在 vpc-cni 组件中独立部署 Cilium Operator,并配置 3~5 个副本。同时,应结合 Cilium Operator 的 CPU、内存使用情况和 API Server 负载评估资源配置。Pod 数量超过 50000 时,请按照大规模集群配置建议进行调整。更多信息,请参见 大规模集群版本和配置。
- 集群节点数超过 1000 时,每个节点上的 Cello 都会通过 List-Watch 机制监听集群内的所有 CiliumEndpoint,可能增加 API Server 的访问压力。如果不使用 NetworkPolicy,请保持该功能关闭(默认关闭);如需启用,请合理配置 Cilium 标签,缩小身份识别范围。
- 对于更大规模的集群,应提前评估 Cilium policy_map 的容量。如需协助,请联系 VKE 技术支持。
建议重点监控以下指标和状态:
- vpc-cni 相关 Pod 的 Ready 状态、重启次数、CPU 和内存使用情况。
- API Server 的请求量、请求延迟和限流情况。
- DNS 解析失败、连接超时、连接拒绝和业务错误率。
说明
建议开启集群审计日志和网络组件日志采集。出现问题时,请至少准备以下诊断信息:集群 ID、问题发生时间范围、命名空间、源 Pod 和目标 Pod、源 IP 和目标 IP、协议与端口、策略 YAML,以及问题复现命令。
说明
NetworkPolicy 在以下场景中存在使用限制:通过 ipBlock 的 except 排除部分 IP 网段、配置的网段存在重叠、Pod 更新后应用网络策略,以及部分 UDP 和 SCTP 通信场景。如果您的配置涉及这些场景,请先查阅 使用 NetworkPolicy 实现网络访问控制 中的 功能限制,再在实际使用的集群版本和环境中测试,确认网络策略能按预期允许或阻止流量。