Dockin Ops — Dockin Operation service
Dockin — система управления безопасной эксплуатацией
Dockin — это система управления безопасной эксплуатацией, которая оптимизирует выполнение команд, поддерживает управление правами доступа к командам и позволяет организовать эксплуатацию в различных сценариях.
Дополнительные компоненты Dockin доступны по ссылке: https://github.com/WeBankFinTech/Dockin
Архитектура
Компоненты
Dockin-Opserver
Dockin-Opserver — это apiserver-интерфейс на основе Kubernetes client-go, который поддерживает следующие основные функции:
- Управление несколькими кластерами одновременно.
- Управление учётными записями пользователей. Поскольку у Pod нет собственного управления учётными данными, доступ к любому Pod можно получить, просто имея kubeconfig. Это может представлять угрозу безопасности для межгрупповых операций.
- SSH-прокси. Пользователи могут войти в Pod с помощью команды kubectl exec /bin/bash -it и выполнять любые команды. Однако из-за особенностей Kubernetes существует строгий контроль над использованием памяти, поэтому некоторые операции, требующие больших объёмов памяти, такие как редактирование очень большого файла, могут привести к тому, что Pod будет уничтожен OOM. Через SSH-прокси можно перехватывать все команды, выполняемые пользователями, и проводить проверку безопасности (белый и чёрный списки).
- Аудит. Можно выполнять любые команды через kubectl exec, но как узнать, какая команда вызвала проблемы с безопасностью? С помощью функции аудита мы сохраняем все команды, выполненные пользователями, будь то через exec или в оболочке, для последующего анализа.
- Предоставление HTTP и WebSocket интерфейсов для выполнения обычных и интерактивных запросов exec.
- Преобразование протоколов. Данные протоколов WebSocket и SPDY преобразуются друг в друга.
- Использование функции informer в client-go для сохранения времени добавления, обновления и удаления Pod в Redis.
Dockin-Opsctl
Это клиент, похожий на kubectl, бинарный клиент, который устанавливает HTTP- или WebSocket-соединение с dockin-opserver и связывает текущий стандартный ввод и вывод. В интерактивном режиме он переходит в режим raw.
Dockin-Opagent
Агент Dockin, развёрнутый с помощью daemonset на каждом узле Kubernetes, выполняет следующие функции:
- Монтирование docker.sock для подключения к dockerd.
- Интеграция с Docker API для выполнения операций Docker exec.
- Сопоставление containerId и podName на текущем узле.
- Предоставляет интерфейс SPDY для ответа на запросы exec от dockin-opserver.
- Связывает потоки ввода-вывода Docker API с потоками ввода-вывода SPDY.
dockctl
dockctl — это оболочка для dockin-opsctl, предоставляющая следующие возможности:
- Пакетное управление несколькими Pod на уровне подсистем.
- Улучшение вывода. dockin-opsctl возвращает данные в формате JSON, а dockctl форматирует их для удобства чтения.
Открытый исходный код
- dockctl cmdb — управление информацией о Pod на основе ограничений подсистемы.
- Прокси для выполнения команд.
- Инструмент SSH:
- Перехват команд SSH.
- Перехват параметров команд.
- Управление учётными записями.
- Управление правами доступа Pod.
План развития
- Оптимизация анализа содержимого оболочки (с учётом управляющих символов и символов выхода).
- Загрузка и скачивание файлов (без использования apiserver kubectl cp).
- Обработка событий OOM.
- Отладка kubectl.
Демонстрация
SSH

CMDB

Краткое руководство
1. Подготовка
- Kubernetes-кластер. Для автономной установки можно использовать dockin-installer. dockin-installer: https://github.com/WeBankFinTech/Dockin-installer
- Заранее развернуть dockin-rm. Opserver должен вызывать rm-интерфейс для получения информации. Dockin-rm: https://github.com/WeBankFinTech/Dockin-rm
- Подготовить Redis. В Redis хранится информация о чёрном и белом списках команд оболочки. Apiserver использует informer для отправки уведомлений об изменениях Pod. Вы можете быстро запустить Redis с помощью следующей команды:
docker run -p 6379:6379 -d redis:latest redis-server
- Планировать развёртывание сервера opserver и записывать IP-адрес.
Опубликовать ( 0 )