Skip to main content

☸️ Kubernetes-туннель — временный доступ к кластеру по одной ссылке

· 4 min read

Знакомая ситуация: подрядчику нужно посмотреть логи в 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: