KubeHelper - упростите множество повседневных задач с Kubernetes через веб-интерфейс

    KubeHelper - это продукт который упрощает решение многих ежедневных задач связанных с управлением Kubernetes через веб интерфейс. Поиск, анализ, запуск команд, “cron jobs”, репорты, фильтры, git синхронизация и многое другое. 

    KubeHelper это не ещё одна попытка отобразить Kubernetes API в графическом интерфейсе. Не попытка заменить Lens, официальный Dashboard или другие продукты. Это мой скромный вклад в Kubernetes Open Source сообщество. Проект не имеет какого-то узко специализированного направления и содержит довольно много различных функций которые будут полезны в ежедневной работе с Kubernetes.

    Итак, го к описанию и возможностям.

    Некоторые термины тяжело переводить, поэтому я вместо непонятного/корявого перевода буду писать английское слово.

    Мотивация

    Считаю Kubernetes замечательным и революционным продуктом. Много лет изучаю и пользуюсь, но очень часто возникала надобность иметь под рукой много различных функций и команд. Каждый раз набирать в командной строке длинные команды, искать в истории, прописывать aliases и так д. конечно же, можно, но очень часто нет возможности залогинится в консоль, или не сохранилась история, или новый хост. Или много других причин. 

    На некоторых фирмах жёсткие правила и очень часто чтоб залогинится в консоль нужно пробрасывать несколько ssh тоннелей. Или вообще очень ограниченный доступ к консоли.

    Многие десктопные клиенты требуют сертификата для коннекта к серверу. И держать сертификат от кластера на локальной машине, не 100% безопасно. 

    А что если нет возможности проинсталлировать клиент на локальной машине, снова же надо создавать aliases или копировать команды из сниппетов. Очень часто вижу, что люди ищут те или иные команды, выходят статьи с несколькими различными командами, но их сотни, а вариаций тысячи. Конечно же все эти задачи можно автоматизировать и наверняка каждый пользователь/администратор кластера уже тем или иным образом решил для себя эти задачи, но я уверен что есть и такие которе ещё этого сделалась не успели.

    Та же история и с поиском, иногда нужно знать где нужно искать, а если ресурсов много, то не так просто найти то что нужно. Писать огромную команду не хочется, поэтому и решил сделать поиск по многим часто используемым ресурсам. Как итог появился KubeHelper с идеями которые приходили во время разработки.

    Также постарался на ресурсы посмотреть с другой стороны. Многие готовые решения показывают ресурсы по namespace, ещё несколько полезных функций и на этом гибкость веб интерфейсов заканчивается и чтоб сделать что-то отличное чем просто показать список ресурсов в namespace, снова же приходится обращаться к консоли. Например group labels, find selector, view RBACs и так д…

    Тут у меня и возникла идея помочь сообществу организовать много команд в едином интерфейсе, установить kubectl, плагины, утилиты и сделать для пользования командной строкой графический web интерфейс. Внедрить другие функции которые будут полезны в ежедневной работе с Kubernetes кластером. Внести свой скромный вклад в Open Source сообщество. Ну и конечно же чтоб еще лучше познать и узнать Kubernetes. Вот что из этого получилось.

    Общие принципы и понятия

    На данный момент я подготовил 3 возможности инсталляции: kubectl, Helm, Terraform. Посмотреть инсталляции и настроить их можно здесь. Позже добавлю в публичный Helm Chart Repository и в Terraform Registry.

    KubeHelper может быть очень мощным помощником в ежедневной работе с кластером, всё зависит от того сколько прав вы ему предоставите.

    По умолчанию KubeHelper устанавливается с правами на чтение и просмотр. (get, list). Поэтому с уверенностью можно сказать, что вы ничего не поломаете используя его у себя в кластере. Но при инсталляции вы можете изменить ClusterRole под свои нужды, аж до статуса cluster-admin. Подробная настройка в Wiki.

    Конфигурация и команды хранятся в формате TOML. Как по мне, этот формат очень удобен для такого рода задач. Снова же, подробное описание и как всё работает, вы можете почитать в Wiki.  

    Возможности и интерфейс

    Dashboard

    Здесь собрана общая информация о кластере. Общее количество процессорного времени, хостов(нод), памяти и так д. Отображена общая техническая информация о хосте(ноде), количество, имена и размеры docker images.

    Search

    Часто приходится искать что-то в кластере для этого нужно знать где искать и часто писать не тривиальные скрипты или команды. Поиск по всему кластеру или в определённой namespace по ключевому слову и выбранным ресурсам решает эту задачу.

    Принцип довольно прост и интуитивен. Выбираем namespace(all = all namespaces) в котором мы хотим найти ресурсы по ключевому слову. Выбираем ресурсы нажимаем поиск, применяем фильтры. Также при нажатии на кнопку в столбце "Raws" можно посмотреть ресурс в различных форматах Java POJO, YAML или JSON.

    Подробное описание всех функций и принцип работы вы можете почитать в Wiki.

    Ips and Ports

    Название говорит само за себя, поиск IP и портов в подах и сервисах по всему кластеру. При клике на найденный ресурс будет показана детальная информация о ресурсе.

    Security

    Этот раздел состоит из 6 секций. Каждая секция имеет одни и те же кнопки для выбора namespace и поиска соответственных ресурсов в ней.

    Также при нажатии на кнопку в столбце "Raws" можно посмотреть ресурс в различных форматах Java POJO, YAML или JSON.

    Секция "Roles": Поиск ролей в отдельном namespace или во всех namespaces. Просмотр subjects и role rules для каждого verb. Фильтр и группировка результатов.

    Секция "RBAC”: Построение матрицы доступа к ресурсам на основании ролей и правил. Фильтр и группировка результатов.

    Секция "Pod Security Contexts”: Показать PodSecurityContext объекты в отдельной namespace или во всех namespaces.

    Секция "Container Security Contexts": Показать ContainerSecurityContext объекты в отдельной namespace или во всех namespaces.

    Секция "Service Accounts": Показать "Service Accounts" в отдельном namespace или во всех namespaces.

    Секция "Pod Security Policies": Показать "Pod Security Policies" в отдельном namespace или во всех namespaces.

    Labels Annotations Selectors

    Поиск labels, selectors и annotations по выделенным ресурсам. Фильтр и группирование результатов.

    Вкладка Grouped: На основании поиска labels, selectors и annotations будут сагрегированы и сгруппированы 

    Commands

    Идея секции “Commands” сделать KubeHelper гибко настраиваемый для каждого пользователя. Каждый пользователь может исполнять свои kubectl и shell команды с различных консолей. Просматривать результаты исполнения. Экспортировать свои подборки команд с git репозитория и многое другое. KubeHelper уже имеет много готовых к использованию команд.

    Секция "Commands": Окно разделено на 3 части, команды которые можно фильтровать и искать. Окно редактирования выделенной команды и окно вывода результатов исполнения.

    Секция "Management": В этой секции вы имеете возможность редактировать и создавать свои команды, а также просматривать уже имеющиеся команды.

    Секция “History”: В этой секции вы можете посмотреть все исполненные команды и результат их исполнения. Для удобности, история сохраняется по дням. Присутствует несколько удобных фильтров. 

    Cron Jobs

    Идея секции “Cron Jobs”: сделать исполнение регулярных задач, проверки безопасности, построение и просмотр репортов исполнения команд - более простым и тривиальным заданием.

    Секция "Jobs": Окно разделено на 3 части, команды которые можно фильтровать и искать. Окно редактирования выделенной команды и поля для создания новой “cron job”. Таблица со списком активных и остановленных “cron jobs”, кнопки управления.

    Секция "Reports": Для каждой "cron job” создаётся папка в которую по дням будут сохраняться выполнения “cron jobs”. Присутствует несколько удобных фильтров.

    Configurations

    Идея секции “Configurations” дать возможность пользователю синхронизировать свой конфигурационный файл с git также быстрее определить или изменить нужные cron jobs. Здесь же находятся функции для управление пользовательским репозиторием. Подробное описане можно почитать в Wiki.

    Versions

    В KubeHelper уже предустановлен kubectl, огромное количество плагинов, утилит, командных оболочек и так д.. Эта вкладка отображает весь список предустановленных программ, их версии и другую информацию.

    Вопрос к дочитавшим:

    Какие новые функции вы бы добавили в первую очередь? Какая новая функция сделает вашу ежедневную работу легче?

    Я составил небольшой список возможных новых функций, буду рад вашим мнениям и видению.

    Достаточно оставить комментарий с приоритетом в виде номеров или своё предложение.

    Для предложения новой функции есть соответствующий Issue.

    P.S.1 Буду рад репосту, звёздочке на GitHub. Пользуйтесь, делитесь информацией с коллегами, друзьями, знакомыми.

    P.S.2 Буду рад желающим помогать развивать проект. На начальных стадиях особенно людям которые помогут сделать дизайн красивее. В первую очередь я работал над функциональностью.

    Всем спасибо!

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

      0
      Очень интересно, спасибо. Скажите, а как происходит аутентификация/авторизация?
        0
        Спасибо. Рад, что интересно. Если вы о Web-GUI, то обычная basic auth. По умолчанию KubeHelper устанавливается по умолчанию с пользователем/пароль kube/helper. Но при установке вы конечно же можете установить своего пользователя и свой пароль. Всё описано в разделе Installation. Если есть вопросы, спрашивайте.
          0
          Вижу, спасибо. Похоже что юзер только один и у него все права из clusterroie, создать несколько юзеров с разными правами нельзя?
            –1
            Да, к сожалению так и есть. Пользователь один. Несколько пользователей сильно усложняет задачу, так как при установке KubeHelper делает mount ServiceAccount Token /var/run. Но это самая меньшая проблема, нужно тогда полноценное администрирование с правами делать и так д… Что не было целью. KubeHelper создавался для людей которые знают что делают и им не нужно ограничивать себя ролями. Ну или ограничить. )))
              +1

              Почему не пойти по пути KubeDashboard и не использовать токен/сертификат пользователя?


              т.е. я прихожу в Web-GUI и ввожу там вместо логин/пароля свой токен/сертификат.


              Kube-Helper в свою очередь не использует примонтированный токен от сервис-аккаунта, а для всех запросов использует мой токен/сертификат.

                0
                Хмммммм… Вы знаете. Отличная идея. Как-то не подумал о этом.
                Давно не пользовался KubeDashboard вот и не было такой идеи.
                Это сделать не тяжело, если пользователям такая функция будет по душе, то могу сделать.
                Просто тогда нужно будет менять деплоймент и не моунтить токен ну или оставить то и другое и сделать приоритеты.
                Спасибо!
              0
              eugene08
              SlavniyTeo подал хорошую идею. В сл релизе сделаю авторизацию с токеном. ТОгда можно будет и пользоваться функциями в соответствии с ролями. habr.com/ru/post/542514/#comment_22693988
          0

          Проект интересный и сразу хорошо оформлен на GitHub, за что отдельный плюсик.


          Однако из-за того, что он на Java, не думаю, что завоюет большую аудиторию сообщества Kubernetes, которое говорит на других языках.


          В любом случае — успеха!

            0
            Пасиб, старался. Хотел что-то своё сделать.

            Да, понимаю вас. И сам это понимал когда начинал проект. С другой стороны, многое «упиралось» в GUI. Я не фронтендлер, и чтоб сделать такие таблицы и интерфейс на другом фремворке — не знаю сколько времени ущло бы только на сам фронтенд.

            С другой стороны, KubeHelper расширяем. И если есть желание, можно как угодно расширить. Есть kubecl, krew, bash, fish… и так д. Что мешает прикрутить Go если нужно? Что мешает написать krew plugin и так д.

            Спасибо, как я и писал моя идея — внести вклад в opensource сообщество, а дальше как пойдёт. Я реалист и готов к тому, что это будет просто мой pet project. Что есть неплохой визитной карточкой сл роботодателю возможно. ))

            P.S. Я, ваш «Флант» тоже с удовольствием читаю. )))

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое