Jag presenterar för din uppmärksamhet en handledning för att generera åtkomst till ett Kubernetes-kluster med hjälp av Dex, dex-k8s-autenticator och GitHub.
Lokal meme från den ryskspråkiga Kubernetes chattar in Telegram
Inledning
Vi använder Kubernetes för att skapa dynamiska miljöer för utvecklings- och kvalitetssäkringsteamet. Så vi vill ge dem tillgång till klustret för både instrumentpanelen och kubectl. Till skillnad från OpenShift har vanilla Kubernetes inte inbyggd autentisering, så vi använder tredjepartsverktyg för detta.
GitHub – helt enkelt för att vi använder GitHub i vårt företag
Vi försökte använda Google OIDC, men tyvärr misslyckades att starta dem med grupper, så integrationen med GitHub passade oss ganska bra. Utan gruppmappning kommer det inte att vara möjligt att skapa RBAC-policyer baserade på grupper.
Så, hur fungerar vår Kubernetes-auktoriseringsprocess i en visuell representation:
Auktoriseringsprocess
Lite mer detalj och punkt för punkt:
Användaren loggar in på dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator vidarebefordrar begäran till Dex (dex.k8s.example.com)
Dex omdirigerar till GitHubs inloggningssida
GitHub genererar nödvändig behörighetsinformation och returnerar den till Dex
Dex skickar den mottagna informationen till dex-k8s-autenticator
Användaren får en OIDC-token från GitHub
dex-k8s-authenticator lägger till token till kubeconfig
kubectl skickar token till KubeAPIServer
KubeAPIServer returnerar åtkomst till kubectl baserat på den passerade token
Användaren får åtkomst från kubectl
Förberedande åtgärder
Naturligtvis har vi redan ett Kubernetes-kluster installerat (k8s.example.com), och kommer även med HELM förinstallerat. Vi har även en organisation på GitHub (super-org).
Om du inte har HELM, installera det mycket enkel.
Först måste vi konfigurera GitHub.
Gå till sidan för organisationsinställningar, (https://github.com/organizations/super-org/settings/applications) och skapa en ny applikation (Authorized OAuth App):
Skapa en ny applikation på GitHub
Fyll i fälten med nödvändiga webbadresser, till exempel:
Hemsida URL: https://dex.k8s.example.com
Återuppringningsadress för auktorisering: https://dex.k8s.example.com/callback
Var försiktig med länkar, det är viktigt att inte tappa snedstreck.
Som svar på ett ifyllt formulär kommer GitHub att generera Client ID и Client secret, förvara dem på ett säkert ställe, de kommer att vara användbara för oss (till exempel använder vi Valv för att lagra hemligheter):
Gå till inloggningssidan (https://login.k8s.example.com) och logga in med ditt GitHub-konto:
Login sida
Inloggningssidan omdirigeras till GitHub
Följ de genererade instruktionerna för att få åtkomst
Efter att ha kopierat in från webbsidan kan vi använda kubectl för att hantera våra klusterresurser:
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"
Och det fungerar, alla GitHub-användare i vår organisation kan se resurser och logga in på poddar, men de har inte rättigheter att ändra dem.