Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Kubernetes Dashboard ir ērti lietojams rÄ«ks, lai iegÅ«tu jaunāko informāciju par savu darbÄ«go kopu un pārvaldÄ«tu to ar minimālu piepÅ«li. JÅ«s sākat to novērtēt vēl vairāk, kad piekļuve Ŕīm iespējām ir nepiecieÅ”ama ne tikai administratoriem/DevOps inženieriem, bet arÄ« tiem, kuri ir mazāk pieraduÅ”i pie konsoles un/vai neplāno saskarties ar visām sarežģītÄ«bām, kas saistÄ«tas ar mijiedarbÄ«bu ar kubectl un citi komunālie pakalpojumi. Tas notika ar mums: izstrādātāji vēlējās ātru piekļuvi Kubernetes tÄ«mekļa saskarnei, un, tā kā mēs izmantojam GitLab, risinājums radās dabiski.

Kāpēc ir Å”is?

TieÅ”os izstrādātājus varētu interesēt tāds rÄ«ks kā K8s Dashboard atkļūdoÅ”anas uzdevumu veikÅ”anai. Dažreiz jÅ«s vēlaties skatÄ«t žurnālus un resursus un dažreiz iznÄ«cināt aplikumus, mērogot izvietojumus/StatefulSets un pat doties uz konteinera konsoli (ir arÄ« pieprasÄ«jumi, kuriem tomēr ir cits veids, piemēram, izmantojot kubectl-debug).

Turklāt vadÄ«tājiem ir psiholoÄ£isks brÄ«dis, kad viņi vēlas paskatÄ«ties uz klasteri - redzēt, ka "viss ir zaļŔ", un tādējādi nomierināt sevi, ka "viss darbojas" (kas, protams, ir ļoti relatÄ«vi... bet tas ir ārpus raksta darbÄ«bas jomas).

Mums ir standarta CI sistēma piemēro GitLab: to izmanto arÄ« visi izstrādātāji. Tāpēc, lai nodroÅ”inātu viņiem piekļuvi, bija loÄ£iski integrēt informācijas paneli ar GitLab kontiem.

Es arÄ« atzÄ«mÄ“Å”u, ka mēs izmantojam NGINX Ingress. Ja strādājat ar citiem iekļūŔanas risinājumi, jums bÅ«s patstāvÄ«gi jāatrod anotāciju analogi autorizācijai.

Mēģina integrēt

Informācijas paneļa uzstādīŔana

Uzmanību: Ja jūs gatavojaties atkārtot tālāk norādītās darbības, tad, lai izvairītos no nevajadzīgām darbībām, vispirms izlasiet nākamo apakŔvirsrakstu.

Tā kā mēs Å”o integrāciju izmantojam daudzās instalācijās, esam automatizējuÅ”i tās instalÄ“Å”anu. Tam nepiecieÅ”amie avoti ir publicēti Ä«paÅ”a GitHub repozitorija. Tie ir balstÄ«ti uz nedaudz modificētām YAML konfigurācijām no oficiālā informācijas paneļa repozitorijs, kā arÄ« Bash skriptu ātrai izvietoÅ”anai.

Skripts instalē informācijas paneli klasterī un konfigurē to integrācijai ar 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

Tomēr, pirms to izmantojat, jums jāiet uz GitLab: Admin area ā†’ Applications - un jāpievieno jauna lietojumprogramma nākotnes panelim. Sauksim to par ā€œkubernetes informācijas paneliā€:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Tā pievienoÅ”anas rezultātā GitLab nodroÅ”inās jaucējvārdus:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Tie ir tie, kas tiek izmantoti kā skripta argumenti. Rezultātā instalācija izskatās Ŕādi:

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

Pēc tam pārbaudīsim, vai viss sākās:

$ 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

Agri vai vēlu viss tomēr sāksies autorizācija nedarbosies uzreiz! Fakts ir tāds, ka izmantotajā attēlā (situācija citos attēlos ir lÄ«dzÄ«ga) novirzÄ«Å”anas uztverÅ”anas process atzvanÄ«Å”anā ir Ä«stenots nepareizi. Å is apstāklis ā€‹ā€‹noved pie tā, ka oauth izdzÄ“Å” sÄ«kfailu, ko pats oauth mums nodroÅ”ina...

Problēma tiek atrisināta, izveidojot savu oauth attēlu ar ielāpu.

Izlabojiet oauth un pārinstalējiet

Lai to izdarÄ«tu, mēs izmantosim Ŕādu 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" ]

Un lūk, kā izskatās pats rd.patch ielāps

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

Tagad varat izveidot attēlu un ievietot to mÅ«su GitLab. Nākamais iekŔā manifests/kube-dashboard-oauth2-proxy.yaml norādiet vēlamā attēla izmantoÅ”anu (aizstāt to ar savu):

 image: docker.io/colemickens/oauth2_proxy:latest

Ja jums ir reÄ£istrs, kas ir aizvērts ar autorizāciju, neaizmirstiet attēlu vilkÅ”anai pievienot noslēpuma izmantoÅ”anu:

      imagePullSecrets:
     - name: gitlab-registry

... un pievienojiet paÅ”u reÄ£istra noslēpumu:

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

UzmanÄ«gs lasÄ«tājs redzēs, ka garā virkne iepriekÅ” ir base64 no konfigurācijas:

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

Šie ir lietotāja dati GitLab, Kubernetes kods izvilks attēlu no reģistra.

Kad viss ir izdarÄ«ts, varat noņemt paÅ”reizējo (nedarbojas pareizi) informācijas paneļa instalāciju ar komandu:

$ ./ctl.sh -d

