
Kubernetes Dashboard â njĂ« mjet i lehtĂ« pĂ«r t'u pĂ«rdorur pĂ«r tĂ« marrĂ« informacionet e fundit mbi klasterin e punĂ«s dhe pĂ«r menaxhim minimal. E vlerĂ«soni edhe mĂ« shumĂ« kur kĂ«to mundĂ«si janĂ« tĂ« nevojshme jo vetĂ«m pĂ«r administratorĂ«t/inxhinierĂ«t DevOps, por edhe pĂ«r ata qĂ« nuk janĂ« shumĂ« tĂ« familjarizuar me konsolĂ«n dhe/ose nuk kanĂ« ndĂ«rmend tĂ« merret me tĂ« gjitha nuancat e bashkĂ«punimit me kubectl dhe utilitetet e tjera. KĂ«shtu ndodhi edhe me ne: zhvilluesit dĂ«shironin njĂ« qasje tĂ« shpejtĂ« nĂ« ndĂ«rfaqen web tĂ« Kubernetes, dhe pasi ne pĂ«rdorim GitLab, zgjidhja erdhi natyrshĂ«m.
Pse kjo?
Zhvilluesit e drejtpĂ«rdrejtĂ« mund tĂ« jenĂ« tĂ« interesuar pĂ«r njĂ« mjet si K8s Dashboard pĂ«r detyra debugging. NdonjĂ«herĂ« dĂ«shirohet tĂ« shihni logĂ«t dhe burimet, dhe ndonjĂ«herĂ« tĂ« vrisni pod-Ă«t, tĂ« shkallĂ«zoni Deployments/StatefulSets dhe madje tĂ« hyni nĂ« konsolĂ«n e kontejnerĂ«ve (ndodhin edhe kĂ«rkesa tĂ« tilla, pĂ«r zgjidhjen e tĂ« cilave, megjithatĂ«, ka njĂ« mĂ«nyrĂ« tjetĂ«r â pĂ«r shembull, pĂ«rmes) ).
PĂ«rveç kĂ«saj, ka edhe njĂ« moment psikologjik pĂ«r drejtuesit kur duan tĂ« shohin klasterin â tĂ« shohin se "gjithçka Ă«shtĂ« e gjelbĂ«r" dhe kĂ«shtu tĂ« qetĂ«sohen se "gjithçka funksionon" (çfarĂ«, sigurisht, Ă«shtĂ« shumĂ« relative⊠por kjo tashmĂ« del jashtĂ« kufijve tĂ« artikullit).
Si një sistem CI standard, ne GitLab: e përdorin të gjithë zhvilluesit. Prandaj, për t'i dhënë atyre akses, ishte logjike të bëjmë integrimin e Dashboard me llogaritë në GitLab.
Do të theksoj gjithashtu se ne përdorim NGINX Ingress. Nëse po punoni me të tjera , do të kenë nevojë të gjejnë vetë ekuivalente të anotacioneve për autorizim.
Provojmë integrimin
Instalimi i Dashboard
Kujdes: NĂ«se po planifikoni tĂ« pĂ«rsĂ«risni hapat e pĂ«rshkruar mĂ« poshtĂ«, atĂ«herĂ« â pĂ«r tĂ« shmangur operacione tĂ« panevojshme â lexoni fillimisht deri nĂ« titullin tjetĂ«r.
Duke qenë se kjo integrim përdoret nga ne në shumë instalime, ne e kemi automatizuar instalimin e saj. Burimet që do të nevojiten për këtë janë publikuar në . Në thelb, ato janë konfigurime YAML të modifikuara pak nga , si dhe një skript Bash për shpërndarje të shpejtë.
Skripti instalon Dashboard në klaster dhe e konfiguroni atë për integrim me GitLab:
$ ./ctl.sh
Përdorimi: ctl.sh [OPCION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Instaloni kubernetes-dashboard në klasterin Kubernetes.
Argumentet e detyrueshme:
-i, --instalo instaloni në hapësirën 'kube-system'
-u, --përmirëso përmirësoni instalimin ekzistues, do të rishfrytëzojë fjalëkalimin dhe emrat e hostëve
-d, --fshi hiqni gjithçka, përfshirë hapësirën
--gitlab-url vendosni url-në e gitlab me skemë (https://gitlab.example.com)
--oauth2-id vendosni OAUTH2_PROXY_CLIENT_ID nga gitlab
--oauth2-secret vendosni OAUTH2_PROXY_CLIENT_SECRET nga gitlab
--dashboard-url vendosni url-në e dashboard pa skemë (dashboard.example.com)
Argumentet opsionale:
-h, --ndihmĂ« shkruani kĂ«tĂ« mesazhMegjithatĂ«, para se ta pĂ«rdorni, Ă«shtĂ« e nevojshme tĂ« hyni nĂ« GitLab: Zona e AdministratĂ«s â Aplikacionet â dhe tĂ« shtoni njĂ« aplikacion tĂ« ri pĂ«r panelin e ardhshĂ«m. Le tĂ« e quajmĂ« "kubernetes dashboard":

Si rezultat i shtimit të tij, GitLab do të ofrojë hashes:

Ato përdoren si argumente në skript. Si rezultat, instalimi duket si më poshtë:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comPas kësaj, le të kontrollojmë nëse gjithçka u aktivizua:
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1/1 Duke punuar 0 14s
oauth2-proxy-5586ccf95c-czp2v 1/1 Duke punuar 0 14sPara ose vonĂ«, gjithçka do tĂ« aktivizohet, megjithatĂ« autorizimi nuk do tĂ« funksionojĂ« menjĂ«herĂ«! Kjo Ă«shtĂ« pĂ«r shkak se nĂ« imazhin e pĂ«rdorur (situata nĂ« imazhe tĂ« tjera Ă«shtĂ« e ngjashme) procesi i kapjes sĂ« ridirections nĂ« callback Ă«shtĂ« implementuar gabim. Kjo shkakton qĂ« oauth tĂ« fshijĂ« cookie-n qĂ« vetĂ« (oauth) na ofronâŠ
Problemi zgjidhet duke ndërtuar imazhin tuaj oauth me një patch.
Patch për oauth dhe rinovimin e instalimit
Për këtë, do të përdorim Dockerfile-në e mëposhtme:
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/
EKSPOZONI 8080 4180
PĂRFUNDONI [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]Ja si duket patch-i vetë rd.patch
diferenca --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 "... po kryer testet"
-./test.sh
+#./test.sh
-for os in windows linux darwin; do
- echo "... duke ndërtuar v$version për $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 "... duke ndërtuar v$version për $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
diferenca --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 Tani mund të realizojmë ndërtimin e imazhit dhe të 'push' më pas në GitLab-in tonë. Më pas, në manifests/kube-dashboard-oauth2-proxy.yaml do të specifikojmë përdorimin e imazhit të nevojshëm (zëvendësoni atë me tuajin):
image: docker.io/colemickens/oauth2_proxy:latestNĂ«se keni njĂ« regjistrim tĂ« mbyllur me autorizim â mos harroni tĂ« shtoni pĂ«rdorimin e sekreteve pĂ«r tĂ« shkarkuar imazhet:
imagePullSecrets:
- name: gitlab-registry⊠dhe shtoni vetë sekretin për regjistrin:
---
apiVersion: v1
data:
.dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
annotations:
name: gitlab-registry
namespace: kube-system
type: kubernetes.io/dockercfgLexuesi i kujdesshëm do të vërë re se rruga e gjatë e dhënë më sipër është base64 e konfigurimit:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "mail@company.com"
}
}Këto janë të dhëna për përdoruesin në GitLab, me kodin me të cilin Kubernetes do të shkarkojë imazhin nga regjistri.
Pasi të jetë bërë gjithçka, mund të fshini instalimin aktual (të papërshtatshëm) të Dashboard me komandën:
$ ./ctl.sh -d⊠dhe të instaloni gjithçka nga e para:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comKa ardhur koha të hyjmë në Dashboard dhe të gjejmë butonin e zakonshëm për autorizimin:

