uz
DF
марта 4, 2026
Обновлено марта 4, 2026

kubectl-rexec: аудит kubectl exec в Kubernetes — установка, примеры и команды kubectl

Kubernetes

Введение

kubectl exec сам по себе почти не отвечает на вопрос “что именно делали внутри контейнера”. В Kubernetes-аудите вы видите факт обращения к subresource pods/exec, но не содержимое интерактивной сессии. kubectl-rexec (плагин от Adyen) решает эту проблему: он проксирует exec через свой endpoint и публикует аудируемые события, чтобы у вас появился след действий “внутри”.

GitHub репозиторий: https://github.com/Adyen/kubectl-rexec

Когда kubectl-rexec особенно полезен

  • Compliance и расследования: нужно понимать, какие действия выполнялись в поде во время инцидента (а не только “кто зашёл в shell”).
  • Привилегированный доступ: вы разрешаете exec только ограниченному кругу людей, но хотите прозрачность действий.
  • Change management: “ручные правки в проде” должны оставлять след (например, изменение конфигов, ручной рестарт сервиса внутри контейнера).

Как работает kubectl-rexec

Архитектура состоит из двух частей:

  • ValidatingWebhookConfiguration — запрещает обычный pods/exec, если запрос не пришёл через rexec endpoint (или если пользователь не имеет права обхода).
  • APIService (rexec) — принимает запросы от kubectl-плагина, преобразует их обратно в обычный exec и проксирует в kube-apiserver, параллельно создавая аудит-события. Проксирование делается через impersonation, потому что kube-apiserver не передаёт исходные креды дальше по цепочке.

Требования и ограничения

  • Проект ориентирован на кластеры, где exec работает через websocket. В README указано: Kubernetes 1.30 (feature gate включён по умолчанию) или Kubernetes 1.29 с включённым TranslateStreamCloseWebsocketRequests=true. Версии ниже 1.29 не поддерживаются.

Установка

Установка делится на две части: proxy-компонент в кластер + kubectl-плагин локально.

1) Установить proxy в кластер

В quick start из репозитория предлагается применить манифесты через kustomize (обычно в kube-system). Команда также добавляет webhook, который отключает обычный kubectl exec.

kustomize build manifests/ | kubectl -n kube-system apply -f -

2) Установить kubectl-плагин

Быстрый вариант из Getting started — поставить плагин через go install и убедиться, что каталог с бинарями в PATH.

go install github.com/adyen/kubectl-rexec@latest

3) Проверить, что события пишутся

Для проверки можно посмотреть логи proxy-компонента (в дальнейшем их обычно отправляют в централизованное лог-хранилище).

kubectl -n kube-system logs -l app=rexec -f

Использование

Плагин повторяет параметры обычного kubectl exec, но вызывается через kubectl rexec exec ....

Пример 1: интерактивная сессия bash

kubectl rexec exec -ti some-pod -- bash

Пример 2: выполнить одну команду без TTY

kubectl rexec exec some-pod -- sh -c "id && uname -a"

Пример 3: выбрать namespace и контейнер

kubectl -n production rexec exec -ti pod-name -c app -- sh

Примеры применения в реальных процессах

  • “Break-glass” доступ: выдаёте право на rexec ограниченной группе, а обычный exec блокируете webhook’ом.
  • Инциденты: во время расследования вы видите не только “кто заходил”, но и события/след от exec, и можете сопоставить это с логами приложения.
  • Операционные изменения: если команда вынуждена делать ручные правки (hotfix), вы сохраняете аудит-трейл и снижаете “чёрную магию в проде”.

Где это удобно развернуть и как не потерять аудит

kubectl-rexec особенно полезен в self-managed Kubernetes, когда вы поднимаете кластер на виртуальных машинах и отвечаете за безопасность и аудит сами. В Serverspace.uz можно быстро развернуть облачные серверы под control plane/worker-ноды, а аудит-логи rexec проксировать в вашу систему логирования (например, Loki/ELK), чтобы след exec-сессий не терялся даже при пересоздании нод.

