内容提要
Kubernetes中的网络策略用于控制集群内流量,分为L4和L7两类。L4策略基于IP和端口,易用但安全性有限;L7策略在应用层提供更细粒度的控制,支持基于服务名称的策略。结合使用这两种策略可实现更强的安全模型,适应现代安全挑战。
延伸解读
L4策略的局限与适用边界
L4策略基于IP和端口,由CNI插件实现,配置简单且广泛可用。但其规则表达能力有限,无法基于服务名称或HTTP路径进行控制,也不支持安全事件日志。此外,IP地址可能被欺骗,且存在“脑裂”风险,即Pod与IP映射不一致可能导致未授权访问。因此,L4策略适合作为基础控制,但不足以应对现代安全挑战,需与其他策略结合。
L7策略如何借助服务网格实现细粒度控制
L7策略通常通过服务网格(如Linkerd)实现,以自定义资源(如Server、AuthorizationPolicy)定义。它基于mTLS建立的服务身份进行访问控制,忽略IP地址,支持基于服务名称、HTTP路径甚至mTLS状态的规则。Linkerd提供默认和动态策略,动态策略可实时更新,实现细粒度控制。但L7策略要求工作负载已注入网格,且不支持UDP等非TCP流量。
组合L4与L7策略的实践场景
L4和L7策略并非互斥,可同时部署以构建纵深防御。当需要保护未注入网格的工作负载、实施集群范围策略,或服务网格暂不支持某些需求(如IPv6、UDP)时,L4策略是必要补充。L7策略则适用于需要基于身份、路径或加密状态的复杂场景。两者重叠使用可提供冗余,即使某一层失效,另一层仍能提供保护。
Q&A
Kubernetes中的网络策略是什么?
Kubernetes中的网络策略用于控制集群内流量,定义哪些流量可以进入、退出或在Pods之间移动。
L4和L7网络策略有什么区别?
L4策略基于IP和端口,适合简单流量控制;L7策略在应用层提供更细粒度的控制,支持基于服务名称的策略。
如何实现L4网络策略?
L4网络策略通过CNI插件实现,使用内核的包过滤器动态管理服务和Pod之间的流量规则。
L7网络策略的优势是什么?
L7网络策略允许更细粒度的控制,如仅允许特定服务访问特定端点,并结合mTLS提供身份验证和加密。
在什么情况下应该使用L4网络策略?
L4网络策略适合简单易懂的流量控制,但由于安全性有限,通常应与其他策略结合使用。
如何结合使用L4和L7网络策略?
可以同时在集群中实施L4和L7策略,以利用两者的优势,增强安全性和控制能力。