☸️ 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. Все флаги и подробности — в документации.
Leave feedback
If you enjoy using Tuna, or on the contrary you are not happy with something, please leave feedback.
Help
We value our users and carefully review every request. If you have any problems with tuna, please contact us in one of the following ways: