Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

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».

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Այն ավելացնելու արդյունքում GitLab-ը կտրամադրի հեշերը.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Դրանք են, որոնք օգտագործվում են որպես սցենարի փաստարկներ: Արդյունքում, տեղադրումն ունի հետևյալ տեսքը.

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

Դրանից հետո եկեք ստուգենք, որ ամեն ինչ սկսվեց.

$ 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-ը.

FROM golang:1.9-alpine3.7
WORKDIR /go/src/github.com/bitly/oauth2_proxy

RUN apk --update add make git build-base curl bash ca-certificates wget 
&& update-ca-certificates 
&& curl -sSO https://raw.githubusercontent.com/pote/gpm/v1.4.0/bin/gpm 
&& chmod +x gpm 
&& mv gpm /usr/local/bin
RUN git clone https://github.com/bitly/oauth2_proxy.git . 
&& git checkout bfda078caa55958cc37dcba39e57fc37f6a3c842  
ADD rd.patch .
RUN patch -p1 < rd.patch 
&& ./dist.sh

FROM alpine:3.7
RUN apk --update add curl bash  ca-certificates && update-ca-certificates
COPY --from=0 /go/src/github.com/bitly/oauth2_proxy/dist/ /bin/

EXPOSE 8080 4180
ENTRYPOINT [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]

Եվ ահա, թե ինչ տեսք ունի rd.patch-ն ինքնին

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

Եթե ​​դուք ունեք գրանցամատյան, որը փակված է թույլտվությամբ, մի մոռացեք ավելացնել նկարների համար գաղտնիքի օգտագործումը.

      imagePullSecrets:
     - name: gitlab-registry

... և ավելացրեք գաղտնիքը ռեեստրի համար.

---
apiVersion: v1
data:
 .dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
 annotations:
 name: gitlab-registry
 namespace: kube-system
type: kubernetes.io/dockercfg

Ուշադիր ընթերցողը կտեսնի, որ վերևի երկար տողը base64 է կազմաձևից.

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "[email protected]"
}
}

Սա GitLab-ի օգտվողի տվյալներն են, Kubernetes կոդը կհանի պատկերը ռեեստրից:

Ամեն ինչ արվածից հետո կարող եք հեռացնել ընթացիկ (ճիշտ չի աշխատում) վահանակի տեղադրումը հրամանով.

$ ./ctl.sh -d

... և նորից տեղադրեք ամեն ինչ.

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

Ժամանակն է գնալ Dashboard և գտնել բավականին հնացած մուտքի կոճակ.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Դրա վրա սեղմելուց հետո GitLab-ը կողջունի մեզ՝ առաջարկելով մուտք գործել իր սովորական էջ (իհարկե, եթե նախկինում մուտք չենք գործել այնտեղ).

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Մենք մուտք ենք գործում GitLab հավատարմագրերով, և ամեն ինչ արված է.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Վահանակի առանձնահատկությունների մասին

Եթե ​​դուք ծրագրավորող եք, ով նախկինում չի աշխատել Kubernetes-ի հետ, կամ պարզապես ինչ-ինչ պատճառներով նախկինում չեք հանդիպել Dashboard-ին, ես կներկայացնեմ դրա որոշ հնարավորություններ:

Նախ, դուք կարող եք տեսնել, որ «ամեն ինչ կանաչ է».

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Ավելի մանրամասն տվյալներ հասանելի են նաև pods-ի համար, ինչպիսիք են միջավայրի փոփոխականները, ներբեռնված պատկերը, գործարկման փաստարկները և դրանց վիճակը.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Տեղակայումները տեսանելի կարգավիճակներ ունեն.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

...և այլ մանրամասներ.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

... և կա նաև տեղակայումը մասշտաբավորելու հնարավորություն.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Այս գործողության արդյունքը.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Հոդվածի սկզբում արդեն հիշատակված այլ օգտակար հատկությունների թվում է տեղեկամատյանների դիտումը.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

... և ընտրված պատի կոնտեյների վահանակ մուտք գործելու գործառույթը.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Օրինակ, դուք կարող եք նաև դիտել հանգույցների սահմանափակումները / հարցումները.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Իհարկե, սրանք վահանակի բոլոր հնարավորությունները չեն, բայց հուսով եմ, որ դուք կհասկանաք ընդհանուր գաղափարը։

Ինտեգրման և վահանակի թերությունները

