GitHub OAuth, Dex എന്നിവ ഉപയോഗിച്ച് Kubernetes-ൽ പ്രാമാണീകരിക്കുക
Представляю вашему вниманию туториал для генерации доступов к Kubernetes-кластеру с помощью Dex, dex-k8s-authenticator и GitHub.
Локальный мем из русскоязычного чата Kubernetes в കന്വിസന്ദേശം
ആമുഖം
Мы используем 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 token от 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) и создаем новое приложение (Authorized OAuth App):
Будьте внимательны с ссылками, важно не потерять слеши.
В ответ на заполненную форму, 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 в нашей организации могут видеть ресурсы и входить в поды, однако они не имеют прав на их изменение.