Pas klikuar mbi të, do të takohemi me GitLab, i cili na ofron të identifikohemi në faqen e tij të zakonshme (sigurisht, nëse nuk jemi autorizuar më parë atje):

Identifikohemi me tĂ« dhĂ«nat e identifikimit tĂ« GitLab â dhe gjithçka u realizua:

Rreth mundësive të Dashboard
Nëse jeni një zhvillues që nuk keni punuar më parë me Kubernetes, ose thjesht për ndonjë arsye nuk keni pasur kontakt me Dashboard, do ilustroj disa nga mundësitë e tij.
Së pari, mund të shihni se "gjithçka është e gjelbër":

Përpodet janë të disponueshme edhe të dhëna më të detajuara, të tilla si variablat e mjedisit, imazhi i shkarkuar, argumentet e fillimit, gjendja e tyre:

Për ndërtimet duken statuset:

⊠dhe detaje të tjera:

⊠si dhe mundësia për të përmasuar ndërtimin:

Rezultati i kësaj operacione:

Mes mundësive të tjera të dobishme, të përmendura më herët, ka edhe shikimin e logëve:

⊠dhe funksioni për të hyrë në konsolën e kontejnerëve të pod-it të zgjedhur:

Ndërkohë, mund të shihni gjithashtu dhe limitet/kerkesat në nyjet:

