在 ECS 中使用基于 BPF 的跟踪工具
Using BPF based tracing tools in ECS
最近我开始学习 BPF 工具,并在我自己的工作站上经常使用它们作为调试辅助工具。但是,我想开始在生产中使用它们,以便更好地了解生产问题。我们在 AWS ECS 中的工作负载 运行。似乎无法在 Fargate 上使用这些工具:
https://github.com/aws/containers-roadmap/issues/1027
如果使用您自己的 EC2 集群,要使这些工具在 ECS 中正常工作需要满足什么要求?我可以使用例如一个 Alpine Linux 图像,或者我是否需要将图像基于 EC2 主机中使用的精确内核构建?谁有经验可以分享?
免责声明,我没有在 AWS ECS 上使用 eBPF 的个人经验,但是我对 eBPF 要求有一些经验,因为我维护了 loader library.
一般来说,要使用 eBPF,您需要:
- 一个 linux 内核,它是用 BPF support and the BPF features 编译的,你想使用。
- 在低于 5.8 的内核版本上具有
CAP_SYS_ADMIN
功能或在 5.8 及更高版本的内核上具有 CAP_BPF
capability 功能(CAP_SYS_ADMIN
仍然有效,但提供你不仅仅是 BPF 访问)。
- 根据您要使用的工具,您可能需要额外的功能,例如
CAP_PERFMON
以使用 perf 功能(uprobe、kprobe、tracepoint)(或 CAP_SYS_ADMIN
在低于 5.8 的内核版本上)
在容器中使用 eBPF 应该不是问题,因为容器与主机共享相同的内核(容器只是主机上的独立进程)。
但是因为 eBPF 允许你探测内核,这显然打破了容器的隔离,并且给容器 CAP_SYS_ADMIN
基本上也给了它完全的根访问权限,所以安全是一个挑战(除非你是只是在开发中使用它,在这种情况下你可以让你的容器具有特权)。这就是您不会在共享硬件上看到启用 eBPF 的原因(如果配置正确)。
最近我开始学习 BPF 工具,并在我自己的工作站上经常使用它们作为调试辅助工具。但是,我想开始在生产中使用它们,以便更好地了解生产问题。我们在 AWS ECS 中的工作负载 运行。似乎无法在 Fargate 上使用这些工具:
https://github.com/aws/containers-roadmap/issues/1027
如果使用您自己的 EC2 集群,要使这些工具在 ECS 中正常工作需要满足什么要求?我可以使用例如一个 Alpine Linux 图像,或者我是否需要将图像基于 EC2 主机中使用的精确内核构建?谁有经验可以分享?
免责声明,我没有在 AWS ECS 上使用 eBPF 的个人经验,但是我对 eBPF 要求有一些经验,因为我维护了 loader library.
一般来说,要使用 eBPF,您需要:
- 一个 linux 内核,它是用 BPF support and the BPF features 编译的,你想使用。
- 在低于 5.8 的内核版本上具有
CAP_SYS_ADMIN
功能或在 5.8 及更高版本的内核上具有CAP_BPF
capability 功能(CAP_SYS_ADMIN
仍然有效,但提供你不仅仅是 BPF 访问)。 - 根据您要使用的工具,您可能需要额外的功能,例如
CAP_PERFMON
以使用 perf 功能(uprobe、kprobe、tracepoint)(或CAP_SYS_ADMIN
在低于 5.8 的内核版本上)
在容器中使用 eBPF 应该不是问题,因为容器与主机共享相同的内核(容器只是主机上的独立进程)。
但是因为 eBPF 允许你探测内核,这显然打破了容器的隔离,并且给容器 CAP_SYS_ADMIN
基本上也给了它完全的根访问权限,所以安全是一个挑战(除非你是只是在开发中使用它,在这种情况下你可以让你的容器具有特权)。这就是您不会在共享硬件上看到启用 eBPF 的原因(如果配置正确)。