Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Dashibodi ya Kubernetes ni zana rahisi kutumia ya kupata taarifa za kisasa kuhusu nguzo yako inayoendesha na kuisimamia kwa juhudi kidogo. Unaanza kuithamini zaidi wakati ufikiaji wa uwezo huu unahitajika sio tu na wasimamizi/wahandisi wa DevOps, lakini pia na wale ambao hawajazoea kiweko na/au hawana nia ya kushughulikia ugumu wote wa kuingiliana na kubectl na. huduma zingine. Hii ilitokea kwetu: watengenezaji walitaka ufikiaji wa haraka wa kiolesura cha wavuti cha Kubernetes, na kwa kuwa tunatumia GitLab, suluhisho lilikuja kwa kawaida.

Kwa nini hii?

Wasanidi wa moja kwa moja wanaweza kupendezwa na zana kama Dashibodi ya K8s kwa kazi za utatuzi. Wakati mwingine unataka kutazama kumbukumbu na rasilimali, na wakati mwingine kuua maganda, kupima Usambazaji/StatefulSets, na hata kwenda kwenye koni ya kontena (pia kuna maombi ambayo, hata hivyo, kuna njia nyingine - kwa mfano, kupitia kubectl-debug).

Kwa kuongezea, kuna wakati wa kisaikolojia kwa wasimamizi wakati wanataka kuangalia nguzo - kuona kwamba "kila kitu ni kijani", na hivyo kujihakikishia kuwa "kila kitu kinafanya kazi" (ambayo, kwa kweli, ni jamaa sana ... lakini hii ni zaidi ya upeo wa makala).

Kama mfumo wa kawaida wa CI tunayo inatumika GitLab: watengenezaji wote wanaitumia pia. Kwa hivyo, ili kuwapa ufikiaji, ilikuwa ni busara kuunganisha Dashibodi na akaunti za GitLab.

Pia nitatambua kuwa tunatumia NGINX Ingress. Ikiwa unafanya kazi na wengine ufumbuzi wa ingress, utahitaji kujitegemea kupata analogi za maelezo kwa idhini.

Inajaribu kujumuisha

Ufungaji wa dashibodi

Attention: Ikiwa utarudia hatua zilizo hapa chini, basi - ili kuepuka shughuli zisizo za lazima - kwanza soma kwa kichwa kidogo kinachofuata.

Kwa kuwa tunatumia ushirikiano huu katika mitambo mingi, tumeweka usakinishaji wake kiotomatiki. Vyanzo vinavyohitajika kwa hili vinachapishwa katika hazina maalum ya GitHub. Zinatokana na usanidi wa YAML uliobadilishwa kidogo kutoka hazina rasmi ya Dashibodi, pamoja na hati ya Bash ya kupelekwa haraka.

Hati husanikisha Dashibodi kwenye nguzo na kuisanidi ili kuunganishwa na 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

Walakini, kabla ya kuitumia, unahitaji kwenda kwa GitLab: Eneo la Msimamizi β†’ Maombi - na uongeze programu mpya ya paneli ya baadaye. Wacha tuiite "dashibodi ya kubernetes":

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Kama matokeo ya kuiongeza, GitLab itatoa heshi:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Ndio zinazotumika kama hoja kwa maandishi. Kama matokeo, ufungaji unaonekana kama hii:

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

Baada ya hayo, hebu tuangalie ikiwa kila kitu kilianza:

$ 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

Hivi karibuni au baadaye kila kitu kitaanza, hata hivyo idhini haitafanya kazi mara moja! Ukweli ni kwamba katika picha iliyotumiwa (hali katika picha zingine ni sawa) mchakato wa kukamata uelekezaji katika urejeshaji wa simu unatekelezwa vibaya. Hali hii inaongoza kwa ukweli kwamba kiapo kinafuta kidakuzi ambacho kiapo chenyewe hutupatia...

Tatizo linatatuliwa kwa kujenga picha yako ya kiapo na kiraka.

Bandika kiapo na usakinishe upya

Ili kufanya hivyo, tutatumia Dockerfile ifuatayo:

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

Na hapa ndivyo rd.patch kiraka yenyewe inaonekana

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

Sasa unaweza kuunda picha na kuisukuma kwenye GitLab yetu. Inayofuata manifests/kube-dashboard-oauth2-proxy.yaml onyesha matumizi ya picha inayotaka (ibadilishe na yako mwenyewe):

 image: docker.io/colemickens/oauth2_proxy:latest

Ikiwa una sajili ambayo imefungwa kwa idhini, usisahau kuongeza matumizi ya siri kwa picha za kuvuta:

      imagePullSecrets:
     - name: gitlab-registry

... na ongeza siri yenyewe kwa Usajili:

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

Msomaji makini ataona kuwa kamba ndefu hapo juu ni base64 kutoka kwa usanidi:

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

Hii ni data ya mtumiaji katika GitLab, msimbo wa Kubernetes utavuta picha kutoka kwa usajili.

Baada ya kila kitu kufanywa, unaweza kuondoa sasa (haifanyi kazi kwa usahihi) usakinishaji wa Dashibodi kwa amri:

$ ./ctl.sh -d

... na usakinishe kila kitu tena:

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

