Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Kubernetes Dashboard bụ ngwa dị mfe iji nweta ozi ọhụụ gbasara ụyọkọ na-agba ọsọ gị yana iji obere mbọ jikwaa ya. Ị na-amalite ịghọta ya ọbụna karị mgbe ịnweta ikike ndị a dị mkpa ọ bụghị nanị site na ndị ọrụ nchịkwa / DevOps engineer, kamakwa site na ndị na-amachaghị nke ọma na njikwa na / ma ọ bụ na-achọghị ime ihe mgbagwoju anya niile nke mmekọrịta na kubectl na ndị ọzọ utilities. Nke a mere anyị: ndị mmepe chọrọ ịnweta ngwa ngwa Kubernetes web interface, na ebe anyị na-eji GitLab, ngwọta ahụ bịara n'onwe ya.

Gịnị kpatara nke a?

Ndị mmepe ozugbo nwere ike ịnwe mmasị na ngwa dị ka K8s Dashboard maka ọrụ nbipu. Mgbe ụfọdụ, ị chọrọ ile ndekọ na akụrụngwa, na mgbe ụfọdụ igbu pods, ọnụ ọgụgụ Deployments/StatefulSets, na ọbụna na-aga akpa console (enwerekwa arịrịọ nke, Otú ọ dị, e nwere ụzọ ọzọ - ka ihe atụ, site na. kubectl-debug).