Cloud Servers: https://serverspace.uz/services/cloud-servers/

FAQ

kubectl-rexec полностью заменяет Kubernetes Audit Logs?

Нет. Kubernetes audit по-прежнему нужен для фактов обращений к API (кто/когда/к чему). kubectl-rexec добавляет недостающую часть вокруг exec-потока за счёт проксирования и аудируемых событий на своём уровне.

Почему нельзя просто смотреть audit logs pods/exec?

Обычный аудит фиксирует сам факт exec-запроса, но не даёт прозрачной картины “что делали внутри интерактивной сессии”. Это и есть проблема, которую проект пытается закрыть.

Какая минимальная версия Kubernetes нужна?

В README указано: поддерживаются кластеры, где exec работает по websocket: Kubernetes 1.30 (по умолчанию) или 1.29 с включённым TranslateStreamCloseWebsocketRequests=true; ниже 1.29 — не поддерживается.

Где смотреть “аудит-события” rexec?

В quick start предлагается начать с логов proxy (kubectl -n kube-system logs -l app=rexec -f) и затем настроить централизованную доставку логов.

Шпаргалка: основные команды kubectl

Задача Команда Комментарий
Проверить текущий контекст kubectl config current-context Показывает, с каким кластером вы сейчас работаете
Посмотреть все контексты kubectl config get-contexts Удобно, если у вас несколько кластеров/окружений
Переключить контекст kubectl config use-context <context> Будьте аккуратны: легко “попасть не туда”
Список namespace kubectl get ns Быстрый обзор окружений
Поды в namespace kubectl -n <ns> get pods Добавьте -o wide, чтобы увидеть ноды и IP
Основные ресурсы в namespace kubectl -n <ns> get pods,svc,deploy Самый быстрый “health-check” по окружению
Описание пода (события/детали) kubectl -n <ns> describe pod <pod> Полезно при CrashLoopBackOff и проблемах с образом/секретами
Логи контейнера kubectl -n <ns> logs <pod> -c <container> Добавьте -f (follow) и --tail=200 для удобства
Логи предыдущего контейнера kubectl -n <ns> logs <pod> -c <container> --previous Очень полезно, когда контейнер быстро падает
Exec (обычный) kubectl -n <ns> exec -ti <pod> -- sh Может быть заблокирован webhook’ом rexec
Exec (аудируемый через rexec) kubectl -n <ns> rexec exec -ti <pod> -- sh Рекомендуемый вариант при включённом kubectl-rexec
Port-forward на сервис kubectl -n <ns> port-forward svc/<svc> 8080:80 Быстро открыть доступ локально без Ingress
Port-forward на под kubectl -n <ns> port-forward pod/<pod> 8080:8080 Полезно для дебага конкретного экземпляра
Применить манифест kubectl apply -f file.yaml Создать/обновить ресурсы
Diff перед apply kubectl diff -f file.yaml Понять, что изменится
Rollout статус деплоя kubectl -n <ns> rollout status deploy/<name> Контроль выката
Откат деплоя kubectl -n <ns> rollout undo deploy/<name> Вернуть предыдущую ревизию
События в namespace kubectl -n <ns> get events --sort-by=.lastTimestamp Быстро найти причины Pending/Failed
Проверить права (RBAC) kubectl auth can-i create pods/exec -n <ns> Понять, кто может делать exec

Вывод

kubectl-rexec — практичный способ добавить аудит вокруг kubectl exec там, где одного Kubernetes audit недостаточно. Он строится на блокировке “обычного” exec через validating webhook и проксировании exec через APIService, где можно формировать аудит-события. Для быстрого старта достаточно поставить proxy в кластер (kustomize → kube-system), установить kubectl-плагин и настроить сбор логов proxy в централизованное хранилище.

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...