Ni wakati wa kwenda kwenye Dashibodi na kutafuta kitufe cha kuingia cha kizamani:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Baada ya kubofya juu yake, GitLab itatusalimia, ikitoa kuingia kwenye ukurasa wake wa kawaida (bila shaka, ikiwa hatujaingia hapo awali):

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Tunaingia na vitambulisho vya GitLab - na kila kitu kimefanywa:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Kuhusu vipengele vya Dashibodi

Ikiwa wewe ni msanidi programu ambaye hujawahi kufanya kazi na Kubernetes hapo awali, au kwa sababu fulani tu hujakutana na Dashibodi hapo awali, nitaonyesha baadhi ya uwezo wake.

Kwanza, unaweza kuona kwamba "kila kitu ni kijani":

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Data ya kina zaidi inapatikana pia kwa maganda, kama vile vigeu vya mazingira, picha iliyopakuliwa, hoja za uzinduzi, na hali zao:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Usambazaji una hali zinazoonekana:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

... na maelezo mengine:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

... na pia kuna uwezo wa kuongeza upelekaji:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Matokeo ya operesheni hii:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Miongoni mwa vipengele vingine muhimu vilivyotajwa tayari mwanzoni mwa makala ni kutazama kumbukumbu:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

... na kazi ya kuingia kwenye koni ya kontena ya pod iliyochaguliwa:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Kwa mfano, unaweza pia kuangalia mipaka/maombi kwenye nodi:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Bila shaka, haya sio uwezo wote wa jopo, lakini natumaini kwamba utapata wazo la jumla.

Hasara za ushirikiano na Dashibodi

Katika ushirikiano ulioelezwa hakuna udhibiti wa ufikiaji. Kwa hiyo, watumiaji wote walio na ufikiaji wowote wa GitLab wanapata ufikiaji wa Dashibodi. Wana ufikiaji sawa katika Dashibodi yenyewe, inayolingana na haki za Dashibodi yenyewe, ambayo zimefafanuliwa katika RBAC. Kwa wazi, hii haifai kwa kila mtu, lakini kwa upande wetu iligeuka kuwa ya kutosha.

Miongoni mwa ubaya unaoonekana kwenye Dashibodi yenyewe, naona yafuatayo:

  • haiwezekani kuingia kwenye console ya chombo cha init;
  • haiwezekani kuhariri Deployments na StatefulSets, ingawa hii inaweza kurekebishwa katika ClusterRole;
  • Utangamano wa Dashibodi na matoleo mapya zaidi ya Kubernetes na mustakabali wa mradi huzua maswali.

Tatizo la mwisho linastahili tahadhari maalum.

Hali ya dashibodi na njia mbadala

Jedwali la uoanifu la Dashibodi na matoleo ya Kubernetes, yaliyowasilishwa katika toleo jipya zaidi la mradi (v1.10.1), sio furaha sana:

Muunganisho wa Dashibodi ya Kubernetes na watumiaji wa GitLab

Pamoja na hayo, kuna (tayari imepitishwa Januari) PR # 3476, ambayo inatangaza msaada kwa K8s 1.13. Kwa kuongeza, kati ya masuala ya mradi unaweza kupata marejeleo kwa watumiaji wanaofanya kazi na jopo katika K8s 1.14. Hatimaye, anajituma kwenye msingi wa msimbo wa mradi usisimame. Kwa hivyo (angalau!) hali halisi ya mradi sio mbaya kama inavyoweza kuonekana kutoka kwa jedwali rasmi la utangamano.

Hatimaye, kuna njia mbadala za Dashibodi. Kati yao:

  1. K8Dashi - kiolesura chachanga (azima ya kwanza ni ya Machi mwaka huu), ambayo tayari inatoa huduma nzuri, kama vile uwakilishi wa kuona wa hali ya sasa ya nguzo na usimamizi wa vitu vyake. Imewekwa kama "kiolesura cha wakati halisi", kwa sababu husasisha kiotomatiki data iliyoonyeshwa bila kukuhitaji uonyeshe upya ukurasa kwenye kivinjari.
  2. OpenShift Console - interface ya wavuti kutoka kwa Red Hat OpenShift, ambayo, hata hivyo, italeta maendeleo mengine ya mradi kwenye nguzo yako, ambayo haifai kwa kila mtu.
  3. Kubernator ni mradi wa kuvutia, ulioundwa kama kiolesura cha kiwango cha chini (kuliko Dashibodi) chenye uwezo wa kutazama vitu vyote vya nguzo. Walakini, inaonekana kama maendeleo yake yamesimama.
  4. Polaris - siku nyingine tu alitangaza mradi unaochanganya utendakazi wa paneli (inaonyesha hali ya sasa ya nguzo, lakini haidhibiti vitu vyake) na "uthibitishaji wa mbinu bora" moja kwa moja (huangalia nguzo kwa usahihi wa usanidi wa Usambazaji unaoendeshwa ndani yake).

Badala ya hitimisho

Dashibodi ni zana ya kawaida kwa makundi ya Kubernetes tunayohudumia. Ujumuishaji wake na GitLab pia umekuwa sehemu ya usakinishaji wetu chaguo-msingi, kwani wasanidi wengi wanafurahishwa na uwezo walio nao kwenye paneli hii.

Dashibodi ya Kubernetes mara kwa mara huwa na njia mbadala kutoka kwa jumuiya ya Open Source (na tunafurahi kuzizingatia), lakini kwa hatua hii tunasalia na suluhisho hili.

PS

Soma pia kwenye blogi yetu:

Chanzo: mapenzi.com

Kuongeza maoni