Նկարագրված ինտեգրման մեջ չկա մուտքի վերահսկում. Դրա միջոցով GitLab-ի ցանկացած մուտք ունեցող բոլոր օգտվողները մուտք են ստանում Dashboard: Նրանք նույն մուտքն ունեն հենց «Dashboard»-ում, որը համապատասխանում է հենց «Dashboard»-ի իրավունքներին, որոնք սահմանված են RBAC-ում. Ակնհայտ է, որ սա բոլորին հարմար չէ, բայց մեր դեպքում դա բավարար է։

Ինքնին վահանակի նկատելի թերությունների թվում ես նշում եմ հետևյալը.

  • անհնար է մտնել սկզբնական կոնտեյների վահանակ.
  • Անհնար է խմբագրել Deployments-ը և StatefulSets-ը, չնայած դա կարող է շտկվել ClusterRole-ում.
  • Dashboard-ի համատեղելիությունը Kubernetes-ի վերջին տարբերակների և նախագծի ապագայի հետ հարցեր է առաջացնում:

Վերջին խնդիրը հատուկ ուշադրության է արժանի.

Վահանակի կարգավիճակը և այլընտրանքները

Dashboard-ի համատեղելիության աղյուսակ Kubernetes-ի թողարկումների հետ՝ ներկայացված նախագծի վերջին տարբերակում (v1.10.1), ոչ շատ ուրախ.

Kubernetes Dashboard-ի և GitLab-ի օգտատերերի ինտեգրում

Չնայած դրան, կա (արդեն ընդունվել է հունվարին) PR #3476, որը հայտարարում է K8s 1.13-ի աջակցության մասին: Բացի այդ, նախագծի խնդիրների շարքում կարող եք հղումներ գտնել վահանակի հետ աշխատող օգտատերերի մասին K8s 1.14-ում: Վերջապես, պարտավորվում է նախագծի կոդի բազայի մեջ մի կանգ առեք: Այսպիսով, (առնվազն!) նախագծի իրական կարգավիճակն այնքան էլ վատ չէ, որքան կարող է առաջին հերթին թվալ համատեղելիության պաշտոնական աղյուսակից:

Վերջապես, Dashboard-ին այլընտրանքներ կան: Նրանց մեջ:

  1. K8Dash — երիտասարդ ինտերֆեյս (առաջին պարտավորությունները թվագրվում են այս տարվա մարտին), որն արդեն առաջարկում է լավ հնարավորություններ, ինչպիսիք են կլաստերի ներկայիս կարգավիճակի տեսողական ներկայացումը և դրա օբյեկտների կառավարումը: Տեղադրված է որպես «իրական ժամանակի ինտերֆեյս», քանի որ ավտոմատ կերպով թարմացնում է ցուցադրված տվյալները՝ չպահանջելով, որ դուք թարմացնեք էջը բրաուզերում:
  2. OpenShift կոնսոլ - վեբ ինտերֆեյս Red Hat OpenShift-ից, որը, սակայն, ձեր կլաստերին կբերի նախագծի այլ զարգացումներ, որը ոչ բոլորի համար է հարմար:
  3. Կուբերնատոր հետաքրքիր նախագիծ է, որը ստեղծվել է որպես ավելի ցածր մակարդակի (քան Dashboard) ինտերֆեյս՝ բոլոր կլաստերի օբյեկտները դիտելու ունակությամբ: Այնուամենայնիվ, կարծես թե դրա զարգացումը կանգ է առել:
  4. Polaris - հենց մյուս օրը հայտարարեց նախագիծ, որը միավորում է վահանակի գործառույթները (ցույց է տալիս կլաստերի ներկա վիճակը, բայց չի կառավարում դրա օբյեկտները) և ավտոմատ «լավագույն փորձի վավերացում» (ստուգում է կլաստերը՝ դրանում աշխատող տեղակայումների կազմաձևերի ճշգրտության համար):

Եզրակացությունների փոխարեն

Dashboard-ը ստանդարտ գործիք է Kubernetes կլաստերների համար, որոնք մենք սպասարկում ենք: Դրա ինտեգրումը GitLab-ի հետ նույնպես դարձել է մեր լռելյայն տեղադրման մի մասը, քանի որ շատ մշակողներ ոգևորված են այս վահանակի հետ ունեցած իրենց հնարավորություններով:

Kubernetes Dashboard-ը պարբերաբար այլընտրանքներ ունի բաց կոդով համայնքից (և մենք ուրախ ենք դրանք դիտարկել), բայց այս փուլում մենք մնում ենք այս լուծմանը:

PS

Կարդացեք նաև մեր բլոգում.

Source: www.habr.com

Добавить комментарий