Использование инструментов трассировки на основе BPF в ECS

#amazon-ecs #ebpf

#amazon-ecs #ebpf

Вопрос:

Совсем недавно я начал изучать инструменты BPF и довольно часто использовал их на своей рабочей станции в качестве средства отладки. Тем не менее, я хотел бы начать использовать их в производстве для лучшей наглядности производственных проблем. Наши рабочие нагрузки выполняются в AWS ECS. Похоже, что использование инструментов невозможно в Fargate:

https://github.com/aws/containers-roadmap/issues/1027

Что требуется для правильной работы инструментов в ECS при использовании вашего собственного кластера EC2? Могу ли я использовать, например, образ Alpine Linux или мне нужно будет основывать образ на точной сборке ядра, используемой на хостах EC2? У кого-нибудь есть опыт, которым можно поделиться?

Ответ №1:

Отказ от ответственности, у меня нет личного опыта работы с eBPF в AWS ECS, однако у меня есть некоторый опыт работы с требованиями eBPF, поскольку я поддерживаю библиотеку загрузчиков.

В общем, для использования eBPF вам нужно:

  • Ядро Linux, скомпилированное с поддержкой BPF и функциями BPF, которые вы хотите использовать.
  • Наличие CAP_SYS_ADMIN возможности для версий ядра ниже 5.8 или CAP_BPF возможности для версий ядра 5.8 и выше ( CAP_SYS_ADMIN все равно будет работать, но дает вам гораздо больше, чем просто доступ к BPF).
  • В зависимости от того, какие инструменты вы хотите использовать, вам могут потребоваться дополнительные возможности, такие как CAP_PERFMON использование функций perf (uprobe, kprobe, tracepoint) (или CAP_SYS_ADMIN в версиях ядра ниже 5.8)

Использование eBPF в контейнере не должно быть проблемой, поскольку контейнеры используют одно и то же ядро с хостом (контейнеры — это просто изолированные процессы на хосте).

Но поскольку eBPF позволяет вам исследовать ядро, это, очевидно, нарушает изоляцию контейнера, и предоставление CAP_SYS_ADMIN контейнеру также в основном предоставляет ему полный корневой доступ, поэтому безопасность является проблемой (если вы не используете его только в разработке, и в этом случае вы можете просто сделать свой контейнер привилегированным). Именно по этой причине вы не увидите, что eBPF включен на общем оборудовании (если все настроено правильно).

Комментарии:

1. Спасибо! Мы использовали ECS с serverless, и, очевидно, это не сработает из-за требования запускать контейнеры в привилегированном режиме. Это означает, что нам нужно использовать наш собственный кластер для ECS поверх EC2, поэтому все сводится к анализу затрат и выгод, а затем к тому, стоят ли дополнительные затраты на обслуживание дополнительных возможностей BPF при отладке производственных проблем.