I-authenticate sa Kubernetes gamit ang GitHub OAuth at Dex
Nagpapakita ako sa iyong atensyon ng isang tutorial para sa pagbuo ng access sa isang Kubernetes cluster gamit ang Dex, dex-k8s-authenticator at GitHub.
Lokal na meme mula sa Russian-language Kubernetes chat in Telegrama
Pagpapakilala
Ginagamit namin ang Kubernetes upang lumikha ng mga dynamic na kapaligiran para sa pagbuo at QA team. Kaya gusto naming bigyan sila ng access sa cluster para sa parehong dashboard at kubectl. Hindi tulad ng OpenShift, walang native na pagpapatotoo ang vanilla Kubernetes, kaya gumagamit kami ng mga tool ng third-party para dito.
GitHub - dahil lang ginagamit namin ang GitHub sa aming kumpanya
Sinubukan naming gamitin ang Google OIDC, ngunit sa kasamaang palad kami nabigo upang simulan ang mga ito sa mga grupo, kaya ang pagsasama sa GitHub ay angkop sa amin. Kung walang group mapping, hindi posibleng gumawa ng mga patakaran ng RBAC batay sa mga grupo.
Kaya, paano gumagana ang aming proseso ng awtorisasyon sa Kubernetes sa isang visual na representasyon:
Proseso ng awtorisasyon
Kaunting detalye at punto sa punto:
Nagla-log in ang user sa dex-k8s-authenticator (login.k8s.example.com)
Ipinapasa ng dex-k8s-authenticator ang kahilingan kay Dex (dex.k8s.example.com)
Nagre-redirect si Dex sa pahina ng pag-login sa GitHub
Binubuo ng GitHub ang kinakailangang impormasyon ng awtorisasyon at ibinabalik ito sa Dex
Ipinapasa ni Dex ang natanggap na impormasyon sa dex-k8s-authenticator
Nakatanggap ang user ng OIDC token mula sa GitHub
Ang dex-k8s-authenticator ay nagdaragdag ng token sa kubeconfig
Ipinapasa ng kubectl ang token sa KubeAPIServer
Nagbabalik ang KubeAPIServer ng mga access sa kubectl batay sa ipinasang token
Ang gumagamit ay nakakakuha ng access mula sa kubectl
Mga aksyong paghahanda
Siyempre, mayroon na tayong naka-install na Kubernetes cluster (k8s.example.com), at mayroon ding HELM na paunang naka-install. Mayroon din kaming organisasyon sa GitHub (super-org).
Kung wala kang HELM, i-install ito napaka-simple.
Una kailangan nating i-set up ang GitHub.
Pumunta sa page ng mga setting ng organisasyon, (https://github.com/organizations/super-org/settings/applications) at lumikha ng bagong application (Awtorisadong OAuth App):
Paglikha ng bagong application sa GitHub
Punan ang mga patlang ng mga kinakailangang URL, halimbawa:
URL ng homepage: https://dex.k8s.example.com
URL ng authorization callback: https://dex.k8s.example.com/callback
Mag-ingat sa mga link, mahalaga na huwag mawala ang mga slash.
Bilang tugon sa isang nakumpletong form, bubuo ang GitHub Client ID ΠΈ Client secret, panatilihin ang mga ito sa isang ligtas na lugar, sila ay magiging kapaki-pakinabang sa amin (halimbawa, ginagamit namin Vault para sa pagtatago ng mga lihim):
Pumunta sa login page (https://login.k8s.example.com) at mag-log in gamit ang iyong GitHub account:
Pahina sa pag-login
Na-redirect ang pahina sa pag-login sa GitHub
Sundin ang mga nabuong tagubilin upang makakuha ng access
Pagkatapos ng copy-paste mula sa web page, maaari naming gamitin ang kubectl upang pamahalaan ang aming mga mapagkukunan ng cluster:
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"
At ito ay gumagana, lahat ng mga user ng GitHub sa aming organisasyon ay maaaring makakita ng mga mapagkukunan at mag-log in sa mga pod, ngunit wala silang karapatan na baguhin ang mga ito.