Sigurisht, këto nuk janë të gjitha mundësitë e panelit, por shpresoj që një paraqitje e përgjithshme është krijuar.
Dështimet e integrimit dhe Dashboard
NĂ« integrimin e pĂ«rshkruar nuk ka ndarje aksesit. Me tĂ«, tĂ« gjithĂ« pĂ«rdoruesit qĂ« kanĂ« ndonjĂ« akses nĂ« GitLab, kanĂ« qasje nĂ« Dashboard. Qasja nĂ« vetĂ« Dashboard Ă«shtĂ« e njĂ«jtĂ« pĂ«r ta, e pĂ«rshtatshme sipas tĂ« drejtave tĂ« vetĂ« Dashboard, tĂ« cilat . ĂshtĂ« e qartĂ« se kjo nuk do tĂ« pĂ«rshtatet me tĂ« gjithĂ«, por pĂ«r rastin tonĂ« u duk e mjaftueshme.
Nga të metat e dukshme në vetë panelin Dashboard, do të përmendja të following:
- nuk ka mundësi për të hyrë në konsolën e kontejnerit init;
- nuk është e mundur të redaktohen Deployments dhe StatefulSets, megjithëse kjo është e korrigjueshme në ClusterRole;
- përputhshmëria e Dashboard me versionet e fundit të Kubernetes dhe e ardhmja e projektit ngjall pyetje.
Problemi i fundit meriton vëmendje të veçantë.
Statusi dhe alternativat e Dashboard
Tabelat e përputhshmërisë së Dashboard me lëshimet e Kubernetes, të paraqitura në versionin më të fundit të projektit (), nuk është shumë inkurajues:

Megjithatë, ekziston (e pranuar tashmë në janar) , e cila shpall mbështetje për K8s 1.13. Për më tepër, midis çështjeve të projektit mund të gjeni përmendje të përdoruesve që punojnë me panelin në K8s 1.14. Në fund, në bazën e kodit të projektit nuk ndalen. Prandaj, (të paktën!) statusi aktual i projektit nuk është aq i keq sa mund të duket më parë nga tabela zyrtare e përputhshmërisë.
SĂ« fundi, Dashboard ka alternativa. Midis tyre:
- â njĂ« ndĂ«rfaqe e re (komitetet e para datojnĂ« nga marsi i kĂ«tij viti), tashmĂ« ofron mundĂ«si tĂ« mira, siç Ă«shtĂ« paraqitja vizuale e statusit aktual tĂ« klashtit dhe menaxhimi i objekteve tĂ« tij. Pozicionohet si "ndĂ«rfaqe nĂ« kohĂ« reale", pasi pĂ«rditĂ«son automatikisht tĂ« dhĂ«nat e display-it, pa kĂ«rkuar rifreskimin e faqes nĂ« shfletues.
- â njĂ« ndĂ«rfaqe web nga Red Hat OpenShift, e cila, megjithatĂ«, do tĂ« sjellĂ« nĂ« klashtin tuaj dhe zhvillime tĂ« tjera nga projekti, qĂ« nuk i pĂ«rshtaten çdo pĂ«rdoruesi.
- â njĂ« projekt interesant, i krijuar si njĂ« ndĂ«rfaqe mĂ« e ulĂ«t (se Dashboard) me mundĂ«sinĂ« pĂ«r tĂ« parĂ« tĂ« gjitha objektet e klashtit. MegjithatĂ«, duket se zhvillimi i tij Ă«shtĂ« ndalur.
- â dosja e sapoannoncuar projekti qĂ« kombinon funksionet e njĂ« paneli (tregon gjendjen aktuale tĂ« klasterit, por nuk menaxhon objektet e tij) dhe "validimin automatik tĂ« praktikave mĂ« tĂ« mira" (kontrollon klasterin pĂ«r saktĂ«sinĂ« e konfigurimeve tĂ« vĂ«na nĂ« tĂ« Deployments).
Në vend të rezultateve
Dashboard â instrumenti standard pĂ«r klashtet Kubernetes, tĂ« cilat ne i shĂ«rbejmĂ«. Integrimi i tij me GitLab gjithashtu Ă«shtĂ« bĂ«rĂ« pjesĂ« e "instalimit tonĂ« tĂ« paracaktuar", pasi shumĂ« zhvillues janĂ« tĂ« gĂ«zuar pĂ«r mundĂ«sitĂ« qĂ« kanĂ« me kĂ«tĂ« panel.
Në Kubernetes Dashboard herë pas here dalin alternativa nga komuniteti Open Source (dhe ne jemi të gëzuar t'i shqyrtojmë ato), megjithatë në këtë fazë mbetemi me këtë zgjidhje.
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
