3 分•作者: dangoodmanUT•22 天前
为了给我们的代理提供防火墙功能,防止它们与任意服务通信,我构建了 netfence。它就像 Envoy,但用于 eBPF 过滤器。<p>它允许你定义基于 DNS 的不同规则,这些规则在本地守护进程中解析为 IP 地址,然后推送到 eBPF 过滤器以允许流量通过。通过这种方式,我们仍然可以允许 DNS 定义的规则,但阻止与随机 IP 地址的通信。<p>而且,它也没有网络性能损失,因为它只是 DNS 查找和引用内存的 eBPF 过滤器。<p>这也意味着你无需修改基础镜像,代理可能会篡改基础镜像以删除规则(除非你阻止了 root 权限)。<p>它会自动管理 cgroups 和接口上 eBPF 过滤器的生命周期,因此它非常适用于容器和微型虚拟机(如 Firecracker)。<p>你实现了一个控制平面,就像 Envoy xDS 一样,你可以管理每个 cgroup/接口的规则。你甚至可以通过控制平面管理 DNS 以动态解析记录(这对于普通 DNS 服务器来说很有帮助,因为它们不知道请求可能来自哪个接口/cgroup)。<p>我们专门使用它来允许我们的代理只与 S3、pip、apt 和 npm 通信。