Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Kubernetes Dashboard amûrek hêsan-karanîna ye ku ji bo bidestxistina agahdariya nûjen di derheqê komek xebitandinê û rêveberiya hindiktirîn a wê de ye. Dema ku gihîştina van kapasîteyan ne tenê ji hêla rêvebiran / endezyarên DevOps-ê ve, lê ji hêla wan ên ku kêm bi konsolê ve girêdayî ne û/an jî niyeta wan tune ku bi hemî tevliheviyên danûstendina bi kubectl û re mijûl bibin, hûn hîn bêtir qîmet dikin. karûbarên din. Ev bi me re çêbû: pêşdebiran dixwest ku zû bigihîjin navbeynkariya webê ya Kubernetes, û ji ber ku em GitLab bikar tînin, çareserî bi xwezayî hat.

Çima ev e?

Dibe ku pêşdebirên rasterast ji bo karên debugkirinê bi amûrek mîna K8s Dashboard re eleqedar bibin. Carinan hûn dixwazin têketin û çavkaniyan bibînin, û carinan jî podokan bikujin, Dabeşkirin/StatefulSets mezin bikin û tewra biçin konsolê konteynerê (di heman demê de daxwaz hene ku, lêbelê, rêyek din jî heye - mînakî, bi riya kubectl-debug).

Wekî din, ji bo rêveberan demek psîkolojîk heye dema ku ew dixwazin li komê binihêrin - bibînin ku "her tişt kesk e", û bi vî rengî xwe piştrast bikin ku "her tişt dixebite" (ku, bê guman, pir têkildar e ... lê ev li derveyî çarçoveya gotarê ye).

Wekî pergala CI ya standard me heye sepandin GitLab: hemî pêşdebiran jî wê bikar tînin. Ji ber vê yekê, ji bo peydakirina gihîştina wan, mentiqî bû ku Dashboard bi hesabên GitLab re were yek kirin.

Ez ê her weha destnîşan bikim ku em NGINX Ingress bikar tînin. Ger hûn bi kesên din re bixebitin çareseriyên ketinê, hûn ê hewce bikin ku ji bo destûrnameyê serbixwe analogên şîroveyan bibînin.

Hewl didin entegrasyonê

Sazkirina dashboardê

Haydar: Heke hûn ê gavên jêrîn dubare bikin, wê hingê - ji bo ku ji operasyonên nehewce dûr bikevin - pêşî sernavê jêrîn bixwînin.

Ji ber ku em vê entegrasyonê di gelek saziyan de bikar tînin, me sazkirina wê otomatîk kiriye. Çavkaniyên ku ji bo vê yekê hewce ne têne weşandin depoya taybetî ya GitHub. Ew li ser bingeha mîhengên YAML-ê yên piçûk hatine guheztin ji depoya fermî Dashboard, û her weha skrîptek Bash ji bo bicîhkirina bilez.

Skrîpt Dashboardê di komê de saz dike û wê ji bo entegrasyonê bi GitLab re mîheng dike:

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

Lêbelê, berî ku hûn bikar bînin, hûn hewce ne ku biçin GitLab: Qada Rêveber → Serlêdan - û ji bo panela pêşerojê serîlêdanek nû lê zêde bikin. Ka em jê re bibêjin "dashboarda kubernetes":

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Di encama lê zêdekirina wê de, GitLab dê hashes peyda bike:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Ew in yên ku wekî argumanên senaryoyê têne bikar anîn. Wekî encamek, sazkirinê wiha xuya dike:

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

Piştî wê, em kontrol bikin ku her tişt dest pê kir:

$ 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

Lêbelê, zû an dereng dê her tişt dest pê bike destûr dê tavilê nexebite! Rastî ev e ku di wêneya hatî bikar anîn de (rewşa di wêneyên din de mîna hev e) pêvajoya girtina beralîkirina di vegerê de bi xeletî tête bicîh kirin. Ev rewş rê li ber vê yekê vedike ku oauth cookieya ku oauth bixwe ji me re peyda dike ji holê radike...

Pirsgirêk bi avakirina wêneya xweya oauth ya bi patchê ve tê çareser kirin.

Patch oauth û ji nû ve saz bikin

Ji bo vê yekê, em ê Dockerfile jêrîn bikar bînin:

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" ]

Û va ye ku rd.patch patch bi xwe wekî xuya dike

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

Naha hûn dikarin wêneyê ava bikin û têxin nav GitLab me. Next in manifests/kube-dashboard-oauth2-proxy.yaml karanîna wêneya xwestinê destnîşan bikin (wê bi ya xwe veguherînin):

 image: docker.io/colemickens/oauth2_proxy:latest

Ger qeydek we heye ku ji hêla destûrnameyê ve hatî girtin, ji bîr nekin ku hûn ji bo kişandina wêneyan karanîna nepeniyek zêde bikin:

      imagePullSecrets:
     - name: gitlab-registry

... û ji bo qeydê xwe veşartî lê zêde bike:

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

Xwendevanê baldar dê bibîne ku rêzika dirêj a li jor bingeh64 e ji konfigurasyonê:

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

Ev daneyên bikarhênerê li GitLab e, koda Kubernetes dê wêneyê ji qeydê derxe.

Piştî ku her tişt qediya, hûn dikarin bi fermanê sazkirina Dashboardê ya heyî (rast naxebite) rakin:

$ ./ctl.sh -d

... û her tiştî dîsa saz bikin:

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

