Вступление
Wireshark - это хорошо известный инструмент для захвата пакетов, анализа и устранения неполадок. Он может перехватывать текущий сетевой трафик и анализировать его в режиме реального времени на микроскопическом уровне, а также считывать и обрабатывать сохраненные файлы захвата. Wireshark может анализировать и отображать множество различных протоколов и обладает мощной системой фильтрации для сужения интересующего трафика.
TCPDump/Wireshark дает нам возможность визуализировать и понимать, что происходит в нашей сети на микроскопическом уровне. Представьте, возможно ли что-то подобное в K8s, если вы можете видеть, что именно происходит, когда вы развертываете рабочую нагрузку, получаете модули, создаете учетную запись службы и как различные рабочие нагрузки взаимодействуют друг с другом и т.д.
Чего сейчас не хватает?
Чтобы увидеть, что именно происходит, когда вы запускаете команду kubectl, вы можете просто использовать флаг verbose с вашей командой kubectl с некоторым уровнем детализации, например — kubectl get pods -v=6.
Уровень детализации начинается с 0 и заканчивается на 9, 0 - минимальный, а 9 - максимальный уровень детализации. Это уже присутствует, но четкой визуализации того же потока нет.
Kubectl с флагом -v позволяет вам видеть вызовы API L7, это не позволит вам отслеживать какой-либо сетевой трафик как таковой.
Kubeshark действительно захватывает L3 и L7, фактически у него будет доступ ко всему кадру L2. Это создаст панель мониторинга / представление для визуализации того же самого, точно так же, как Wireshark.
Для чего необходим Kubeshark?
Мониторинг всего — будь то мониторинг сетевого трафика Pod-Pod, выполненных вызовов API, мониторинг отдельного узла, службы или определенного пути, например — /latest/meta-data или /health и т.д..
Визуализируйте — программа просмотра Kubeshark настолько проста, но в то же время настолько мощна, что позволяет просматривать трафик в режиме реального времени, фильтровать, анализировать и устранять любые неполадки. Информация об ответе на запрос на правой панели очень понятна.
Хранилище PCAP — Храните PCAP для будущего анализа, можете легко выгрузить его в S3 или какое-либо другое хранилище, загрузить и визуализировать позже.
Упрощение отладки — будь то отладка чего-либо или углубление понимания связи между различными компонентами в кластере, это значительно облегчает ее выполнение.
Оповещение в реальном времени — можно создать оповещение для K8s с помощью данных, которые мне позволяет использовать Kubeshark. Подумайте о неудачных вызовах get secrets, неудачных вызовах метаданных экземпляра, многих других подобных аномалиях.
Установка Kubeshark
Давайте установим Kubeshark и посмотрим, как это работает. Вы можете установить KubeShark с помощью этой команды:
sh <(curl -Ls https://kubeshark.co/install)
Запуск Kubeshark:
kubeshark tap -A
tap -A касается всех пространств имен, вы можете указать -n для мониторинга определенного пространства имен.
kubeshark tap -n kube-system
Kubeshark начнет отслеживать трафик и запустит программу просмотра на порту 8899 на вашем локальном хостинге.
У меня есть свой тестовый кластер, развернутый с использованием KOPS, обратите внимание, что двоичный файл Kubeshark просматривает ваш текущий контекст из ~/.kube/config и использует те же учетные данные и кластер для создания своих ресурсов и запуска мониторинга.
Вы можете создать локальный кластер kind, чтобы быстро получить представление о том, как работает Kubeshark.
Немного практики
Давайте посмотрим, что мы отслеживаем и какие возможности есть у Kubeshark на своей панели мониторинга. Вот несколько примеров фильтров, которые я использовал для тестирования kubeshark.
Мониторинг одного узла:
Визуализация с помощью сервисной карты:
Отслеживайте путь к учетным метаданным экземпляра AWS:
Заключительные мысли
Помогает углубить мое понимание того, как различные компоненты кластера взаимодействуют и работают вместе на максимально низком уровне.
Отладка /устранение неполадок становится очень простой благодаря добавлению соответствующих фильтров к трафику.
Карты сервисов предоставляют высокоуровневый обзор того, как выглядит мой кластер с визуальной точки зрения.
Можно расширить данные, чтобы получать оповещения в режиме реального времени, как оперативные, так и охранные.
Было бы неплохо провести тест производительности в приличном масштабе и посмотреть, как этот инструмент масштабируется, влияет на вычисления и хранилище, учитывая, что объем трафика растет экспоненциально в огромных масштабах.
Честно говоря, нечестно сравнивать это с Sysdig falco или Cilium Tetragon, но то, как это захватывает и настраивает данные, заставляет меня взглянуть на аспект обнаружения в реальном времени и подумать об использовании его в некоторых аспектах безопасности, больше связанных с аномалиями API K8s.
Возможно, это инструмент, который я должен широко использовать, чтобы лучше понимать вызовы под капотом, чтобы писать лучшие политики безопасности во время выполнения, более связанные с плоскостью управления. Это не сильно поможет обнаружить какие-либо аномалии контейнера или те, которые связаны с контейнерной средой выполнения AFAIK.
Вывод
Kubeshark - это мощный инструмент, который ранее был известен как Mizu, разработанный UP9 как средство просмотра трафика API и позже получивший открытый исходный код, теперь название изменено на Kubeshark, что означает, что это Wireshark, возрожденный для K8s.
Хотя существуют сложные инструменты для обеспечения безопасности среды выполнения K8s, такие как Sysdig Falco, Cilium Tetragon, которые созданы с использованием возможностей eBPF, в документации упоминается, что Kubeshark также использует eBPF, но больше ориентирован на предоставление слоя визуализации на микроскопическом уровне для лучшего понимания коммуникаций.
Ссылка на Github — https://github.com/kubeshark/kubeshark
Ссылка на сайт — https://kubeshark.co