Команды DB 🗄️
Команды для управления временным доступом к базам данных MySQL через создание MySQLProxy CustomResource в Kubernetes.
💡 Способ предназначен для окружений
l-yandex,p-yandex,p-azure. Для получения доступа нужно быть owner или contributor в K8s-неймспейсе сервиса, за которым закреплён нужный MySQL.
| Команда | Описание |
|---|---|
dodo db access |
Запросить временный доступ к БД и поднять port-forward |
dodo db extend |
Продлить активный доступ |
dodo db revoke |
Удалить активные доступы |
🔓 Запрос доступа (Access)
Создаёт ресурс MySQLProxy в кластере и поднимает port-forward на локальную машину для подключения к БД.
Команда открывает только сетевой доступ до БД — дальше подключайтесь любым MySQL-клиентом (mysql CLI, DBeaver, DataGrip и т.д.).
dodo db access -n <namespace> [flags]
Флаги
| Флаг | Сокращение | Тип | Описание |
|---|---|---|---|
--namespace |
-n |
string |
Обязательный. Целевой неймспейс в кластере. |
--role |
-r |
string |
Роль доступа: ro (только чтение), rw (чтение-запись), fa (полный доступ). По умолчанию: ro. |
--time |
-t |
int |
Длительность доступа в минутах (10–120). По умолчанию: 10. |
--port |
-p |
int |
Локальный порт для port-forward (1024–65535). По умолчанию: 13306. |
--context |
-c |
string |
Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl. |
--service |
-s |
string |
Целевой сервис БД. Обязателен, когда в неймспейсе доступно несколько сервисов БД; актуальный список выведет сама команда. |
--replica |
string |
Подключение к реплике вместо мастера: any (оператор сам выберет реплику) или FQDN хоста Yandex MDB (rc<az>-<id>.mdb.yandexcloud.net). Без флага — подключение к мастеру. Работает только в Yandex-контекстах. |
Примеры
Запросить read-only доступ на 30 минут:
dodo db access -r ro -t 30 -n my-namespace
Запросить read-write доступ с кастомным портом:
dodo db access -r rw -t 60 -n my-namespace -p 3307
Запросить полный доступ с явным указанием контекста:
dodo db access -r fa -t 15 -n my-namespace -c p-yandex
Запросить доступ, когда в неймспейсе несколько сервисов БД:
dodo db access -r ro -n my-namespace -s my-service
Запросить доступ к реплике (только Yandex):
dodo db access -r ro -n my-namespace --replica any
dodo db access -r ro -n my-namespace --replica rc1b-x42abc1xyz.mdb.yandexcloud.net
Подключиться к БД после получения доступа:
mysql --host=127.0.0.1 --port=13306 --user=ro --password=ro
⏳ Продление доступа (Extend)
Продлевает активную сессию доступа без пересоздания ресурса. Выполнять в отдельном терминале, пока сессия access активна.
dodo db extend -n <namespace> -t <minutes> [flags]
Флаги
| Флаг | Сокращение | Тип | Описание |
|---|---|---|---|
--namespace |
-n |
string |
Обязательный. Целевой неймспейс. |
--time |
-t |
int |
Обязательный. Дополнительные минуты к базовому времени доступа (10–480). |
--context |
-c |
string |
Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl. |
Как считается время
- Итоговое время = базовое время (
access -t) + добавленное время (extend -t). - Повторный
extendзаменяет предыдущее добавленное значение, а не суммируется с ним. Новое значение должно быть больше предыдущего (уменьшить продление нельзя). - Для продления в неймспейсе должен существовать ровно один активный доступ.
Пример
# Изначальный доступ: dodo db access -n my-namespace -t 15
dodo db extend -n my-namespace -t 20 # итог: 15 + 20 = 35 минут
dodo db extend -n my-namespace -t 40 # итог: 15 + 40 = 55 минут (40 заменяет 20)
🚫 Отзыв доступа (Revoke)
Удаляет все ресурсы MySQLProxy, созданные текущим пользователем в указанном неймспейсе. Полезно, если по каким-то причинам CR не был удалён автоматически после завершения сессии доступа (например, при аварийном завершении процесса).
dodo db revoke -n <namespace> [flags]
Флаги
| Флаг | Сокращение | Тип | Описание |
|---|---|---|---|
--namespace |
-n |
string |
Обязательный. Целевой неймспейс. |
--context |
-c |
string |
Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl. |
Пример
dodo db revoke -n my-namespace
🧐 Как это работает
- Создание CR: Команда
accessсоздаётMySQLProxyCustomResource в целевом неймспейсе с указанной ролью и временем жизни. - Ожидание пода: Оператор в кластере обрабатывает CR и поднимает под с ProxySQL, который устанавливает соединение с базой данных (с мастером или с выбранной репликой).
- Port-forward: CLI автоматически запускает
kubectl port-forwardна локальный порт (по умолчанию13306), после чего выводит параметры подключения:- Адрес:
127.0.0.1 - Порт: указанный через
--port(или13306) - Логин/Пароль: совпадает с названием роли (
ro,rw,fa) - Target:
masterилиreplica (<fqdn>) - Время истечения доступа
- Адрес:
- TTL: Доступ живёт
accessTimeMinutes + extendedAccessTimeMinutesот момента создания CR. По истечении времени оператор автоматически удаляет CR и все связанные ресурсы. - Завершение сессии: При нажатии
Ctrl+Cport-forward останавливается и CLI удаляет CR. При ошибках CR может остаться в кластере — в таком случае используйтеdodo db revokeили удалите ресурс вручную. - Extend: Команда
extendобновляет полеextendedAccessTimeMinutesсуществующего CR — оператор пересчитывает TTL. - Revoke: Команда
revokeнаходит всеMySQLProxyресурсы текущего пользователя в неймспейсе и удаляет их.
Ограничения
- В одном неймспейсе у пользователя может быть только один активный доступ на роль: например,
roиrwодновременно — можно, дваro— нельзя. Если доступ с той же ролью уже существует, команда предложит выполнитьdodo db revoke. - Для второго параллельного доступа указывайте другой локальный порт (
--port). --replicaподдерживается только в Yandex-контекстах. Список доступных реплик CLI проверяет сам через служебный dry-run запрос к оператору — пользователю ничего дополнительно запускать не нужно.