... un instalējiet visu vēlreiz:

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

Ir pienācis laiks doties uz informācijas paneli un atrast diezgan arhaisku pieteikŔanās pogu:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Pēc noklikŔķināŔanas uz tā mÅ«s sagaida GitLab, piedāvājot ielogoties savā parastajā lapā (protams, ja iepriekÅ” neesam tur pieteikuÅ”ies):

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Mēs piesakāmies ar GitLab akreditācijas datiem - un viss ir izdarīts:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Par informācijas paneļa funkcijām

Ja esat izstrādātājs, kurÅ” iepriekÅ” nav strādājis ar Kubernetes vai vienkārÅ”i kādu iemeslu dēļ iepriekÅ” neesat saskāries ar Dashboard, es ilustrÄ“Å”u dažas no tā iespējām.

Pirmkārt, jÅ«s varat redzēt, ka ā€œviss ir zaļŔā€:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Ir pieejami arÄ« detalizētāki dati par podiem, piemēram, vides mainÄ«gie, lejupielādētais attēls, palaiÅ”anas argumenti un to stāvoklis:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Izvietojumiem ir redzami statusi:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

...un cita informācija:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

... un ir arÄ« iespēja mērogot izvietoÅ”anu:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Šīs operācijas rezultāts:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Starp citām noderÄ«gām funkcijām, kas jau minētas raksta sākumā, ir žurnālu skatÄ«Å”ana:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

... un funkcija, lai pieteiktos atlasītā aplikuma konteinera konsolē:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Piemēram, varat arī apskatīt mezglu ierobežojumus/pieprasījumus:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Protams, tās nav visas paneļa iespējas, taču es ceru, ka jÅ«s sapratÄ«sit vispārējo priekÅ”statu.

Integrācijas un informācijas paneļa trūkumi

AprakstÄ«tajā integrācijā nav piekļuves kontrole. Izmantojot to, visi lietotāji ar jebkādu piekļuvi GitLab iegÅ«st piekļuvi informācijas panelim. Viņiem ir tāda pati piekļuve paŔā informācijas panelÄ«, kas atbilst paÅ”a informācijas paneļa tiesÄ«bām, kuras ir definēti RBAC. AcÄ«mredzot tas nav piemērots visiem, bet mÅ«su gadÄ«jumā tas izrādÄ«jās pietiekami.

Starp pamanāmajiem trÅ«kumiem paŔā informācijas panelÄ« es atzÄ«mēju sekojoÅ”o:

  • nav iespējams iekļūt init konteinera konsolē;
  • nav iespējams rediģēt Deployments un StatefulSets, lai gan to var labot programmā ClusterRole;
  • Informācijas paneļa saderÄ«ba ar jaunākajām Kubernetes versijām un projekta nākotne rada jautājumus.

Pēdējā problēma ir pelnÄ«jusi Ä«paÅ”u uzmanÄ«bu.

Informācijas paneļa statuss un alternatīvas

Informācijas paneļa saderības tabula ar Kubernetes laidieniem, kas parādīta jaunākajā projekta versijā (v1.10.1), ne pārāk laimīgs:

Kubernetes informācijas paneļa un GitLab lietotāju integrācija

Neskatoties uz to, ir (jau pieņemts janvārÄ«) PR #3476, kas paziņo par atbalstu K8s 1.13. Turklāt starp projekta problēmām varat atrast atsauces uz lietotājiem, kuri strādā ar paneli K8s 1.14. Visbeidzot, apņemas projekta kodu bāzē neapstājas. Tātad (vismaz!) projekta faktiskais statuss nav tik slikts, kā sākotnēji varētu Ŕķist pēc oficiālās saderÄ«bas tabulas.

Visbeidzot, informācijas panelim ir alternatīvas. Starp viņiem:

  1. K8Dash ā€” jauns interfeiss (pirmās saistÄ«bas datētas ar Ŕī gada martu), kas jau piedāvā labas iespējas, piemēram, klastera paÅ”reizējā statusa vizuālu attēlojumu un tā objektu pārvaldÄ«bu. Pozicionēts kā ā€œreāllaika interfeissā€, jo automātiski atjaunina parādÄ«tos datus, neprasot lapas atsvaidzināŔanu pārlÅ«kprogrammā.
  2. OpenShift konsole - Red Hat OpenShift tīmekļa saskarne, kas tomēr ienesīs jūsu klasterī citas projekta izstrādes, kas nav piemērotas visiem.
  3. Kubernators ir interesants projekts, kas izveidots kā zemāka līmeņa (nekā informācijas panelis) saskarne ar iespēju skatīt visus klastera objektus. Tomēr izskatās, ka tā attīstība ir apstājusies.
  4. Polaris - tikai otro dienu paziņoja projekts, kas apvieno paneļa funkcijas (parāda klastera paÅ”reizējo stāvokli, bet nepārvalda tā objektus) un automātisku ā€œlabākās prakses validācijuā€ (pārbauda klastera tajā strādājoÅ”o izvietojumu konfigurāciju pareizÄ«bu).

Secinājumu vietā

Informācijas panelis ir standarta rÄ«ks mÅ«su apkalpotajām Kubernetes klasteriem. Tā integrācija ar GitLab arÄ« ir kļuvusi par daļu no mÅ«su noklusējuma instalācijas, jo daudzi izstrādātāji ir sajÅ«smā par iespējām, ko viņiem sniedz Å”is panelis.

Kubernetes Dashboard periodiski piedāvā alternatÄ«vas no atvērtā pirmkoda kopienas (un mēs ar prieku tās apsveram), taču Å”ajā posmā mēs paliekam pie Ŕī risinājuma.

PS

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru