Paghiusa sa Kubernetes Dashboard ug GitLab Users

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Ang Kubernetes Dashboard kay dali gamiton nga himan para sa pagkuha sa pinakabag-o nga impormasyon bahin sa imong running cluster ug pagdumala niini sa gamay nga paningkamot. Nagsugod ka sa pagpabili niini labi pa kung ang pag-access sa kini nga mga kapabilidad kinahanglan dili lamang sa mga administrador / mga inhenyero sa DevOps, apan usab sa mga dili kaayo naanad sa console ug / o wala’y katuyoan nga atubangon ang tanan nga mga kakuti sa pagpakig-uban sa kubectl ug ubang mga utilities. Nahitabo kini kanamo: gusto sa mga developer ang dali nga pag-access sa interface sa web sa Kubernetes, ug tungod kay gigamit namon ang GitLab, natural nga moabut ang solusyon.

Ngano man ni?

Ang mga direktang developer mahimong interesado sa usa ka himan sama sa K8s Dashboard alang sa mga buluhaton sa pag-debug. Usahay gusto nimo nga tan-awon ang mga troso ug mga kahinguhaan, ug usahay patyon ang mga pod, scale Deployments/StatefulSets, ug bisan pa moadto sa container console (adunay ingon nga mga hangyo, diin, bisan pa, adunay lain nga paagi - pananglitan, pinaagi sa kubectl-debug).

Dugang pa, adunay usa ka sikolohikal nga panahon alang sa mga manedyer kung gusto nila nga tan-awon ang kumpol - aron makita nga "ang tanan berde", ug sa ingon nagpasalig sa ilang kaugalingon nga "ang tanan nagtrabaho" (nga, siyempre, relatibo kaayo ... apan kini lapas pa sa kasangkaran sa artikulo).

Ingon usa ka sumbanan nga sistema sa CI nga naa kanato gipadapat GitLab: gigamit usab kini sa tanan nga mga developer. Busa, aron mahatagan sila og access, makatarunganon nga i-integrate ang Dashboard sa mga account sa GitLab.

Mamatikdan usab nako nga gigamit namon ang NGINX Ingress. Kung nagtrabaho ka sa uban mga solusyon sa pagsulod, kinahanglan nimo nga independente nga mangita mga analogue sa mga anotasyon alang sa pagtugot.

Pagsulay sa paghiusa

Pag-instalar sa dashboard

Pagtagad: Kung imong sublion ang mga lakang sa ubos, nan - aron malikayan ang dili kinahanglan nga mga operasyon - basaha una ang sunod nga subheading.

Tungod kay gigamit namon kini nga panagsama sa daghang mga instalasyon, awtomatiko namon ang pag-install niini. Ang mga tinubdan nga gikinahanglan alang niini gimantala sa espesyal nga GitHub repository. Gibase kini sa gamay nga giusab nga mga configuration sa YAML gikan sa opisyal nga dashboard repository, ingon man usa ka script sa Bash alang sa dali nga pag-deploy.

Ang script nag-install sa Dashboard sa cluster ug gi-configure kini alang sa panagsama sa 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

Bisan pa, sa dili pa kini gamiton, kinahanglan ka nga moadto sa GitLab: Admin area → Applications - ug pagdugang usa ka bag-ong aplikasyon alang sa umaabot nga panel. Tawgon nato kini nga "kubernetes dashboard":

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Ingon usa ka sangputanan sa pagdugang niini, ang GitLab maghatag sa mga hash:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Sila ang gigamit isip argumento sa script. Ingon usa ka sangputanan, ang pag-install ingon niini:

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

Human niana, atong susihon nga ang tanan nagsugod:

$ 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

Sa madugay o sa madali ang tanan magsugod, hinoon ang pagtugot dili molihok dayon! Ang tinuod mao nga sa hulagway nga gigamit (ang sitwasyon sa ubang mga hulagway susama) ang proseso sa pagdakop sa usa ka redirect sa callback gipatuman nga dili husto. Kini nga kahimtang nagdala sa kamatuoran nga ang oauth nagwagtang sa cookie nga gihatag mismo sa oauth kanato...

Nasulbad ang problema pinaagi sa paghimo sa imong kaugalingon nga imahe sa oauth nga adunay usa ka patch.

Patch oauth ug i-install pag-usab

Sa pagbuhat niini, atong gamiton ang mosunod nga 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" ]

Ug ania ang hitsura sa rd.patch patch mismo

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

Karon mahimo nimong tukuron ang imahe ug iduso kini sa among GitLab. Sunod sa manifests/kube-dashboard-oauth2-proxy.yaml ipakita ang paggamit sa gusto nga imahe (ilisan kini sa imong kaugalingon):

 image: docker.io/colemickens/oauth2_proxy:latest

Kung ikaw adunay usa ka rehistro nga gisirhan pinaagi sa pagtugot, ayaw kalimti nga idugang ang paggamit sa usa ka sekreto alang sa pagbitad sa mga imahe:

      imagePullSecrets:
     - name: gitlab-registry

... ug idugang ang sekreto mismo alang sa rehistro:

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

Ang matinagdanon nga magbabasa makakita nga ang taas nga hilo sa ibabaw kay base64 gikan sa config:

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

Kini ang datos sa gumagamit sa GitLab, ang Kubernetes code mobira sa imahe gikan sa rehistro.

Human mahuman ang tanan, mahimo nimong tangtangon ang kasamtangan (dili nagtrabaho sa husto) nga pag-instalar sa Dashboard gamit ang sugo:

$ ./ctl.sh -d

... ug i-install ang tanan pag-usab:

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

Panahon na sa pag-adto sa Dashboard ug pagpangita usa ka karaan nga buton sa pag-login:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Pagkahuman sa pag-klik niini, ang GitLab motimbaya kanamo, nga nagtanyag nga mag-log in sa naandan nga panid niini (siyempre, kung wala pa kami naka-log in kaniadto):

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Nag-log in kami gamit ang mga kredensyal sa GitLab - ug nahuman na ang tanan:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Mahitungod sa mga bahin sa Dashboard

Kung ikaw usa ka developer nga wala pa nagtrabaho uban sa Kubernetes kaniadto, o tungod lang sa pipila ka rason nga wala makasugat sa Dashboard kaniadto, akong ihulagway ang pipila sa mga kapabilidad niini.

Una, imong makita nga "ang tanan berde":

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Ang mas detalyado nga datos magamit usab alang sa mga pod, sama sa mga variable sa palibot, na-download nga imahe, mga argumento sa paglansad, ug ang ilang estado:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Ang mga deployment adunay makita nga mga kahimtang:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

...ug uban pang mga detalye:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

... ug adunay usab abilidad sa pag-scale sa deployment:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Ang resulta niini nga operasyon:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Lakip sa ubang mapuslanong bahin nga nahisgotan na sa sinugdanan sa artikulo mao ang pagtan-aw sa mga troso:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

... ug ang function sa pag-log in sa container console sa pinili nga pod:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Pananglitan, mahimo usab nimo tan-awon ang mga limitasyon / hangyo sa mga node:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Siyempre, dili kini tanan nga mga kapabilidad sa panel, apan nanghinaut ko nga makuha nimo ang kinatibuk-ang ideya.

Mga disbentaha sa panagsama ug Dashboard

Sa gihulagway nga panagsama wala kontrol sa pag-access. Uban niini, ang tanan nga mga tiggamit nga adunay bisan unsang pag-access sa GitLab makakuha og access sa Dashboard. Sila adunay parehas nga pag-access sa Dashboard mismo, nga katumbas sa mga katungod sa Dashboard mismo, nga gihubit sa RBAC. Dayag nga dili kini angay alang sa tanan, apan alang sa among kaso kini igo na.

Lakip sa mamatikdan nga mga disbentaha sa Dashboard mismo, akong namatikdan ang mosunod:

  • imposible nga makasulod sa console sa init nga sudlanan;
  • imposible nga i-edit ang Mga Deployment ug StatefulSets, bisan kung mahimo kini nga ayo sa ClusterRole;
  • Ang pagkaangay sa dashboard sa pinakabag-o nga bersyon sa Kubernetes ug ang kaugmaon sa proyekto nagpatunghag mga pangutana.

Ang kataposang problema angayan ug espesyal nga pagtagad.

Status sa dashboard ug mga alternatibo

Dashboard compatibility table uban sa Kubernetes releases, nga gipresentar sa pinakabag-o nga bersyon sa proyekto (v1.10.1), dili kaayo malipayon:

Paghiusa sa Kubernetes Dashboard ug GitLab Users

Bisan pa niini, adunay (gisagop na sa Enero) PR #3476, nga nagpahibalo sa suporta alang sa K8s 1.13. Dugang pa, taliwala sa mga isyu sa proyekto makit-an nimo ang mga pakisayran sa mga tiggamit nga nagtrabaho kauban ang panel sa K8s 1.14. Sa katapusan, nagpasalig ngadto sa code base sa proyekto ayaw paghunong. Mao nga (labing menos!) Ang aktuwal nga kahimtang sa proyekto dili ingon ka daotan sama sa una nga makita gikan sa opisyal nga lamesa sa pagpahiangay.

Sa katapusan, adunay mga alternatibo sa Dashboard. Lakip kanila:

  1. K8Dash - usa ka batan-on nga interface (ang unang commit petsa balik sa Marso sa niini nga tuig), nga nagtanyag sa maayo nga mga bahin, sama sa usa ka biswal nga representasyon sa kasamtangan nga kahimtang sa cluster ug pagdumala sa mga butang niini. Gibutang isip usa ka "real-time nga interface", tungod kay awtomatiko nga gi-update ang gipakita nga datos nga wala kinahanglana nga i-refresh ang panid sa browser.
  2. OpenShift Console - usa ka web interface gikan sa Red Hat OpenShift, nga, bisan pa, magdala sa ubang mga kalamboan sa proyekto sa imong cluster, nga dili angay alang sa tanan.
  3. Kubernator mao ang usa ka makapaikag nga proyekto, nga gibuhat ingon sa usa ka ubos nga lebel (kaysa Dashboard) interface uban sa abilidad sa pagtan-aw sa tanang cluster nga mga butang. Bisan pa, ingon og nahunong ang pag-uswag niini.
  4. Polaris - sa miaging adlaw lang gipahibalo usa ka proyekto nga naghiusa sa mga gimbuhaton sa usa ka panel (nagpakita sa kasamtangan nga kahimtang sa cluster, apan wala nagdumala sa mga butang niini) ug awtomatik nga "pagpamatuod sa labing maayo nga mga gawi" (pagsusi sa cluster alang sa pagkahusto sa mga configuration sa mga Deployment nga nagdagan niini).

Inay mga konklusyon

Ang dashboard kay usa ka standard nga himan para sa Kubernetes clusters nga among gialagaran. Ang panagsama niini sa GitLab nahimo usab nga bahin sa among default nga pag-install, tungod kay daghang mga developer ang naghinamhinam bahin sa mga kapabilidad nga naa nila sa kini nga panel.

Ang Kubernetes Dashboard matag karon ug unya adunay mga alternatibo gikan sa Open Source nga komunidad (ug nalipay kami sa pagkonsiderar niini), apan niining yugtoa nagpabilin kami niini nga solusyon.

PS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment