Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում
Kubernetes Dashboard-ը հեշտ օգտագործման գործիք է՝ գործող կլաստերի մասին արդի տեղեկատվություն ստանալու և դրա նվազագույն կառավարման համար: Դուք սկսում եք ավելի շատ գնահատել այն, երբ այս հնարավորություններին հասանելիություն են անհրաժեշտ ոչ միայն ադմինիստրատորներին/DevOps-ի ինժեներներին, այլ նաև նրանց, ովքեր ավելի քիչ սովոր են կոնսոլին և/կամ մտադիր չեն զբաղվել kubectl-ի և հետ շփվելու բոլոր բարդությունների հետ։ այլ կոմունալ ծառայություններ. Դա տեղի ունեցավ մեզ հետ. մշակողները ցանկանում էին արագ մուտք գործել Kubernetes վեբ ինտերֆեյս, և քանի որ մենք օգտագործում ենք GitLab, լուծումը բնականաբար ստացվեց:
Ինչու սա?
Ուղղակի ծրագրավորողներին կարող է հետաքրքրել այնպիսի գործիք, ինչպիսին է K8s Dashboard-ը վրիպազերծման առաջադրանքների համար: Երբեմն ցանկանում եք դիտել տեղեկամատյանները և ռեսուրսները, իսկ երբեմն սպանել պատյանները, մասշտաբավորել Deployments/StatefulSets և նույնիսկ գնալ կոնտեյների վահանակ (կան նաև հարցումներ, որոնց համար, սակայն, կա ևս մեկ միջոց, օրինակ՝ միջոցով kubectl-debug).
Բացի այդ, մենեջերների համար կա հոգեբանական պահ, երբ նրանք ցանկանում են նայել կլաստերին՝ տեսնել, որ «ամեն ինչ կանաչ է», և դրանով իսկ հանգստացնել իրենց, որ «ամեն ինչ աշխատում է» (ինչը, իհարկե, շատ հարաբերական է... բայց դա դուրս է հոդվածի շրջանակներից):
Որպես ստանդարտ CI համակարգ մենք ունենք կիրառվում է GitLab. բոլոր մշակողները նույնպես օգտագործում են այն: Հետևաբար, նրանց հասանելիություն ապահովելու համար տրամաբանական էր Dashboard-ը ինտեգրել GitLab-ի հաշիվներին։
Նշեմ նաև, որ մենք օգտագործում ենք NGINX Ingress: Եթե դուք աշխատում եք ուրիշների հետ մուտքային լուծումներ, թույլտվության համար ձեզ հարկավոր է ինքնուրույն գտնել անոտացիաների անալոգներ:
Ինտեգրման փորձեր
Վահանակի տեղադրում
ՈւշադրությունԵթե պատրաստվում եք կրկնել ստորև նշված քայլերը, ապա ավելորդ գործողություններից խուսափելու համար նախ կարդացեք հաջորդ ենթավերնագիրը:
Քանի որ մենք օգտագործում ենք այս ինտեգրումը բազմաթիվ տեղադրումներում, մենք ավտոմատացրել ենք դրա տեղադրումը: Դրա համար անհրաժեշտ աղբյուրները հրապարակված են հատուկ GitHub պահոց. Դրանք հիմնված են մի փոքր փոփոխված YAML կոնֆիգուրացիաների վրա Պաշտպանական վահանակի պաշտոնական պահոց, ինչպես նաև արագ տեղակայման Bash սցենար:
Սցենարը տեղադրում է Dashboard-ը կլաստերում և կարգավորում այն GitLab-ի հետ ինտեգրվելու համար.
$ ./ctl.sh
Usage: ctl.sh [OPTION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Install kubernetes-dashboard to Kubernetes cluster.
Mandatory arguments:
-i, --install install into 'kube-system' namespace
-u, --upgrade upgrade existing installation, will reuse password and host names
-d, --delete remove everything, including the namespace
--gitlab-url set gitlab url with schema (https://gitlab.example.com)
--oauth2-id set OAUTH2_PROXY_CLIENT_ID from gitlab
--oauth2-secret set OAUTH2_PROXY_CLIENT_SECRET from gitlab
--dashboard-url set dashboard url without schema (dashboard.example.com)
Optional arguments:
-h, --help output this message
Այնուամենայնիվ, նախքան այն օգտագործելը, դուք պետք է գնաք GitLab՝ ադմինիստրատորի տարածք → Ծրագրեր - և ավելացնեք նոր հավելված ապագա վահանակի համար: Եկեք այն անվանենք «kubernetes dashboard».
Այն ավելացնելու արդյունքում GitLab-ը կտրամադրի հեշերը.
Դրանք են, որոնք օգտագործվում են որպես սցենարի փաստարկներ: Արդյունքում, տեղադրումն ունի հետևյալ տեսքը.
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1/1 Running 0 14s
oauth2-proxy-5586ccf95c-czp2v 1/1 Running 0 14s
Այնուամենայնիվ, վաղ թե ուշ ամեն ինչ կսկսվի թույլտվությունը անմիջապես չի գործի! Փաստն այն է, որ օգտագործված պատկերում (մյուս պատկերներում իրավիճակը նման է) հետադարձ կապում վերահղում բռնելու գործընթացը սխալ է իրականացվում։ Այս հանգամանքը հանգեցնում է նրան, որ oauth-ը ջնջում է cookie-ը, որը oauth-ն ինքն է տրամադրում մեզ...
Խնդիրը լուծվում է՝ ստեղծելով ձեր սեփական oauth պատկերը patch-ով:
Patch oauth և նորից տեղադրեք
Դա անելու համար մենք կօգտագործենք հետևյալ Dockerfile-ը.
diff --git a/dist.sh b/dist.sh
index a00318b..92990d4 100755
--- a/dist.sh
+++ b/dist.sh
@@ -14,25 +14,13 @@ goversion=$(go version | awk '{print $3}')
sha256sum=()
echo "... running tests"
-./test.sh
+#./test.sh
-for os in windows linux darwin; do
- echo "... building v$version for $os/$arch"
- EXT=
- if [ $os = windows ]; then
- EXT=".exe"
- fi
- BUILD=$(mktemp -d ${TMPDIR:-/tmp}/oauth2_proxy.XXXXXX)
- TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
- FILENAME="oauth2_proxy-$version.$os-$arch$EXT"
- GOOS=$os GOARCH=$arch CGO_ENABLED=0
- go build -ldflags="-s -w" -o $BUILD/$TARGET/$FILENAME || exit 1
- pushd $BUILD/$TARGET
- sha256sum+=("$(shasum -a 256 $FILENAME || exit 1)")
- cd .. && tar czvf $TARGET.tar.gz $TARGET
- mv $TARGET.tar.gz $DIR/dist
- popd
-done
+os='linux'
+echo "... building v$version for $os/$arch"
+TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
+GOOS=$os GOARCH=$arch CGO_ENABLED=0
+ go build -ldflags="-s -w" -o ./dist/oauth2_proxy || exit 1
checksum_file="sha256sum.txt"
cd $DIR/dists
diff --git a/oauthproxy.go b/oauthproxy.go
index 21e5dfc..df9101a 100644
--- a/oauthproxy.go
+++ b/oauthproxy.go
@@ -381,7 +381,9 @@ func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code
if redirect_url == p.SignInPath {
redirect_url = "/"
}
-
+ if req.FormValue("rd") != "" {
+ redirect_url = req.FormValue("rd")
+ }
t := struct {
ProviderName string
SignInMessage string
Այժմ դուք կարող եք ստեղծել պատկերը և այն մղել մեր GitLab-ի մեջ: Հաջորդը manifests/kube-dashboard-oauth2-proxy.yaml նշեք ցանկալի պատկերի օգտագործումը (փոխարինեք այն ձեր սեփականով).
image: docker.io/colemickens/oauth2_proxy:latest
Եթե դուք ունեք գրանցամատյան, որը փակված է թույլտվությամբ, մի մոռացեք ավելացնել նկարների համար գաղտնիքի օգտագործումը.
Ժամանակն է գնալ Dashboard և գտնել բավականին հնացած մուտքի կոճակ.
Դրա վրա սեղմելուց հետո GitLab-ը կողջունի մեզ՝ առաջարկելով մուտք գործել իր սովորական էջ (իհարկե, եթե նախկինում մուտք չենք գործել այնտեղ).
Մենք մուտք ենք գործում GitLab հավատարմագրերով, և ամեն ինչ արված է.
Վահանակի առանձնահատկությունների մասին
Եթե դուք ծրագրավորող եք, ով նախկինում չի աշխատել Kubernetes-ի հետ, կամ պարզապես ինչ-ինչ պատճառներով նախկինում չեք հանդիպել Dashboard-ին, ես կներկայացնեմ դրա որոշ հնարավորություններ:
Նախ, դուք կարող եք տեսնել, որ «ամեն ինչ կանաչ է».
Ավելի մանրամասն տվյալներ հասանելի են նաև pods-ի համար, ինչպիսիք են միջավայրի փոփոխականները, ներբեռնված պատկերը, գործարկման փաստարկները և դրանց վիճակը.
Տեղակայումները տեսանելի կարգավիճակներ ունեն.
...և այլ մանրամասներ.
... և կա նաև տեղակայումը մասշտաբավորելու հնարավորություն.
Այս գործողության արդյունքը.
Հոդվածի սկզբում արդեն հիշատակված այլ օգտակար հատկությունների թվում է տեղեկամատյանների դիտումը.
... և ընտրված պատի կոնտեյների վահանակ մուտք գործելու գործառույթը.
Օրինակ, դուք կարող եք նաև դիտել հանգույցների սահմանափակումները / հարցումները.
Իհարկե, սրանք վահանակի բոլոր հնարավորությունները չեն, բայց հուսով եմ, որ դուք կհասկանաք ընդհանուր գաղափարը։
Ինտեգրման և վահանակի թերությունները
Նկարագրված ինտեգրման մեջ չկա մուտքի վերահսկում. Դրա միջոցով GitLab-ի ցանկացած մուտք ունեցող բոլոր օգտվողները մուտք են ստանում Dashboard: Նրանք նույն մուտքն ունեն հենց «Dashboard»-ում, որը համապատասխանում է հենց «Dashboard»-ի իրավունքներին, որոնք սահմանված են RBAC-ում. Ակնհայտ է, որ սա բոլորին հարմար չէ, բայց մեր դեպքում դա բավարար է։
Ինքնին վահանակի նկատելի թերությունների թվում ես նշում եմ հետևյալը.
անհնար է մտնել սկզբնական կոնտեյների վահանակ.
Անհնար է խմբագրել Deployments-ը և StatefulSets-ը, չնայած դա կարող է շտկվել ClusterRole-ում.
Dashboard-ի համատեղելիությունը Kubernetes-ի վերջին տարբերակների և նախագծի ապագայի հետ հարցեր է առաջացնում:
Վերջին խնդիրը հատուկ ուշադրության է արժանի.
Վահանակի կարգավիճակը և այլընտրանքները
Dashboard-ի համատեղելիության աղյուսակ Kubernetes-ի թողարկումների հետ՝ ներկայացված նախագծի վերջին տարբերակում (v1.10.1), ոչ շատ ուրախ.
Չնայած դրան, կա (արդեն ընդունվել է հունվարին) PR #3476, որը հայտարարում է K8s 1.13-ի աջակցության մասին: Բացի այդ, նախագծի խնդիրների շարքում կարող եք հղումներ գտնել վահանակի հետ աշխատող օգտատերերի մասին K8s 1.14-ում: Վերջապես, պարտավորվում է նախագծի կոդի բազայի մեջ մի կանգ առեք: Այսպիսով, (առնվազն!) նախագծի իրական կարգավիճակն այնքան էլ վատ չէ, որքան կարող է առաջին հերթին թվալ համատեղելիության պաշտոնական աղյուսակից:
Վերջապես, Dashboard-ին այլընտրանքներ կան: Նրանց մեջ:
K8Dash — երիտասարդ ինտերֆեյս (առաջին պարտավորությունները թվագրվում են այս տարվա մարտին), որն արդեն առաջարկում է լավ հնարավորություններ, ինչպիսիք են կլաստերի ներկայիս կարգավիճակի տեսողական ներկայացումը և դրա օբյեկտների կառավարումը: Տեղադրված է որպես «իրական ժամանակի ինտերֆեյս», քանի որ ավտոմատ կերպով թարմացնում է ցուցադրված տվյալները՝ չպահանջելով, որ դուք թարմացնեք էջը բրաուզերում:
OpenShift կոնսոլ - վեբ ինտերֆեյս Red Hat OpenShift-ից, որը, սակայն, ձեր կլաստերին կբերի նախագծի այլ զարգացումներ, որը ոչ բոլորի համար է հարմար:
Կուբերնատոր հետաքրքիր նախագիծ է, որը ստեղծվել է որպես ավելի ցածր մակարդակի (քան Dashboard) ինտերֆեյս՝ բոլոր կլաստերի օբյեկտները դիտելու ունակությամբ: Այնուամենայնիվ, կարծես թե դրա զարգացումը կանգ է առել:
Polaris - հենց մյուս օրը հայտարարեց նախագիծ, որը միավորում է վահանակի գործառույթները (ցույց է տալիս կլաստերի ներկա վիճակը, բայց չի կառավարում դրա օբյեկտները) և ավտոմատ «լավագույն փորձի վավերացում» (ստուգում է կլաստերը՝ դրանում աշխատող տեղակայումների կազմաձևերի ճշգրտության համար):
Եզրակացությունների փոխարեն
Dashboard-ը ստանդարտ գործիք է Kubernetes կլաստերների համար, որոնք մենք սպասարկում ենք: Դրա ինտեգրումը GitLab-ի հետ նույնպես դարձել է մեր լռելյայն տեղադրման մի մասը, քանի որ շատ մշակողներ ոգևորված են այս վահանակի հետ ունեցած իրենց հնարավորություններով:
Kubernetes Dashboard-ը պարբերաբար այլընտրանքներ ունի բաց կոդով համայնքից (և մենք ուրախ ենք դրանք դիտարկել), բայց այս փուլում մենք մնում ենք այս լուծմանը: