Представям на вашето внимание урок за генериране на достъп до Kubernetes клъстер с помощта на Dex, dex-k8s-authenticator и GitHub.
Местен мем от рускоезичния чат Kubernetes в Telegram
въведение
Използваме Kubernetes за създаване на динамични среди за екипа за разработка и QA. Затова искаме да им дадем достъп до клъстера както за таблото, така и за kubectl. За разлика от същия OpenShift, ванилия Kubernetes няма собствено удостоверяване, така че използваме инструменти на трети страни за това.
GitHub – просто защото използваме GitHub в нашата компания
Опитахме се да използваме Google OIDC, но за съжаление ние Неуспешно да ги стартираме с групи, така че интеграцията с GitHub ни подхождаше много добре. Без групово съпоставяне няма да е възможно да се създадат базирани на група RBAC политики.
И така, как работи нашият процес на оторизация на Kubernetes във визуално представяне:
Процес на оторизация
Малко по-подробно и точка по точка:
Потребителят влиза в dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator пренасочва заявката към Dex (dex.k8s.example.com)
Dex пренасочва към страницата за вход в GitHub
GitHub генерира необходимата информация за оторизация и я връща на Dex
Dex предава получената информация на dex-k8s-authenticator
Потребителят получава OIDC токен от GitHub
dex-k8s-authenticator добавя токен към kubeconfig
kubectl предава токен на KubeAPIServer
KubeAPIServer въз основа на предадения токен връща достъп до kubectl
Потребителски достъп от kubectl
Подготвителни действия
Разбира се, вече имаме инсталиран клъстер Kubernetes (k8s.example.com), както и предварително инсталиран HELM. Имаме и организация в GitHub (super-org).
Ако нямате HELM, инсталирайте го много проста.
Първо трябва да настроим GitHub.
Отидете на страницата с настройки на организацията, (https://github.com/organizations/super-org/settings/applications) и създайте ново приложение (Оторизирано OAuth приложение):
Създайте ново приложение в GitHub
Попълнете полетата с необходимите URL адреси, например:
URL адрес на началната страница: https://dex.k8s.example.com
URL адрес за обратно извикване на разрешение: https://dex.k8s.example.com/callback
Внимавайте с връзките, важно е да не губите наклонени черти.
В отговор на попълнения формуляр GitHub ще генерира Client ID и Client secret, запазете ги на сигурно място, ще ни бъдат полезни (например използваме свод за пазене на тайни):
Отидете на страницата за входhttps://login.k8s.example.com) и влезте с акаунт в GitHub:
Страница за оторизация
Страницата за оторизация е пренасочена към GitHub
Следвайте генерираните инструкции, за да получите достъп
След копиране-поставяне от уеб страницата можем да използваме kubectl за управление на ресурсите на клъстера:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
И работи, всички потребители на GitHub в нашата организация могат да виждат ресурси и да влизат в подове, но нямат разрешение да ги променят.