一条策略拒绝了测试客户端到数据库的连接,不能据此宣布数据库“安全”;另一条策略允许前端访问 API,也不能证明连接到的就是预期 API。网络隔离约束谁能建立哪些方向的连接,身份认证、机密性、完整性和可用性仍需其他机制。

第 24 篇讨论 TLS 身份,第 31 篇讨论过滤与连接状态,第 33、34 篇讨论容器和 Service。本篇建立一张最小连通矩阵,再把网络策略与 TLS 验证结果并排检查。

信任边界先于规则语法

信任边界是需要独立授权的资源或身份分界。把所有工作负载放入同一可达网络,相当于让网络层默认接受横向连接;把边界拆成前端、API、数据库和运维入口后,才有条件描述最小连通。

最小连通不是“全部拒绝”本身,而是只保留业务依赖需要的方向、协议和端口。固定样例允许 frontend → api:443 与 api → database:5432,拒绝 frontend → database:5432、batch → api:443 和明文 frontend → api:80。

Kubernetes NetworkPolicy 选择 Pod,并描述 ingress、egress 允许集合。它只有在网络插件实现 NetworkPolicy 时才生效;创建对象而数据面不支持,不能形成隔离证据。策略通常工作在三层/四层,也不能根据 HTTPS 内部的用户权限作决定。

模式提炼:先写允许矩阵,再生成规则

主体 × 目标 × 方向 × 协议/端口 = 最小允许边

规则审阅应从业务依赖矩阵反推,而不是从一堆 YAML 猜意图。每条允许边都要有用途,每条拒绝边都要有不会破坏必要依赖的反证。

TLS 回答的是另一组问题

TLS 1.3 能在握手成功并正确验证证书时提供对端认证、机密性和完整性。客户端还必须验证证书链与目标主机名;“端口 443 可达”只证明网络允许到达某个端点。

网络策略允许 frontend → api:443,但服务端出示 wrong.test 的证书时,网络判定仍是允许,TLS 身份判定应失败。反过来,batch 持有有效客户端或服务端证书,也不能穿过明确拒绝该网络流的策略。

双向 TLS 可以认证双方证书身份,但应用仍需把身份映射到权限。证书有效不等于调用者被授权执行任意操作,密文也不能修复后端过载。

隔离不承诺可用性

默认拒绝能缩小可达面,也可能因遗漏 DNS、证书吊销检查、健康探测或依赖端口而造成故障。策略变更应同时验证允许路径继续成功、拒绝路径确实失败,并记录失败发生在哪一层。

可用性还受容量、路由、名字解析、证书生命周期和依赖健康影响。拒绝攻击流量可能改善一部分风险,但网络隔离本身不提供备份、限流、故障转移或抗容量耗尽能力。

NIST SP 800-207 的零信任原则不因请求来自某个网络位置就自动授予信任。这个原则支持把网络位置视为一个信号,而不是唯一身份。它没有规定某套 Kubernetes YAML 就等于完整零信任架构。

允许/拒绝矩阵的静态验证

policy_model.py 读取固定矩阵,分别计算网络决策与 TLS 主机名结果。四个案例覆盖允许且认证、网络拒绝、明文端口拒绝,以及网络允许但证书身份不符。

1
2
python3 source/_posts/2026-09-24-计算机网络37-网络隔离能保护什么/policy_model.py --help
python3 source/_posts/2026-09-24-计算机网络37-网络隔离能保护什么/policy_model.py

素材包括策略与案例、矩阵验证脚本、验证结果、资料与运行记录和审阅记录。

条件、限制和反例

允许矩阵不能阻止已获准工作负载利用应用漏洞。若 frontend 被攻陷,它仍能沿被允许的 api:443 边发送恶意请求;应用认证、输入校验和最小权限仍然必要。

按 IP 隔离不能稳定代表工作负载身份。地址可能复用,代理或 NAT 还会改变观察到的源。身份策略需要明确身份来源、签发和撤销机制。

TLS 终止点决定保护范围。若 TLS 在代理处终止,代理到后端的下一段是否加密和认证要单独验证,不能把客户端握手结果延伸到整条服务链。

练习

练习一:为 frontend、api、database、monitor 写一张最小连通矩阵,包含 DNS 与健康探测。说明遗漏哪条允许边会造成什么可用性故障。

练习二:客户端能连接 443,但证书主机名不匹配。解释网络策略、TLS 和应用授权各自能给出的结论,以及不能相互替代的原因。

模式速查表

控制 主要约束 不提供
三/四层网络策略 方向、地址、协议与端口 服务身份、应用权限
TLS 证书验证 对端身份、机密性、完整性 网络可达性、业务授权
应用授权 身份可执行的操作 链路加密、路由可用
限流与容量保护 资源消耗边界 身份真实性

官方一手参考资料

验证边界

已验证:Python 3 标准库对固定允许/拒绝矩阵和 TLS 主机名案例执行静态判定,验证类型为 STATIC。

NOT_RUN:没有 Kubernetes 集群和 NetworkPolicy 数据面,没有创建命名空间、证书或真实连接,未执行故障注入、抓包、攻击或可用性测试。未来补证只能面向自建命名空间、专用虚拟机或本地服务,不访问生产系统。