Tụkwasị na nke ahụ, e nwere oge uche maka ndị njikwa mgbe ha chọrọ ilele ụyọkọ ahụ - ịhụ na "ihe niile bụ akwụkwọ ndụ akwụkwọ ndụ", ma si otú a na-emesi onwe ha obi ike na "ihe niile na-arụ ọrụ" (nke, n'ezie, dị nnọọ ikwu ... ma nke a karịrị akarị nke isiokwu).

Dị ka ọkọlọtọ CI usoro anyị nwere etinyere ya GitLab: ndị mmepe niile na-ejikwa ya. Ya mere, iji nye ha ohere, ọ bụ ihe ezi uche dị na ya ijikọ Dashboard na akaụntụ GitLab.

M ga-achọpụtakwa na anyị na-eji NGINX Ingress. Ọ bụrụ na ị na-arụ ọrụ na ndị ọzọ ingress ngwọta, ị ga-achọrọ onwe gị ịchọta analogues nke nkọwa maka ikike.

Na-agbalị mwekota

Nwụnye dashboard

Ịkpachara anya: Ọ bụrụ na ị ga-emeghachi usoro ndị a dị n'okpuru, mgbe ahụ - ka ịzere ọrụ ndị na-adịghị mkpa - buru ụzọ gụọ na obere isiokwu na-esote.

Ebe ọ bụ na anyị na-eji ntinye a n'ọtụtụ nrụnye, anyị ewepụtala nrụnye ya. A na-ebipụta isi mmalite ndị achọrọ maka nke a ebe nchekwa GitHub pụrụ iche. Ha dabere na nhazi YAML gbanwetụrụ ntakịrị site na ebe nchekwa Dashboard gọọmentị, yana edemede Bash maka ntinye ngwa ngwa.

Edemede a na-etinye Dashboard na ụyọkọ ahụ wee hazie ya maka njikọta 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

Agbanyeghị, tupu iji ya, ịkwesịrị ịga na GitLab: mpaghara nchịkwa → Ngwa - wee tinye ngwa ọhụrụ maka panel n'ọdịnihu. Ka anyị kpọọ ya "kubernetes dashboard":

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

N'ihi ịgbakwunye ya, GitLab ga-enye hashes:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Ha bụ ndị a na-eji dị ka arụmụka na edemede. N'ihi ya, nrụnye dị ka nke a:

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

Mgbe nke ahụ gasịrị, ka anyị lelee na ihe niile malitere:

$ 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

N'oge na-adịghị, ihe niile ga-amalite, Otú ọ dị ikike agaghị arụ ọrụ ozugbo! Nke bụ eziokwu bụ na n'ime ihe oyiyi a na-eji (ọnọdụ dị na ihe oyiyi ndị ọzọ yiri ya) usoro nke ijide redirect na callback na-emejuputa na-ezighị ezi. Ọnọdụ a na-eduga na eziokwu ahụ bụ na iyi na-ehichapụ kuki nke iyi n'onwe ya na-enye anyị ...

A na-edozi nsogbu ahụ site na iji patch wuo onyonyo iyi iyi nke gị.

Mechie iyi ma tinyegharịa

Iji mee nke a, anyị ga-eji Dockerfile na-esonụ:

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 nke a bụ ihe rd.patch patch n'onwe ya dị ka

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

Ugbu a ị nwere ike wuo onyonyo a wee tinye ya na GitLab anyị. Na-esote na manifests/kube-dashboard-oauth2-proxy.yaml gosi iji onyonyo a chọrọ (jiri nke gị dochie ya):

 image: docker.io/colemickens/oauth2_proxy:latest

Ọ bụrụ na ị nwere ndekọ nke mechiri site na ikike, echefula ịgbakwunye ojiji nke nzuzo maka ihe oyiyi dọpụta:

      imagePullSecrets:
     - name: gitlab-registry

... ma tinye ihe nzuzo n'onwe ya maka ndekọ:

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

Onye na-agụ nke ọma ga-ahụ na ogologo eriri dị n'elu bụ base64 site na nhazi:

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

Nke a bụ data onye ọrụ na GitLab, koodu Kubernetes ga-ewepụ ihe onyonyo a na ndekọ.

Mgbe emechara ihe niile, ị nwere ike wepu ihe dị ugbu a (anaghị arụ ọrụ nke ọma) Dashboard na iwu:

$ ./ctl.sh -d

... ma wụnye ihe niile ọzọ:

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

Ọ bụ oge iji gaa na Dashboard wee chọta bọtịnụ nbanye nke ochie:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Mgbe ịpịchara ya, GitLab ga-ekele anyị, na-enye anyị ohere ịbanye na ibe ya (n'ezie, ọ bụrụ na anyị abanyebeghị ebe ahụ):

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Anyị na-abanye na nzere GitLab - emekwara ihe niile:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Banyere njirimara Dashboard

Ọ bụrụ na ị bụ onye nrụpụta nke na-esoghị Kubernetes arụ ọrụ na mbụ, ma ọ bụ naanị n'ihi ihe ụfọdụ ị hụbeghị Dashboard mbụ, m ga-egosipụta ụfọdụ ike ya.

Nke mbụ, ị nwere ike ịhụ na "ihe niile bụ akwụkwọ ndụ akwụkwọ ndụ":

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Data zuru ezu dịkwa maka pọd, dị ka mgbanwe gburugburu ebe obibi, onyonyo ebudatara, arụmụka mmalite, na steeti ha:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Nkwanye nwere ọkwa a na-ahụ anya:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

... na nkọwa ndị ọzọ:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

... na enwekwara ike ịkaba ọkwa mbugharị:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Nsonaazụ nke ọrụ a:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

N'ime atụmatụ ndị ọzọ bara uru nke a kpọtụrụ aha na mmalite nke akụkọ a bụ ịlele ndekọ:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

... yana ọrụ ịbanye n'ime njikwa akpa nke pọd ahọpụtara:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

Dịka ọmụmaatụ, ị nwekwara ike lelee oke / arịrịọ dị na ọnụ:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

N'ezie, ndị a abụghị ike niile nke panel, ma enwere m olileanya na ị ga-enweta echiche izugbe.

Ọdịmma nke mwekota na Dashboard

Na njikọ a kọwara enweghị njikwa ohere. Site na ya, ndị ọrụ niile nwere ohere ọ bụla na GitLab na-enweta ohere na Dashboard. Ha nwere otu ohere ahụ na Dashboard n'onwe ya, kwekọrọ na ikike nke Dashboard n'onwe ya, nke A kọwapụtara na RBAC. N'ụzọ doro anya, nke a adịghị adabara onye ọ bụla, mana maka ikpe anyị ọ tụgharịrị zuru ezu.

N'ime ọghọm ndị a na-ahụ anya na Dashboard n'onwe ya, ahụrụ m ihe ndị a:

  • ọ gaghị ekwe omume ịbanye na njikwa nke akpa init;
  • ọ gaghị ekwe omume idezi Deployments na StatefulSets, n'agbanyeghị na enwere ike idozi nke a na ClusterRole;
  • Ndakọrịta nke dashboard na ụdị Kubernetes kachasị ọhụrụ yana ọdịnihu nke ọrụ a na-ewelite ajụjụ.

Nsogbu ikpeazụ kwesịrị nlebara anya pụrụ iche.

Ọkwa dashboard na ndị ọzọ

Tebụlụ ndakọrịta dashboard na mwepụta Kubernetes, ewepụtara na ụdị ọrụ a kachasị ọhụrụ (v1.10.1), enwechaghị obi ụtọ:

Njikọ nke Kubernetes Dashboard na ndị ọrụ GitLab

N'agbanyeghị nke a, e nwere (ama nakweere na January) PR #3476, nke na-ekwupụta nkwado maka K8s 1.13. Na mgbakwunye, n'etiti okwu ọrụ ị nwere ike ịchọta ntụaka maka ndị ọrụ na-arụ ọrụ na panel na K8s 1.14. N'ikpeazụ, eme n'ime koodu ntọala ọrụ akwụsịla. Yabụ (opekata mpe!) Ọnọdụ n'ezie nke ọrụ ahụ adịghị njọ dị ka ọ nwere ike iyi na mbụ site na tebụl ndakọrịta gọọmentị.

N'ikpeazụ, enwere ụzọ ọzọ maka Dashboard. N'etiti ha:

  1. K8 dash - a na-eto eto interface (nke mbụ eme ụbọchị laghachi March nke afọ a), nke na-ama na-enye ezi atụmatụ, dị ka a visual nnọchiteanya nke ugbu a ọnọdụ nke ụyọkọ na njikwa nke ihe ya. Edoro dị ka "ntụgharị oge n'ezie", n'ihi na na-emelite data egosiri na-akpaghị aka na-achọghị ka ịmegharịa ibe ahụ na ihe nchọgharị ahụ.
  2. OpenShift Console - ihe ntanetị weebụ sitere na Red Hat OpenShift, nke, agbanyeghị, ga-eweta mmepe ndị ọzọ nke ọrụ ahụ na ụyọkọ gị, nke na-adabaghị maka onye ọ bụla.
  3. Kubernator bụ ọrụ na-adọrọ mmasị, nke emepụtara dị ka interface dị ala (karịa Dashboard) nwere ike ịlele ihe ụyọkọ niile. Agbanyeghị, ọ dị ka mmepe ya akwụsịla.
  4. Polaris - naanị ụbọchị ọzọ mara ọkwa oru ngo nke na-ejikọta ọrụ nke otu panel (na-egosi ọnọdụ nke ụyọkọ nke ugbu a, ma ọ dịghị achịkwa ihe ya) na akpaka "nkwenye nke omume kachasị mma" (na-enyocha ụyọkọ maka nhazi nke nhazi nke Deployments na-agba ọsọ na ya).

Kama ikwubi

Dashboard bụ ngwaọrụ ọkọlọtọ maka ụyọkọ Kubernetes anyị na-eje ozi. Njikọ ya na GitLab abụrụla akụkụ nke nrụnye ndabara anyị, ebe ọtụtụ ndị mmepe na-enwe obi ụtọ maka ike ha nwere na panel a.

Kubernetes Dashboard na-enwe usoro ọzọ site na obodo Open Source (anyị nwere obi ụtọ ịtụle ha), mana n'oge a, anyị na-anọgide na ngwọta a.

PS

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment