☸️ Kubernetes-туннель — временный доступ к кластеру по одной ссылке
Знакомая ситуация: подрядчику нужно посмотреть логи в staging-кластере, коллеге из соседней команды — помочь с отладкой, а API-сервер кластера закрыт от интернета. Дальше обычно выбирают между «завести человеку VPN и учётку» и «скинуть свой kubeconfig» — и оба варианта плохие.
В tuna-cli 0.36 появился новый тип туннеля — Kubernetes. Одна команда, и гость получает ссылку на готовый kubeconfig, с которым работает обычный kubectl:
tuna kubernetes --context=staging --service-account=shop/debug --preset=debug --ttl=4h
Как это работает
Клиент читает ваш локальный kubeconfig, поднимает к API-серверу reverse-proxy и публикует его через HTTP-туннель с валидным TLS-сертификатом. Гость получает одноразовую ссылку:
curl -sfO https://<адрес туннеля>/tuna/<секрет>/kubeconfig.yaml
KUBECONFIG=./kubeconfig.yaml kubectl get pods
В скачанном kubeconfig лежит гостевой токен, а не ваши учётные данные. Прокси проверяет этот токен и подставляет вместо него настоящие креды — они никогда не покидают вашу машину. Остановили туннель — доступ пропал, отзывать нечего.
Через туннель работает всё, к чему привыкли пользователи kubectl: get, list, watch, logs, exec с stdin, port-forward, pods/proxy и запись — scale, create, delete. По сути, это такой auth-прокси к Kubernetes API, который поднимается одной командой и живёт ровно столько, сколько нужно.
Права гостя — под вашим контролем
Первый уровень защиты — RBAC. По умолчанию гость работает с вашими правами, и клиент честно об этом предупреждает. Правильнее создать для гостя сервисный аккаунт с минимальными правами и передать его во флаге --service-account: токен для него клиент выпустит сам через TokenRequest API и будет продлевать каждый час.
Второй уровень — ограничения самого туннеля. Они работают поверх RBAC и могут только сужать права:
| Флаг | Что делает |
|---|---|
--namespace=shop | Только один namespace, без кластерных ресурсов и -A |
--read-only | Только чтение: без exec, attach и port-forward, но с логами |
--no-delete | Всё, кроме удаления |
--deny-resource=secrets,configmaps | Запрет на конкретные ресурсы |
--deny-subresource=exec,attach | Запрет на субресурсы |
Чтобы не собирать ограничения вручную, есть пресеты:
| Пресет | Что разрешено |
|---|---|
view | Только чтение, без secrets, exec, attach, port-forward и proxy |
observer | Только чтение подов и их логов |
debug | Всё, кроме удаления |
open | Без дополнительных ограничений |
Пресеты и флаги суммируются и не ослабляют друг друга: --preset=debug --read-only даёт только чтение.
Срок действия и одноразовые ссылки
--ttl=4h— через четыре часаkubectlгостя получитthis access has expired, ask for a new link;--download-limit— сколько раз можно скачать kubeconfig, по умолчанию один. Если гость при первой же попытке получил410, значит, конфиг до него забрал кто-то другой: остановите туннель и выдайте новую ссылку.
Гостевые токены живут только в памяти процесса: после перезапуска клиента старые ссылки перестают работать.
Всё под наблюдением
Туннель запускается в новом терминальном интерфейсе: в шапке — сервисный аккаунт, namespace, ограничения и срок действия доступа, ниже — лента запросов гостя. Те же запросы видны в инспекторе как обычные HTTP-запросы, так что всегда понятно, что именно делал гость в кластере.
Кому пригодится
- Подрядчикам и аутсорсу — дать доступ к staging на время работ, без заведения учёток в облаке.
- Поддержке и дежурным — быстро пустить коллегу посмотреть логи и поды, в режиме
observer. - Демо и обучению — показать кластер на воркшопе с
--read-onlyи коротким--ttl. - Локальным кластерам — kind, minikube или k3s на ноутбуке становятся доступны коллеге без проброса портов.
Если нужен постоянный адрес, используйте зарезервированный поддомен (--subdomain=k8s-staging) или свой домен, а туннель можно запустить как сервис.
Kubernetes-туннель доступен по подписке начиная с tuna-cli 0.36.0, у команды есть короткий алиас tuna k8s. Все флаги и подробности — в документации.
Оставьте отзыв
Если вам нравится пользоваться Tuna, или наоборот вы недовольны чем либо, то пожалуйста оставьте отзыв.
Помощь
Мы ценим наших пользователей и детально изучаем все обращения, если у вас возникли проблемы с tuna – обязательно свяжитесь с нами одним из способов: