GKE 使用 eBPF 提高容器安全性和可视性
共 2594字,需浏览 6分钟
·
2020-08-21 10:14
Kubernetes 真正的超级功能之一是其开发者优先的网络模式,它提供了易于使用的功能,如 L3/L4 服务和 L7 入口,将流量引入集群,以及用于隔离多租户工作负载的网络策略。随着越来越多的企业采用 Kubernetes,围绕多云、安全、可视性和可扩展性的新要求,用例的范围也在扩大。此外,服务网格和 serverless 等新技术对 Kubernetes 底层的定制化提出了更多要求。这些新需求都有一些共同点:它们需要一个更加可编程
的数据平面,能够在不牺牲性能的情况下执行 Kubernetes 感知的数据包操作。
eBPF 是一种新的 Linux 网络范式,它在 Linux 内核内向网络栈暴露了可编程的 hooks,用用户空间信息充实内核的能力--无需在用户和内核空间之间来回切换--使得对网络数据包的上下文感知操作得以高速进行。
今天要介绍的是 GKE Dataplane V2,这是一个充分利用 eBPF 和 Cilium 的强大功能的数据平面,Cilium 是一个开源项目,使用 eBPF 使 Linux 内核具有Kubernetes 感知能力。现在处于测试阶段,我们也在使用 Dataplane V2 将Kubernetes 网络策略日志引入 GKE。
什么是 eBPF 和 Cilium?
eBPF 是一项革命性的技术,它可以在 Linux 内核中运行沙盒程序,而无需重新编译内核或加载内核模块。在过去的几年里,eBPF 已经成为解决以前依赖内核变化或内核模块的问题的标准方法。此外,eBPF 还在网络、安全性和应用程序分析等领域开发了新一代的工具,而是在不影响执行效率或安全性的情况下,主动对运行时行为进行重新编程。
Cilium 是一个在 eBPF 之上设计的开源项目,旨在解决容器工作负载的可伸缩性、安全性和可视性要求。Cilium 超越了传统的容器网络接口(CNI),提供了服务解析、策略执行等功能,如下图所示。
Cilium 社区为引导 Cilium 项目付出了巨大的努力,这是目前 Kubernetes 上最成熟的 eBPF 实现方案。我们在 Google 积极为 Cilium 项目做出贡献,以便整个 Kubernetes 社区能够利用我们在 eBPF 方面取得的进步。
使用 eBPF 构建 Kubernetes 网络策略日志
让我们来看看 eBPF 是如何帮助我们解决一个真实的客户痛点的具体案例。具有安全意识的客户使用 Kubernetes 网络策略来声明 Pods 如何相互通信,然而,没有可扩展的方法来对这些策略的行为进行故障排除和审计,这使得它对企业客户来说没太大用处。通过将 eBPF 引入 GKE,我们现在可以支持实时策略执行,也可以以线速将策略行为(允许/拒绝)关联到 Pod、命名空间和策略名称,对节点的 CPU 和内存资源影响最小。
上图显示了高度专业化的 eBPF 程序是如何安装到 Linux 内核中,以执行网络策略并报告操作日志的。当数据包进入虚拟机时,安装在内核中的 eBPF 程序会决定如何路由该数据包,与 IPTables 不同的是,eBPF 程序可以访问 Kubernetes 特定的元数据,包括网络策略信息,这样一来,它们不仅可以允许或拒绝数据包,还可以将带注释的操作报告回用户空间。这些事件使我们有可能生成对 Kubernetes 用户有意义的网络策略日志。例如,下图所示的日志代码片段精确地指出了哪个源 Pod 试图连接到哪个目的 Pod,以及哪个网络策略允许该连接。
在后台,网络策略日志记录利用 GKE Dataplane V2,不仅暴露了策略日志所需的信息,还完全抽象了用户配置网络策略执行的细节。也就是说,当你使用 Dataplane V2 时,你不再需要担心显式启用网络策略,或者选择正确的 CNI 在 GKE 集群上使用网络策略。
除了网络策略,Kubernetes 负载均衡还可以使用 eBPF 实现直接服务器返回(DSR)模式。DSR 消除了使用 Kubernetes LoadBalancer 服务时丢失客户端IP 地址的额外 NAT 问题,eBPF 能够即时将元数据编码到网络数据包中,这使我们能够向目标节点提供其他信息,以便它可以直接与原始客户端对话。通过 DSR,我们可以降低每个节点的带宽需求,以及避免端口耗尽。
eBPF 使用自定义元数据扩展增强网络数据包的能力,可以实现很多可能的用例,我们和您一样对 Kubernetes 和 eBPF 的未来充满期待,请继续关注更多创新。
eBPF使用自定义元数据扩展网络数据包的能力使一长串可能的用例成为可能。我们对您和Kubernetes和eBPF的未来一样感到兴奋,请继续关注更多创新。
如何从中获益
企业总是希望通过提高基础设施的可视性来改善其安全状况,他们希望能够快速识别异常的流量模式,例如与互联网意外通信的 Pod 和拒绝服务攻击。通过 Kubernetes 网络策略日志,您现在可以直接在 Cloud Logging 控制台中查看所有允许和拒绝的网络连接,以对策略进行故障排除并发现不规则的网络活动。
要试用 Kubernetes 网络策略日志功能,可以使用以下命令使用 Dataplane V2 创建一个新的 GKE 群集。
gcloud beta container clusters create <cluster name> \
--enable-dataplane-v2 \
--release-channel rapid \
--cluster-version 1.17.9-gke.600 \
--zone us-east1-d
K8S进阶训练营,点击下方图片了解详情