Wext e ku hûn biçin Dashboard û bişkokek têketinê ya kevnar bibînin:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Piştî ku li ser wê bikirtînin, GitLab dê silavê bide me, pêşniyar dike ku hûn têkevin rûpela xwe ya asayî (bê guman, heke me berê li wir têketî nebûne):

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Em bi pêbaweriyên GitLab re têkevin - û her tişt pêk tê:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Li ser taybetmendiyên Dashboard

Ger hûn pêşdebirek in ku berê bi Kubernetes re nexebitî, an jî tenê ji ber hin sedeman berê bi Dashboard re rûbirû nebûye, ez ê hin kapasîteyên wê diyar bikim.

Pêşîn, hûn dikarin bibînin ku "her tişt kesk e":

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Daneyên berfirehtir ji bo podan jî hene, wek guherbarên jîngehê, wêneya dakêşandî, argumanên destpêkirinê, û rewşa wan:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Sazkirin xwedî statûyên xuya ne:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

...û hûrguliyên din:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

... û di heman demê de şiyana mezinkirina bicîhkirinê jî heye:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Encama vê operasyonê:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Di nav taybetmendiyên din ên bikêr de ku berê di destpêka gotarê de hatine behs kirin, dîtina têketin e:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

... û fonksiyona têketina konsolê konteynerê ya podê hilbijartî:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Mînakî, hûn dikarin li ser sînoran / daxwazên li ser girêkan jî binêrin:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Bê guman, ev ne hemî kapasîteyên panelê ne, lê ez hêvî dikim ku hûn ramana gelemperî bistînin.

Dezawantajên entegrasyonê û Dashboard

Di entegrasyona diyarkirî de tune kontrola gihîştinê. Bi wê re, hemî bikarhênerên ku bigihîjin GitLab gihîştina Dashboard-ê digirin. Di Dashboard bixwe de heman gihîştina wan heye, li gorî mafên Dashboard bixwe, ku di RBAC de têne diyarkirin. Eşkere ye ku ev ji bo her kesî ne guncaw e, lê ji bo doza me bes derket.

Di nav dezawantajên berbiçav ên di Dashboard bixwe de, ez van tiştan destnîşan dikim:

  • ne gengaz e ku meriv bikeve konsolê konteynera destpêkê;
  • ne gengaz e ku meriv Deployments û StatefulSets biguherîne, her çend ev dikare di ClusterRole de were rast kirin;
  • Lihevhatina Dashboard bi guhertoyên herî dawî yên Kubernetes û paşeroja projeyê pirsan derdixe holê.

Pirsgirêka dawî baldariyek taybetî heq dike.

Rewş û alternatîfên Dashboard

Tabloya lihevhatina dashboardê bi berdanên Kubernetes re, ku di guhertoya herî dawî ya projeyê de hatî pêşkêş kirin (v1.10.1), ne pir kêfxweş:

Yekbûna Bikarhênerên Kubernetes Dashboard û GitLab

Tevî vê yekê, heye (jixwe di meha Çile de hate pejirandin) PR # 3476, ku piştgiriya K8s 1.13 ragihand. Wekî din, di nav pirsgirêkên projeyê de hûn dikarin referansên bikarhênerên ku bi panelê re di K8s 1.14 de dixebitin bibînin. Paşan, dike di binyada koda projeyê de nesekine. Ji ber vê yekê (kêmtir!) Rewşa rastîn a projeyê ne ew qas xirab e ku ew yekem ji tabloya lihevhatina fermî xuya dike.

Di dawiyê de, alternatîfên Dashboard hene. Di nav wan de:

  1. K8Dash - navgînek ciwan (komên yekem ji Adara vê salê vedigerin), ku jixwe taybetmendiyên baş pêşkêşî dike, wek nimûne nûneriya dîtbarî ya rewşa heyî ya komê û rêveberiya tiştên wê. Wekî "navberek rast-dem" tête danîn, ji ber ku bêyî ku hewce bike ku hûn rûpelê di gerokê de nûve bikin, bixweber daneyên xuyangkirî nûve dike.
  2. Konsola OpenShift - navgînek malperê ji Red Hat OpenShift, ku, lêbelê, dê pêşkeftinên din ên projeyê bîne koma we, ku ji bo her kesî ne maqûl e.
  3. Kubernator projeyek balkêş e, ku wekî navgînek nizm (ji Dashboard) bi şiyana dîtina hemî tiştên komê hatî afirandin. Lêbelê, wusa dixuye ku pêşveçûna wê rawestiyaye.
  4. Polaris - tenê roja din ragihand projeyek ku fonksiyonên panelê pêk tîne (rewşa heyî ya komê nîşan dide, lê tiştên wê îdare nake) û otomatîkî "erêkirina pratîkên çêtirîn" (komê ji bo rastbûna veavakirinên Dabeşkirinên ku tê de têne xebitandin kontrol dike).

Di şûna encam de

Dashboard ji bo komên Kubernetes ên ku em xizmet dikin amûrek standard e. Yekbûna wê ya bi GitLab re jî bûye beşek ji sazkirina meya xwerû, ji ber ku gelek pêşdebiran ji kapasîteyên ku bi vê panelê re hene kêfxweş in.

Kubernetes Dashboard bi awayekî periyodîk alternatîfên ji civata Çavkaniya Vekirî heye (û em kêfxweş in ku wan bifikirin), lê di vê qonaxê de em bi vê çareseriyê re dimînin.

PS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment