Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Kubernetes Dashboard — lihtne kasutada tööriist, et saada ajakohast teavet töötava klastriga ja minimaalset juhtimist selle ĂŒle. Hakatakse seda veel rohkem hindama, kui need vĂ”imalused on vajalikud mitte ainult administraatoritele/DevOps-inseneridele, vaid ka neile, kes ei ole harjunud konsooli kasutama ja/vĂ”i ei kavatse sĂŒveneda kĂ”igi nĂŒanssidega, kuidas suhelda kubectl'i ja teiste utiliitidega. Just nii juhtus meil: arendajad soovisid kiiret juurdepÀÀsu Kubernetes'i veebiliidesele, ja kuna me kasutame GitLab'i, tundus lahendus loogiline.

Miks see vajalik on?

Otsesed arendajad vĂ”ivad olla huvitatud sellisest tööriistast nagu K8s Dashboard tĂ”rkeotsingu ĂŒlesannete jaoks. MĂ”nikord on soov vaadata logsid ja ressursse, aga vahel tuleb ka pod'e lĂ”petada, skaleerida Deployments/StatefulSets ja isegi sukelduda konteinerite konsooli (sellised pĂ€ringud on samuti olemas, mille lahendamiseks on aga ka teine tee — nĂ€iteks lĂ€bi kubectl-debug).

Lisaks on olemas ka psĂŒhholoogiline aspekt juhtidele, kes tahavad klastrit vaadata — nĂ€ha, et "kĂ”ik on roheline", ja seelĂ€bi end rahustada, et "kĂ”ik töötab" (mis on muidugi vĂ€ga suhteline ... kuid see jÀÀb juba artikli teemast vĂ€lja).

Meie standardne CI-sĂŒsteem on rakendatakse GitLab: seda kasutavad kĂ”ik arendajad. SeetĂ”ttu oli mĂ”istlik vĂ”imaldada neile juurdepÀÀs, integreerides Dashboard'i GitLab'i kontodega.

Pean ka mainima, et me kasutame NGINX Ingress'i. Kui töötate aga teistega ingress-lahendustega, peate ise leidma analoogsed annotatsioonid autoriseerimiseks.

Proovime integreerimist

Dashboard'i installimine

EttevaatusabinĂ”ud: Kui kavatsete allpool kirjeldatud samme korrata, siis — vĂ€ltimaks liigseid toiminguid — lugege kĂ”igepealt jĂ€rgmise pealkirjani.

Kuna me kasutame seda integreerimist paljudes paigaldustes, oleme automatiseerinud selle installimise. Eeltöötlused, mida on vaja selleks, on avaldatud eriti GitHub'i hoidlas. Nende aluseks on vÀhesel mÀÀral muudetud YAML-konfiguratsioonid ametlikust Dashboard'i hoidlast, samuti Bash-skripti kiireks juurutamiseks.

Skript installib Dashboard'i klastrisse ja seadistab selle GitLab'iga integreerimiseks:

$ ./ctl.sh  
Kasutamine: ctl.sh [VALIK]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Installige kubernetes-dashboard Kubernetes klastrisse.
Kohustuslikud argumendid:
 -i, --install                install 'kube-system' nimesse
 -u, --upgrade                uuendage olemasolevat installatsiooni, kasutades sama parooli ja hostinimesid
 -d, --delete                 eemaldage kÔik koos nimeserveriga
     --gitlab-url             seadistage gitlabi URL skeemiga (https://gitlab.example.com)
     --oauth2-id              seadistage OAUTH2_PROXY_CLIENT_ID gitlabist
     --oauth2-secret          seadistage OAUTH2_PROXY_CLIENT_SECRET gitlabist
     --dashboard-url          seadistage armatuurlaud ilma skeemita (dashboard.example.com)
Valikuline argument:
 -h, --help                   vÀljastab selle sÔnumi

Kuid enne selle kasutamist peate registreerima GitLabis: Admin ala → Rakendused — ja looma uue rakenduse tulevase paneeli jaoks. Nimeks olgu «kubernetes dashboard»:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Tulemuseks on GitLabis loodud hashid:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Just neid kasutatakse skripti argumendina. Tulemuseks on, et installatsioon nÀeb vÀlja jÀrgmine:

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

PÀrast seda kontrollime, et kÔik kÀivitus:

$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp   1/1       Töötab   0          14s
oauth2-proxy-5586ccf95c-czp2v           1/1       Töötab   0          14s

Varem vĂ”i hiljem kĂ€ivitatakse kĂ”ik, kuid autentimine ei tööta kohe! Asi on selles, et kasutatav pilt (teiste piltide puhul on olukord sarnane) ei realiseeri Ă”igesti redirekti protsessi callback'is. See asjaolu pĂ”hjustab selle, et oauth kustutab kĂŒpsise, mille just (oauth) meile annab...

Probleem lahendatakse oma oauth pildi kokkupanemisega koos patchiga.

Patch oauth'le ja uuesti installimine

Selle jaoks kasutame jÀrgmist Dockerfile'i:

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

Nii nÀeb vÀlja patch 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 "... kÀivitatakse testid"
-.\/test.sh
+#.\/test.sh
 
-for os in windows linux darwin; do
-    echo "... kogutakse v$version jaoks $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 "... kogutakse v$version jaoks $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ĂŒĂŒd on vĂ”imalik pildi kogumine ja selle pushimine meie GitLabi. Edasi... manifests/kube-dashboard-oauth2-proxy.yaml mÀÀrame vajaliku pildi kasutamise (asendage oma omaga):

 image: docker.io/colemickens/oauth2_proxy:latest

Kui teil on privaatne autentimisega registry - Àrge unustage lisada saladuse kasutamine piltide tÔmbamiseks:

      imagePullSecrets:
     - name: gitlab-registry


 ja lisage ise saladus registry jaoks:

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

Hoolikas lugeja mÀrkab, et eespool toodud pikk rida on base64 konfi:

{"registry.company.com": {
 "username": "oauth2",
 "password": "PAROOL",
 "auth": "AUTH_TOKEN",
 "email": "mail@company.com"
}
}

Need on kasutaja andmed GitLabis, millega Kubernetes tÔmbab pilti registry'lt.

PÀrast kÔike seda on vÔimalik eemaldada praegune (vale töötav) Dashboardi installatsioon kÀsuga:

$ .\/ctl.sh -d


 ja seadistada kÔik uuesti:

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

On aeg minna Dashboardi ja leida ĂŒsna vanamoodne autentimise nupp:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

PĂ€rast nupule vajutamist kohtame GitLabi, pakkudes autentimisele oma harjutatud lehel (loomulikult, kui me pole eelnevalt seal autentitud):

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Autentime end GitLabi konto andmetega — ja kĂ”ik on valmis:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Dashboardi vÔimaluste kohta

Kui olete arendaja, kes ei ole varem Kubernetesega töötanud, vÔi lihtsalt mingil pÔhjusel pole Dashboardiga kokku puutunud, illustreerin ma mÔningaid selle vÔimalusi.

Esiteks, saate nÀha, et "kÔik on rohelised":

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Podide kohta on saadaval ka detailsemad andmed, nÀiteks keskkonnamuutujad, allalaaditud pilt, kÀivitamisargumendid, nende olek:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Deploymentide korral on nÀhtavad seisundid:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine


 ja muud ĂŒksikasjad:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine


 samuti on vÔimalik skalmeerida deploymenti:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Selle operatsiooni tulemus:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Muude kasulike vÔimaluste seas, nagu juba artikli alguses mainitud, on logide vaatamine:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine


 ja valitud podi konteinerite konsooli sisenemise funktsioon:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Samuti on vÔimalik vaadata ka piiranguid/taotlusi sÔlmedes:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Muidugi, need ei ole kĂ”ik paneeli vĂ”imalused, kuid loodetavasti on ĂŒldine ettekujutus selge.

Integratsiooni ja Dashboardi puudused

Kirjeldatud integratsioonis puudub igasugune juurdepÀÀsu piiramine. Sellega saavad kÔik kasutajad, kellel on mingi juurdepÀÀs GitLabile, juurdepÀÀsu Dashboardile. Dashboardis on neil sama juurdepÀÀs, mis vastab Dashboardi Ôigustele, mis mÀÀratakse RBAC-is. On ilmne, et see ei sobi kÔigile, kuid meie juhtumi jaoks oli see piisav.

Peamiste puudustena teiste parameetrite seas toome vÀlja jÀrgmised:

  • ei saa pÀÀseda init-konteineri konsooli;
  • ei saa redigeerida Deploymente ja StatefulSet'e, kuigi seda saab parandada ClusterRole'is;
  • Dashboardi ĂŒhilduvus viimaste Kubernetes’i versioonidega ja projekti tulevik tekitab kĂŒsimusi.

Viimane probleem vÀÀrib erilist tÀhelepanu.

Dashboardi staatus ja alternatiivid

Dashboardi ĂŒhilduvustabel Kubernetes’i vĂ€ljaannetega, mis on esitatud projekti viimases versioonis (v1.10.1), ei ole just rÔÔmustav:

Kubernetes Dashboardi ja GitLabi kasutajate integreerimine

Sellegipoolest on olemas (juba jaanuaris vastuvĂ”etud) PR #3476, mis kuulutab vĂ€lja K8s 1.13 toe. Lisaks vĂ”ivad projekti probleemide seas leida kasutajad, kes töötavad paneeliga K8s 1.14. LĂ”puks, commitid projekti koodibaasi ei ole katkenud. Nii et (minimaalselt!) projekti tegelik seisund ei ole nii halb, kui esmapilgul ametlikust ĂŒhilduvustabelist tundub.

LÔpuks on Dashboardil alternatiive. Nende seas:

  1. K8Dash — noorliides (esimese kommid on mĂ€rtsist sel aastal), mis pakub juba hĂ€id vĂ”imalusi, nagu klastrite aktiivse oleku visuaalne esitamine ja selle objektide haldamine. Positiivne "reaalajas liides", kuna see vĂ€rskendab automaatselt kuvatavaid andmeid, ilma et oleks vaja brauseris lehte uuendada.
  2. OpenShifti konsool — Red Hati OpenShifti veebiliides, mis toob teie klastrisse ka muid projekti arendusi, mis ei pruugi kĂ”ikidele sobida.
  3. Kubernator — huvitav projekt, mis loodi madalama tasemega (kui Dashboard) liideseks, vĂ”imaldades vaadata kĂ”iki klastrite objekte. Kuid tundub, et selle arendamine on peatunud.
  4. Polaris — literally just recently tutvustatud projekt, mis ĂŒhendab endas paneeli funktsioonid (nĂ€itab klastrite praegust seisu, kuid ei halda selle objekte) ja automaatse "parimate praktikate valideerimise" (kontrollib klastrit kĂ€ivitatud Deployments'i konfiguratsioonide korrektsuse osas).

JĂ€reldused

Dashboard — standardne tööriist Kubernetes'i klastrite jaoks, mida me haldame. Selle integreerimine GitLabiga on samuti osa meie "vaikimisi installatsioonist", kuna paljusid arendajaid rÔÔmustavad vĂ”imalused, mis neil selle paneeliga avanevad.

Kubernetes Dashboard'il ilmub aeg-ajalt Open Source-kommunteti alternatiive (ja me oleme valmis neid arutama), kuid hetkel jÀÀme selle lahenduse juurde.

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster