Autenticación de Kubernetes con GitHub OAuth e Dex
Presento á túa atención un tutorial para xerar acceso a un clúster de Kubernetes usando Dex, dex-k8s-authenticator e GitHub.
Meme local do chat de Kubernetes en ruso Telegrama
Introdución
Usamos Kubernetes para crear ambientes dinámicos para o equipo de desenvolvemento e o control de calidade. Polo tanto, queremos darlles acceso ao clúster tanto para o panel como para o kubectl. A diferenza do mesmo OpenShift, Vanilla Kubernetes non ten autenticación nativa, polo que usamos ferramentas de terceiros para iso.
GitHub - simplemente porque usamos GitHub na nosa empresa
Tentamos usar Google OIDC, pero por desgraza fallou para comezalos con grupos, así que a integración con GitHub nos axustou moi ben. Sen a asignación de grupos, non será posible crear políticas RBAC baseadas en grupos.
Entón, como funciona o noso proceso de autorización de Kubernetes nunha representación visual:
Proceso de autorización
Un pouco máis de detalle e punto por punto:
O usuario inicia sesión en dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator redirixe a solicitude a Dex (dex.k8s.example.com)
Dex redirixe á páxina de inicio de sesión de GitHub
GitHub xera a información de autorización necesaria e devólvela a Dex
Dex pasa a información recibida a dex-k8s-authenticator
O usuario obtén o token OIDC de GitHub
dex-k8s-authenticator engade token a kubeconfig
kubectl pasa o token a KubeAPIServer
KubeAPIServer baseado no token pasado devolve o acceso a kubectl
Acceso de usuario desde kubectl
Accións preparatorias
Por suposto, xa temos instalado un clúster de Kubernetes (k8s.example.com), así como HELM preinstalado. Tamén temos unha organización en GitHub (super-org).
Se non tes HELM, instálao moi sinxelo.
Primeiro necesitamos configurar GitHub.
Vaia á páxina de configuración da organización, (https://github.com/organizations/super-org/settings/applications) e cree unha nova aplicación (Aplicación OAuth autorizada):
Crea unha aplicación nova en GitHub
Encha os campos cos URL necesarios, por exemplo:
URL da páxina de inicio: https://dex.k8s.example.com
URL de devolución de chamada de autorización: https://dex.k8s.example.com/callback
Teña coidado coas ligazóns, é importante non perder barras.
En resposta ao formulario cuberto, xerará GitHub Client ID и Client secret, gárdaos nun lugar seguro, serán útiles para nós (por exemplo, usamos Bóveda para gardar segredos):
Vaia á páxina de inicio de sesiónhttps://login.k8s.example.com) e inicie sesión cunha conta de GitHub:
Páxina de autorización
Páxina de autorización redirixida a GitHub
Siga as instrucións xeradas para acceder
Despois de copiar e pegar desde a páxina web, podemos usar kubectl para xestionar os recursos do noso clúster:
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"
E funciona, todos os usuarios de GitHub da nosa organización poden ver recursos e iniciar sesión nos pods, pero non teñen permiso para cambialos.