作者:林静
职务:资深架构师
公司:F5
上周推出的《是时候思考 k8s 出向流量平安(上)》介绍了为何要进行 Egress 流量策略管控、存在的挑战、业界计划剖析的前两个计划,本文将持续介绍 Egress 流量管控计划的残余计划。
基于 Service Mesh 实现
Service Mesh 并不是 Egress 流量管控的专门计划,因而要通过 Service Mesh 实现 Egress 的管控意味着首先须要部署整体 Service Mesh 计划,比方 Istio。如果仅仅是为了实现 Egress 的管控,这样的计划会显得较重。Service Mesh 所反对的协定范畴也较少,这对于企业的安全策略来说还不足够。
在 Istio 中,当设置 meshConfig.outboundTrafficPolicy.mode 为 REGISTRY_ONLY 后能够通过 sidecar 联合 ServiceEntry 资源实现内部服务拜访的白名单。也能够通过联合 Egress Gateway 将流量导向到专门的 Egress Gateway。相比于 ServiceEntry 办法,Egress Gateway 则联合了 VirtualService 和 DestinationRule 来实现更多的管制,配合 AuthorizationPolicy 则能够管制粒度更细一些。
无论哪种形式,都必须依赖 sidecar 进行流量的劫持,如果有威逼绕开或毁坏了 sidecar,则意味着无害拜访能够间接绕开管控,这个平安问题在 Istio 的文档中被重复提及。所以实质上来说它不是一个很好的 Egress 流量管控计划。
同时,Service Mesh 的思维更多是面向开发者(只管它经常体现的是平台层面的能力),所以咱们仍然须要答复这样一个问题:当开发者设置了内部服务拜访白名单后,集群内部是否就能够信赖开发者这样的设置,内部安全设备是否就能够设置为答应集群的任意内部拜访?
微分段技术
微分段个别是 Zero Trust Architecture(ZTA) 畛域热衷的概念,通过一些技术(如 TC,IPtables,DPI)对底层流量进行探查、操纵与管制,实现对容器内过程、容器间通信、容器与集群外的通信的可视化与策略管制。
一般来说会在集群的各个主机上安装 DaemonSet 类容器实现对底层流量的探查。此类计划能够基于较细的粒度进行 Egress 策略管制,例如对哪些利用相干 pods 通过哪些协定拜访哪些内部服务,亦可抉择诸如 Service account 或 Label 等因素。
对于应用层加密数据,如果是 Istio 环境则可通过探查 sidecar 与利用容器之间流量实现明文探查;如果是利用容器本身间接加密则无奈实现探查,但能够通过联合 DNS 解析、SNI 实现肯定水平上的策略管控。
交融计划
上述的多种类型计划,次要切入点是在集群内。在客户的理论生产环境中,kubernetes 集群是一种资源性对象,从企业整体平安角度来看,内部安全设备仍然有必要对 kubernetes 集群的出向流量进行管控。让内部安全设备与 kubernetes 集群交融,其难点在于,传统安全设备不是间接面向 kubernetes 设计。
高动态性、IP 无关性会成为传统设施进行 kubernetes 出向流量管控的难点。但这并不是无奈解决的技术难题,如果内部安全设备具备较好的 API 接口,通过专门设计的控制器则能够解决上述技术难题。这样,内部平安防护的措施便能够利用到kubernetes 集群上来,造成残缺的纵深进攻体系。
同时能够爱护企业已有投资,节约老本。通过面向 kubernetes 的自定义资源类型设计,负责内部安全设备的团队也因而能够染指到 kubernetes 集群的整体平安工作中来,防止了团队的割裂。
F5 的 Application Firewall Manager(AFM) 通过专用的收费控制器(CES)实现了以 kubernetes 原生自定义资源(CRD)形式进行 Egress 策略的管制,并实现了平安规定与角色的层次化设定,让安全设备管理员交融到了 kubernetes 平台。借助 AFM 的能力,可实现 Egress 流量的高级拜访规定、限流、协定查看、日志与事件可视化等。
Fortinet 本身以及与 Calico 企业版联结,也实现了与kubernetes 的集成,但其次要特点是将 kubernetes 资源对象转化并写入 Fortinet 的地址组中,其治理视角仍然是防火墙管理员视角,而不是 kubernetes native 形式。
其余
Proxy pod 是一种一般的正向代理,利用应用该代理实现对外部业务的拜访。此种形式个别仅适宜小规模场景,不适宜大规模集群及简单业务。
DNS interception,其原理是通过 patch coredns,如果利用拜访 ExternalService 对象中设定的内部服务,则将申请疏导到一个专用的 proxy pod 上(例如 Envoy 等)实现对流量的解决。该计划同样不适宜大规模场景。
在实现对 6 类 Egress 流量管控计划的剖析后,让咱们来总结和比照一下这些计划的优缺点:
能够看出 Network Policy 尽管是一个 kubernetes 原生的形式,但显然并不适宜于集群 Egress 流量的管控。CNI 类产品有了肯定的加强,然而在协定检测、企业级反对方面还是不够。
微分段类产品具备绝对残缺的能力,然而微分段是一个整体性的解决方案,仅仅应用微分段实现集群出向流量的管控会显得投入较大,且微分段的产品个别底层技术较为简单,运维难度较高。
将内部平安设施融入到 kubernetes 当中实现出向流量管控的解决办法更加适宜企业,无论是性能个性还是运维复杂度都比拟适宜,更加重要的是,该类计划将企业的传统平安资产与古代利用架构进行了联合,让不同部门可能严密协同,造成纵深进攻体系。
总结
咱们往往器重 Ingress 的能力,而漠视了 Egress 流量的平安管控。但无论从平安还是合规的角度,Egress 流量都应增强管控。当破绽曾经侵入利用后,Egress 流量管控往往是最初一个爱护的关口。在上以后泛滥计划中,大部分的计划是基于kubernetes 内的 Network Policy 实现,有的依赖于特定的 CNI,有的依赖于特定的编排平台。
但当咱们从企业的整体平安架构去思考时,将内部安全设备引入到 kubernetes 平安体系当中一件十分必要的事件,只有这样能力实现真正的全面进攻。而当咱们探讨 DevSecOps 时,须要让开发、平台、平安乃至网络这些不同团队同时参加到整体平安工作中,实现跨团队的严密合作。