kubernetes网络策略必须强制启用“默认拒绝、显式放行”模式,依赖支持networkpolicy的cni插件(如calico、cilium),策略需含podselector和ingress/egress类型,禁止空选择器、hostnetwork及hostport,确保业务域隔离与外部访问受控可审计。

容器网络合规检查不是只看“通不通”,而是要验证是否满足安全隔离、访问控制和审计可追溯等硬性要求。核心在于把网络策略从“能用”变成“合规可用”。
网络策略是否强制启用默认拒绝
默认允许所有流量是最大风险点。Kubernetes 中必须通过 NetworkPolicy 实现“默认拒绝、显式放行”。不能依赖 Docker 默认 bridge 网络或未配置的命名空间。
- 检查集群是否部署了支持 NetworkPolicy 的 CNI 插件(如 Calico、Cilium、Weave)
- 运行
kubectl get networkpolicy --all-namespaces,确认关键命名空间(如 default、prod)至少有一条策略 - 策略中必须包含
podSelector和policyTypes: ["Ingress", "Egress"],且未设置空 selector(即不匹配任何 Pod) - 示例合规策略:仅允许 frontend 命名空间的 Pod 访问 backend 命名空间的 8080 端口,其他全部拒绝
容器间通信是否按业务域严格隔离
同一集群内不同业务系统(如支付、用户、日志)必须逻辑隔离,禁止跨域直连。
- 使用
docker network ls检查是否为不同应用创建独立自定义网络(非默认 bridge) - 执行
docker network inspect <network-name></network-name>,确认Internal: true且无暴露端口映射到宿主机 - 在 Kubernetes 中,检查 Pod 是否通过标签(如
app=payment)绑定到对应 NetworkPolicy,而非混用 namespace 级粗粒度控制 - 避免使用 hostNetwork 或 privileged 模式绕过网络策略
外部访问是否受控且可审计
对外暴露服务必须经过统一入口(Ingress 或 LoadBalancer),禁止容器直接绑定宿主机端口(-p 8080:80)。
- 检查是否有 Pod 使用
hostPort或hostNetwork: true—— 这两项在等保三级、PCI-DSS 中均属违规项 - 确认 Ingress 资源是否启用 TLS,并使用可信证书(非自签名);可通过
kubectl get ingress -o wide查看 TLS 字段 - 验证 API Server 的
--anonymous-auth=false和--authorization-mode=Node,RBAC已启用,防止未授权调用网络相关接口 - 日志中需留存所有入向连接来源 IP、目标 Service 名称、响应状态码(可通过 Service Mesh 或 Ingress Controller 日志实现)
网络组件自身是否符合基线配置
CNI 插件、Docker daemon、kube-proxy 等底层组件的配置直接影响网络行为合规性。
- 运行
docker info | grep -E "(Bridge|SecurityOptions|LiveRestore)",确认SecurityOptions包含seccomp和apparmor - 检查
/etc/docker/daemon.json是否禁用"icc": false(关闭容器间自动通信)和启用"userland-proxy": false(减少中间层攻击面) - 对 Calico 等 CNI,验证
FelixConfiguration中defaultEndpointToHostAction: Drop已设置,防止容器逃逸后访问宿主机网络栈 - 使用
kube-bench扫描 kube-proxy 是否禁用--proxy-mode=userspace(已废弃且不安全)











