计算机网络 37:网络隔离能保护什么,信任边界、最小连通、认证与可用性
一条策略拒绝了测试客户端到数据库的连接,不能据此宣布数据库“安全”;另一条策略允许前端访问 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 | |
素材包括策略与案例、矩阵验证脚本、验证结果、资料与运行记录和审阅记录。
条件、限制和反例
允许矩阵不能阻止已获准工作负载利用应用漏洞。若 frontend 被攻陷,它仍能沿被允许的 api:443 边发送恶意请求;应用认证、输入校验和最小权限仍然必要。
按 IP 隔离不能稳定代表工作负载身份。地址可能复用,代理或 NAT 还会改变观察到的源。身份策略需要明确身份来源、签发和撤销机制。
TLS 终止点决定保护范围。若 TLS 在代理处终止,代理到后端的下一段是否加密和认证要单独验证,不能把客户端握手结果延伸到整条服务链。
练习
练习一:为 frontend、api、database、monitor 写一张最小连通矩阵,包含 DNS 与健康探测。说明遗漏哪条允许边会造成什么可用性故障。
练习二:客户端能连接 443,但证书主机名不匹配。解释网络策略、TLS 和应用授权各自能给出的结论,以及不能相互替代的原因。
模式速查表
| 控制 | 主要约束 | 不提供 |
|---|---|---|
| 三/四层网络策略 | 方向、地址、协议与端口 | 服务身份、应用权限 |
| TLS 证书验证 | 对端身份、机密性、完整性 | 网络可达性、业务授权 |
| 应用授权 | 身份可执行的操作 | 链路加密、路由可用 |
| 限流与容量保护 | 资源消耗边界 | 身份真实性 |
官方一手参考资料
- Kubernetes Documentation:Network Policies,Kubernetes,访问于 2026-09-24。
- RFC 8446:The Transport Layer Security (TLS) Protocol Version 1.3,IETF,2018-08,访问于 2026-09-24。
- NIST SP 800-207:Zero Trust Architecture,NIST,2020-08,访问于 2026-09-24。
- RFC 4301:Security Architecture for the Internet Protocol,IETF,2005-12,访问于 2026-09-24。
验证边界
已验证:Python 3 标准库对固定允许/拒绝矩阵和 TLS 主机名案例执行静态判定,验证类型为 STATIC。
NOT_RUN:没有 Kubernetes 集群和 NetworkPolicy 数据面,没有创建命名空间、证书或真实连接,未执行故障注入、抓包、攻击或可用性测试。未来补证只能面向自建命名空间、专用虚拟机或本地服务,不访问生产系统。






