Передача статичних файлів kubeconfig у Slack або ручне створення сертифікатів для кожного джуна — це класичний інфраструктурний борг. Коли команда росте, ви неминуче перетворюєтеся на сервіс-деск, який тільки те й робить, що переписує права або забуває закрити доступи при звільненні людей.
Це потрібно автоматизувати ще на старті. Найбільш прагматичний варіант — інтегрувати автентифікацію в Kubernetes із провайдером ідентифікації, де інженери вже мають облікові записи.
У цьому матеріалі ми покроково розберемо, як налаштувати Single Sign-On (SSO) для кластера за допомогою GitHub та платформи керування доступами Loft.
Що знадобиться для старту та інсталяція Loft CLI
Перед тим як перейти до конфігурації, переконайтеся, що у вас підготовано базове оточення. Нам знадобляться:
- локальний або тестовий кластер Kubernetes (для демонстрації ми використаємо minikube);
- встановлена утиліта командного рядка kubectl;
- обліковий запис на GitHub.
Loft розгортається всередині кластера за допомогою Helm. Якщо у вас у системі ще немає Helm-клієнта, варто його встановити, хоча Loft CLI може виконати базове розгортання самостійно.
Крок 1: Запуск кластера
Відкрийте термінал та підніміть локальний кластер:
minikube start
Якщо ви працюєте з готовим віддаленим кластером, де вже налаштований Ingress-контролер, цей крок можна пропустити.
Крок 2: Встановлення Loft CLI
Платформа Loft виступатиме шлюзом між Kubernetes та GitHub. Для керування нею нам потрібна локальна утиліта. Завантажуємо актуальний бінарник під вашу ОС:
- Для macOS / Linux:
curl -s -L "https://github.com/loft-sh/loft/releases/latest" | sed -nE 's!.*"([^"]*loft-linux-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o loft && chmod +x loft; sudo mv loft /usr/local/bin;
(Якщо ви працюєте на macOS, замініть у першому рядку скрипту loft-linux-amd64 на loft-darwin-amd64).
- Для Windows:
md -Force "$Env:APPDATA\loft"; Invoke-WebRequest -UseBasicParsing ((Invoke-WebRequest -URI "https://github.com/loft-sh/loft/releases/latest" -UseBasicParsing).Content -replace "(?ms).*`"([^`"]*loft-windows-amd64.exe)`".*","https://github.com/`$1") -o $Env:APPDATA\loft\loft.exe; $env:Path += ";" + $Env:APPDATA + "\loft";
Крок 3: Ініціалізація та перший запуск
Тепер деплоїмо Loft у наш кластер. Утиліта автоматично перевірить ваш поточний контекст у kubeconfig та запустить інсталяцію:
loft start
Під час процесу система попросить ввести робочий email для створення профілю адміністратора. Оскільки пароль генерується автоматично, ми рекомендуємо одразу скинути його на ваш власний. Відкрийте сусідню вкладку терміналу та виконайте:
loft reset password
Щоб перевірити, що все піднялося, авторизуємось у локальній панелі керування:
loft login https://localhost:9898 --insecure
Прапорець –insecure тут обов’язковий. Оскільки це локальний запуск, Loft використовує тимчасовий самопідписаний SSL-сертифікат. У браузері відкриється сторінка авторизації — вводимо email та свій новий пароль.
Реєстрація OAuth-додатка в GitHub
Тепер нам потрібно пояснити GitHub, що платформа Loft має право перевіряти особистість наших інженерів. Для цього ми створимо корпоративний OAuth-застосунок. Це займає кілька хвилин, але вимагає точності в URL-адресах.
- Перейдіть у свій профіль у GitHub і відкрийте: Settings → Developer Settings → OAuth Apps.
- Натисніть кнопку New OAuth App та заповніть форму конфігурації:
- Application name: будь-яка зрозуміла для вашої команди назва.
- Homepage URL:
https://localhost:9898 - Authorization callback URL:
https://localhost:9898/auth/github/callback
- Натисніть Register application.
Після реєстрації система перенаправить вас на сторінку застосунку. Звідси нам обов’язково потрібні два значення: Client ID та Client Secret (якщо секрет не згенерувався автоматично, натисніть кнопку Generate a new client secret).
Обов’язково скопіюйте ці ключі в безпечне місце — GitHub показує секрет лише один раз. Якщо ви закриєте сторінку, його доведеться перевипускати.
Зв’язування Loft із GitHub та перевірка доступу
Тепер повертаємося в адмін-панель Loft, яка відкрита у вашому браузері, щоб фіналізувати налаштування.
- У лівому меню перейдіть у розділ Admin та відкрийте вкладку з конфігурацією системи (Loft Configuration).
- Додайте в YAML-файл декларативний блок авторизації, підставивши отримані на попередньому кроці ключі:
auth:
github:
clientId: <ВАШ_CLIENT_ID>
clientSecret: <ВАШ_CLIENT_SECRET>
redirectURI: https://localhost:9898/auth/github/callback
- Натисніть Apply для збереження змін.
Щоб оновити контекст, поверніться в термінал і перезапустіть сесію командами:
loft start
І також:
loft login https://localhost:9898 --insecure
Надання прав доступу до кластера
Щоб інженер міг працювати з інфраструктурою, ви як адміністратор маєте делегувати йому ролі.
- Зайдіть у панель Loft під своїм адмінським акаунтом.
- У розділі Users ви побачите нового користувача, який щойно авторизувався через GitHub.
- Перейдіть у сторінку Clusters — Cluster Access і натисніть Create Cluster Access.
- Виберіть потрібного інженера, визначте для нього межі дозволів (наприклад, роботу лише у виділених Namespaces) та натисніть Create.
Тепер розробнику достатньо виконати у себе в консолі одну команду:
loft use cluster [назва_кластера]
Його локальний файл ~/.kube/config миттєво оновиться, і він зможе безпечно дебажити свої застосунки через стандартний kubectl.
Поширені помилки: що може піти не так при налаштуванні?
Конфігурація часто стикається з нюансами інфраструктури. Ось кілька класичних викликів, з якими ви можете зіткнутися:
- Помилка невідповідності URL (
redirect_uri_mismatch)
GitHub дуже прискіпливий до синтаксису. Якщо в налаштуваннях OAuth ви вказали callback-адресу з косою рискою в кінці (.../callback/), а в YAML-файлі Loft прописали її без неї — автентифікація впаде. Завжди детально звіряйте повний шлях, аж до останнього символу та протоколу. - Блокування самопідписаних SSL-сертифікатів
Оскільки під час локального тесту Loft генерує внутрішній сертифікат, браузери на рушії Chromium блокуватимуть редирект із GitHub назад наlocalhost:9898. Для тестів вам доведеться вручну дозволити перехід у браузері (Advanced — Proceed to localhost). На проді ця проблема знімається автоматично після підключення реального домену таcert-manager. - Користувач залогінився, але нічого не бачить
Інженер успішно пройшов автентифікацію через GitHub, заходить у Loft, а там нуль доступних нод чи просторів імен. Пам’ятаємо, що успішний логін через SSO не дає прав автоматично. Щоб людина могла працювати, адмін має зайти в меню Cluster Access і вручну нарізати їй потрібні RBAC-ролі в K8s. - Проблема публічного входу при масштабуванні
За дефолтної схеми OAuth натиснути кнопку «Sign in with GitHub» і створити профіль у вашому Loft може будь-хто з аккаунтом на GitHub. Доступ до кластерів вони не отримають, але базу заб’ють. Якщо у вас велика компанія, краще одразу крутити інтеграцію через OIDC (через той же Dex або Keycloak) — так можна на рівні конфігу зафіксувати фільтр: «дозволяти вхід тільки членам нашої GitHub-організації».
Підсумуємо
Перехід від статичних файлів kubeconfig до динамічного SSO — це єдиний спосіб навести лад із доступами, коли команда починає рости. Зв’язавши GitHub із платформою Loft, ви повністю закриваєте питання ручного керування ключами і даєте розробникам нормальний інструмент для швидкого старту.
Головне — одразу продумати логіку RBAC на етапі авторизації та враховувати обмеження базового OAuth, якщо плануєте масштабувати систему на велику компанію.

