Autenticarse en Kubernetes usando GitHub OAuth y Dex
Les presento un tutorial para generar acceso a un clúster de Kubernetes usando Dex, dex-k8s-authenticator y GitHub.
Meme local del chat de Kubernetes en ruso en Telegram
introducción
Usamos Kubernetes para crear entornos dinámicos para el equipo de desarrollo y control de calidad. Por eso queremos darles acceso al clúster tanto para el panel como para kubectl. A diferencia de OpenShift, Vanilla Kubernetes no tiene autenticación nativa, por lo que utilizamos herramientas de terceros para ello.
GitHub: simplemente porque usamos GitHub en nuestra empresa
Intentamos utilizar Google OIDC, pero desafortunadamente fallado iniciarlos con grupos, por lo que la integración con GitHub nos vino bastante bien. Sin el mapeo de grupos, no será posible crear políticas RBAC basadas en grupos.
Entonces, ¿cómo funciona nuestro proceso de autorización de Kubernetes en una representación visual?
Proceso de autorización
Un poco más de detalle y punto por punto:
El usuario inicia sesión en dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator reenvía la solicitud a Dex (dex.k8s.example.com)
Dex redirige a la página de inicio de sesión de GitHub
GitHub genera la información de autorización necesaria y la devuelve a Dex
Dex pasa la información recibida a dex-k8s-authenticator
El usuario recibe un token OIDC de GitHub
dex-k8s-authenticator agrega token a kubeconfig
kubectl pasa el token a KubeAPIServer
KubeAPIServer devuelve accesos a kubectl según el token pasado
El usuario obtiene acceso desde kubectl.
Acciones preparatorias
Por supuesto, ya tenemos instalado un clúster de Kubernetes (k8s.example.com), y también viene con HELM preinstalado. También tenemos una organización en GitHub (super-org).
Si no tienes HELM, instálalo muy simple.
Primero necesitamos configurar GitHub.
Vaya a la página de configuración de la organización, (https://github.com/organizations/super-org/settings/applications) y cree una nueva aplicación (Aplicación OAuth autorizada):
Creando una nueva aplicación en GitHub
Complete los campos con las URL necesarias, por ejemplo:
URL de la Pagina Principal: https://dex.k8s.example.com
URL de devolución de llamada de autorización: https://dex.k8s.example.com/callback
Ojo con los enlaces, es importante no perder barras.
En respuesta a un formulario completado, GitHub generará Client ID и Client secret, guárdalos en un lugar seguro, nos serán útiles (por ejemplo, usamos Bóveda para guardar secretos):
Vaya a la página de inicio de sesión (https://login.k8s.example.com) e inicie sesión con su cuenta de GitHub:
Página de inicio de sesión
Página de inicio de sesión redirigida a GitHub
Siga las instrucciones generadas para obtener acceso.
Después de copiar y pegar desde la página web, podemos usar kubectl para administrar los recursos de nuestro 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"
Y funciona, todos los usuarios de GitHub de nuestra organización pueden ver los recursos e iniciar sesión en los pods, pero no tienen derechos para cambiarlos.