Նույնականացրեք Kubernetes-ում՝ օգտագործելով GitHub OAuth և Dex
Ձեր ուշադրությանն եմ ներկայացնում Kubernetes կլաստերի մուտքի ստեղծման ձեռնարկ՝ օգտագործելով Dex, dex-k8s-authenticator և GitHub:
Տեղական մեմ ռուսալեզու Kubernetes զրույցից Telegram
Ներածություն
Մենք օգտագործում ենք 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 նշան 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-ում նոր հավելվածի ստեղծում
Լրացրեք դաշտերը անհրաժեշտ URL-ներով, օրինակ՝
Գլխավոր էջի URL: https://dex.k8s.example.com
Թույլտվության հետ կանչի URL՝ https://dex.k8s.example.com/callback
Ուշադիր եղեք հղումներով, կարևոր է չկորցնել շեղերը:
Ի պատասխան լրացված ձևի՝ 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-ի օգտատերերը կարող են տեսնել ռեսուրսները և մուտք գործել pods, բայց նրանք իրավունք չունեն դրանք փոխելու: