Samþætting Kubernetes mælaborðs og GitLab notenda

Samþætting Kubernetes mælaborðs og GitLab notenda

Kubernetes Mælaborð er auðvelt í notkun tól til að fá uppfærðar upplýsingar um hlaupandi klasann þinn og stjórna honum með lágmarks fyrirhöfn. Þú byrjar að meta það enn meira þegar aðgangur að þessum möguleikum er nauðsynlegur, ekki aðeins fyrir stjórnendur/DevOps verkfræðinga, heldur líka fyrir þá sem eru minna vanir stjórnborðinu og/eða ætla ekki að takast á við allar ranghala samskipti við kubectl og aðrar veitur. Þetta gerðist hjá okkur: forritararnir vildu fá skjótan aðgang að Kubernetes vefviðmótinu og þar sem við notum GitLab kom lausnin af sjálfu sér.

Hvers vegna er þetta?

Beinir verktaki gæti haft áhuga á tæki eins og K8s mælaborði til að kemba verkefni. Stundum vilt þú skoða annála og tilföng, og stundum drepa belg, skala Deployments/StatefulSets og jafnvel fara í gámaborðið (það eru líka beiðnir sem þó er til önnur leið - til dæmis í gegnum kubectl-kembiforrit).

Að auki er sálfræðileg stund fyrir stjórnendur þegar þeir vilja skoða klasann - að sjá að „allt er grænt“ og fullvissa sig þannig um að „allt sé að virka“ (sem er auðvitað mjög afstætt... en þetta er utan gildissviðs greinarinnar).

Sem staðlað CI kerfi sem við höfum gildir GitLab: allir verktaki nota það líka. Þess vegna, til að veita þeim aðgang, var rökrétt að samþætta mælaborð með GitLab reikningum.

Ég mun líka taka fram að við notum NGINX Ingress. Ef þú vinnur með öðrum innrásarlausnir, þú þarft sjálfstætt að finna hliðstæður athugasemda fyrir heimild.

Reynir að sameina

Uppsetning mælaborðs

Attention: Ef þú ætlar að endurtaka skrefin hér að neðan, þá - til að forðast óþarfa aðgerðir - lestu fyrst yfir í næsta undirfyrirsögn.

Þar sem við notum þessa samþættingu í mörgum uppsetningum höfum við sjálfvirkt uppsetningu hennar. Þær heimildir sem þarf til þess eru birtar í sérstök GitHub geymsla. Þau eru byggð á lítillega breyttum YAML stillingum frá opinber geymsla mælaborðs, auk Bash handrits fyrir skjóta dreifingu.

Handritið setur upp mælaborð í klasanum og stillir það fyrir samþættingu við 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

Hins vegar, áður en þú notar það, þarftu að fara í GitLab: Admin svæði → Forrit - og bæta við nýju forriti fyrir framtíðarspjaldið. Við skulum kalla það „kubernetes mælaborð“:

Samþætting Kubernetes mælaborðs og GitLab notenda

Sem afleiðing af því að bæta því við mun GitLab veita kjötkássa:

Samþætting Kubernetes mælaborðs og GitLab notenda

Það eru þau sem eru notuð sem rök fyrir handritinu. Fyrir vikið lítur uppsetningin svona út:

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

Eftir það skulum við athuga hvort allt hafi byrjað:

$ 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

Fyrr eða síðar byrjar þó allt heimild mun ekki virka strax! Staðreyndin er sú að í myndinni sem notuð er (aðstæður í öðrum myndum eru svipaðar) er ferlið við að ná tilvísun í svarhringingunni rangt útfært. Þessar aðstæður leiða til þess að oauth eyðir kexinu sem oauth sjálft gefur okkur...

Vandamálið er leyst með því að búa til þína eigin oauth mynd með plástri.

Patchaðu oauth og settu upp aftur

Til að gera þetta munum við nota eftirfarandi 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" ]

Og hér er hvernig rd.patch plásturinn sjálfur lítur út

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

Nú geturðu smíðað myndina og ýtt henni inn í GitLab okkar. Næst inn manifests/kube-dashboard-oauth2-proxy.yaml tilgreina notkun á myndinni sem þú vilt (skipta um hana fyrir þína eigin):

 image: docker.io/colemickens/oauth2_proxy:latest

Ef þú ert með skrásetningu sem er lokað með leyfi, ekki gleyma að bæta við notkun leyndarmáls fyrir draga myndir:

      imagePullSecrets:
     - name: gitlab-registry

... og bættu við leyndarmálinu sjálfu fyrir skrásetninguna:

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

Athugull lesandi mun sjá að langi strengurinn hér að ofan er base64 úr stillingunni:

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

Þetta eru notendagögnin í GitLab, Kubernetes kóðinn mun draga myndina úr skránni.

Eftir að allt er búið geturðu fjarlægt núverandi (virkar ekki rétt) uppsetningu mælaborðsins með skipuninni:

$ ./ctl.sh -d

... og settu allt upp aftur:

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

Það er kominn tími til að fara á mælaborðið og finna frekar fornaldarlegan innskráningarhnapp:

Samþætting Kubernetes mælaborðs og GitLab notenda

Eftir að hafa smellt á það mun GitLab heilsa okkur og bjóðast til að skrá þig inn á venjulega síðu sína (auðvitað, ef við höfum ekki áður skráð þig inn þar):

Samþætting Kubernetes mælaborðs og GitLab notenda

Við skráum okkur inn með GitLab skilríkjum - og allt er gert:

Samþætting Kubernetes mælaborðs og GitLab notenda

Um eiginleika mælaborðsins

Ef þú ert verktaki sem hefur ekki unnið með Kubernetes áður, eða einfaldlega af einhverjum ástæðum hefur ekki kynnst mælaborði áður, mun ég sýna nokkra af möguleikum þess.

Í fyrsta lagi geturðu séð að "allt er grænt":

Samþætting Kubernetes mælaborðs og GitLab notenda

Ítarlegri gögn eru einnig fáanleg fyrir belg, svo sem umhverfisbreytur, niðurhalaða mynd, ræsingarrök og ástand þeirra:

Samþætting Kubernetes mælaborðs og GitLab notenda

Dreifingar hafa sýnilegar stöður:

Samþætting Kubernetes mælaborðs og GitLab notenda

... og aðrar upplýsingar:

Samþætting Kubernetes mælaborðs og GitLab notenda

... og það er líka möguleikinn til að skala dreifinguna:

Samþætting Kubernetes mælaborðs og GitLab notenda

Niðurstaðan af þessari aðgerð:

Samþætting Kubernetes mælaborðs og GitLab notenda

Meðal annarra gagnlegra eiginleika sem þegar hefur verið minnst á í upphafi greinarinnar er að skoða logs:

Samþætting Kubernetes mælaborðs og GitLab notenda

... og aðgerðin til að skrá þig inn í gámaborðið á völdum belg:

Samþætting Kubernetes mælaborðs og GitLab notenda

Til dæmis geturðu líka skoðað takmörk/beiðnir á hnútum:

Samþætting Kubernetes mælaborðs og GitLab notenda

Auðvitað eru þetta ekki allir möguleikar pallborðsins, en ég vona að þú fáir almenna hugmynd.

Ókostir samþættingar og mælaborðs

Í samþættingu sem lýst er er engin aðgangsstýring. Með því fá allir notendur með hvaða aðgang að GitLab aðgang að mælaborðinu. Þeir hafa sama aðgang í mælaborðinu sjálfu, sem samsvarar réttindum stjórnborðsins sjálfs, sem eru skilgreind í RBAC. Augljóslega hentar þetta ekki öllum, en fyrir okkar tilvik reyndist þetta vera nóg.

Meðal áberandi ókosta í mælaborðinu sjálfu tek ég eftir eftirfarandi:

  • það er ómögulegt að komast inn í stjórnborðið á init ílátinu;
  • það er ómögulegt að breyta Deployments og StatefulSets, þó það sé hægt að laga þetta í ClusterRole;
  • Samhæfni mælaborðs við nýjustu útgáfur af Kubernetes og framtíð verkefnisins vekur upp spurningar.

Síðasta vandamálið verðskuldar sérstaka athygli.

Staða mælaborðs og valkostir

Samhæfingartafla mælaborðs með Kubernetes útgáfum, kynnt í nýjustu útgáfu verkefnisins (v1.10.1), ekki mjög ánægður:

Samþætting Kubernetes mælaborðs og GitLab notenda

Þrátt fyrir þetta er (þegar samþykkt í janúar) PR # 3476, sem tilkynnir um stuðning við K8s 1.13. Að auki, meðal verkefna má finna tilvísanir í notendur sem vinna með pallborðið í K8s 1.14. Loksins, skuldbindur sig inn í kóðagrunn verkefnisins hætta ekki. Þannig að (að minnsta kosti!) raunveruleg staða verkefnisins er ekki eins slæm og hún gæti fyrst virst af opinberu eindrægnitöflunni.

Að lokum eru valkostir við mælaborðið. Meðal þeirra:

  1. K8Dash — ungt viðmót (fyrstu skuldbindingarnar eru frá mars á þessu ári), sem nú þegar býður upp á góða eiginleika, svo sem sjónræna framsetningu á núverandi stöðu klasans og stjórnun hluta hans. Staðsett sem „rauntímaviðmót“ vegna þess uppfærir sjálfkrafa birt gögn án þess að þú þurfir að endurnýja síðuna í vafranum.
  2. OpenShift Console - vefviðmót frá Red Hat OpenShift, sem mun hins vegar koma með aðra þróun verkefnisins í þinn klasa, sem hentar ekki öllum.
  3. Kubernator er áhugavert verkefni, búið til sem lægra stig (en mælaborð) viðmót með getu til að skoða alla klasahluti. Hins vegar lítur út fyrir að þróun þess hafi stöðvast.
  4. Polaris - bara um daginn tilkynnt verkefni sem sameinar aðgerðir spjalds (sýnir núverandi stöðu þyrpingarinnar, en stjórnar ekki hlutum hans) og sjálfvirka „fullgildingu bestu starfsvenja“ (athugar þyrpinguna fyrir réttar stillingar dreifingar sem keyra í honum).

Í stað niðurstaðna

Mælaborð er staðlað tól fyrir Kubernetes klasana sem við þjónum. Samþætting þess við GitLab hefur einnig orðið hluti af sjálfgefna uppsetningunni okkar, þar sem margir forritarar eru spenntir fyrir þeim getu sem þeir hafa með þessu spjaldi.

Kubernetes Dashboard hefur reglulega valkosti frá Open Source samfélaginu (og við erum ánægð að íhuga þá), en á þessu stigi erum við áfram með þessa lausn.

PS

Lestu líka á blogginu okkar:

Heimild: www.habr.com

Bæta við athugasemd