
Kubernetes Dashboard on lihtne tööriist, mis vĂ”imaldab saada teavet töötava klastrite kohta ja hallata seda minimaalselt. TĂ”eliselt hindad seda, kui juurdepÀÀs nendele funktsioonidele on vajalik mitte ainult administraatoritele ja DevOps-inseneridele, vaid ka neile, kes ei ole harjunud kĂ€sureaga ja/vĂ”i ei soovi tegeleda kĂ”ikide kubectl ja muude tööriistade nĂŒanssidega. Nii juhtus ka meil: arendajatele tekkis vajadus kiireks juurdepÀÀsuks Kubernetes'i veebiliidesele, ja kuna me kasutame GitLabi, tundus lahendus iseenesestmĂ”istetav.
Miks see on vajalik?
Otsesed arendajad vĂ”ivad olla huvitatud sellisest tööriistast nagu K8s Dashboard veaparanduse ĂŒlesannete jaoks. Vahel on soov nĂ€ha logisid ja ressursse, vahel aga lĂ”petada pod'e, suurendada Deployments/StatefulSets ja isegi siseneda konteinerite konsooli (sellised taotlused esinevad, kuid nende lahendamiseks on olemas ka teisi viise â nĂ€iteks lĂ€bi ).
Lisaks on juhtide jaoks ka psĂŒhholoogiline aspekt, kui nad soovivad vaadata klastrit â nĂ€ha, et "kĂ”ik on roheline" ja seelĂ€bi rahuneda, et "kĂ”ik töötab" (mida muidugi on raske tĂ”estada... aga see jÀÀb juba artikli piiridest vĂ€lja).
Meie standardseks CI-sĂŒsteemiks on GitLab: seda kasutavad kĂ”ik arendajad. SeetĂ”ttu oli mĂ”istlik luua Dashboardi ja GitLabi kontode vahel integratsioon.
Lisaks mainin, et kasutame NGINX Ingressi. Kui aga töötate teistega , peate ise leidma sarnased annotatsioonid autentimiseks.
Proovime integratsiooni
Dashboardi installimine
TĂ€helepanu: Kui kavatsete allpool kirjeldatud samme korrata, siis â vĂ€ltimaks tarbetuid toiminguid â loe enne jĂ€rgmise alapeatĂŒki juurde liikumist lĂ”puni.
Kuna seda integratsiooni kasutatakse mitmes paigalduses, oleme selle installimise automatiseerinud. Allikafailid, mida selleks vajate, on avaldatud . Need pÔhinevad kergelt muudetud YAML-konfiguratsioonidel , ning Bash-skript kiireks juurutamiseks.
Skript installib Dashboard'i klastrisse ja seadistab selle integreerimiseks GitLabiga:
$ ./ctl.sh
Kasutus: ctl.sh [VALIK]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Installib kubernetes-dashboard'i Kubernetes'i klastrisse.
Kohustuslikud argumendid:
-i, --install installib 'kube-system' nimespetsi
-u, --upgrade uuendab olemasolevat installatsiooni, taaskasutab parooli ja hostinimesid
-d, --delete eemaldab kÔik, sealhulgas nimespets
--gitlab-url seadistab gitlab URL-i skeemiga (https://gitlab.example.com)
--oauth2-id seadistab OAUTH2_PROXY_CLIENT_ID gitlabist
--oauth2-secret seadistab OAUTH2_PROXY_CLIENT_SECRET gitlabist
--dashboard-url seadistab dashboard URL-i ilma skeemita (dashboard.example.com)
Valikuline argument:
-h, --help kuvab selle sĂ”numiKuid enne selle kasutamist tuleb minna GitLabi: Admin ala â Rakendused â ja lisada uus rakendus tulevase paneeli jaoks. Nimeks saame 'kubernetes dashboard':

Tulemuseks, pÀrast selle lisamist, annab GitLab jÀrgmised hash'id:

Just neid kasutatakse argumendina skripti jaoks. Tulemuseks, installatsioon nÀeb vÀlja jÀrgmiselt:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comPÀrast seda kontrollime, et kÔik kÀivitub:
$ 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 14sVarem vĂ”i hiljem kĂ”ik tööle hakkab, aga autentimine ei hakka kohe tööle! Asi on selles, et kasutatav pilt (sarnased probleemid on ka muude piltide puhul) on valesti rakendanud redirekti pĂŒĂŒdmise protsessi callbackis. See toob kaasa selle, et oauth kustutab kĂŒpsise, mille ta meile (oauth) ise annab...
Probleem lahendatakse, koostades oma oauth pildi koos patĆĄiga.
PatĆĄ oauth'ile ja uuesti installimine
Selleks 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 patƥ 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 "... testid kÀimas"
-./test.sh
+#./test.sh
-for os in windows linux darwin; do
- echo "... ehitame 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 "... ehitame 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 luua pilt ja 'push' see meie GitLabi. Edasi manifests/kube-dashboard-oauth2-proxy.yaml mĂ€rkime vajaliku pildi kasutamise (asendage see oma omaga):
image: docker.io/colemickens/oauth2_proxy:latestKui teil on autoga seotud registry, Àrge unustage lisada saladuse kasutamist 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/dockercfgHoolikas lugeja mÀrkab, et eespool toodud pikk rida on base64 konfiguratsioonist:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "mail@company.com"
}
}Need on kasutaja andmed GitLabis, mida Kubernetes kasutab pildi tÔmbamiseks registry'lt.
PÀrast kÔike seda saab kÀivitada jÀrgmist kÀsku, et eemaldada praegune (vale) Dashboard'i installatsioon:
$ ./ctl.sh -d⊠ja installida kÔik uuesti:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comOn aeg sisse logida Dashboard'i ja leida ĂŒsna vanaaegne sisselogimise nupp:

PĂ€rast selle vajutamist tervitab meid GitLab, pakkudes sisselogimist oma tuttaval lehel (loomulikult, kui me ei ole seal eelnevalt sisse loginud):

Logime sisse oma GitLabi andmetega â ja kĂ”ik on tehtud:

Dashboard'i vÔimalustest
Kui olete arendaja, kes pole kunagi Kubernetesega töötanud, vĂ”i olete mingil pĂ”hjusel varem Dashboard'iga kokku puutunud â illustreerin mĂ”ned tema vĂ”imalused.
Esiteks, saate vaadata, et "kÔik on roheline":

Pod'ide kohta on saadaval ka ĂŒksikasjalikumad andmed, nagu keskkonnamuutujad, tĂ”mmatud pilt, kĂ€ivitusargumendid, nende seisund:

Deployment'ide staatuseid on nÀha:

⊠ja muid ĂŒksikasju:

⊠samuti on vÔimalik skaleerida deployment'i:

Selle operatsiooni tulemus:

Muude kasulike vÔimaluste seas, millest artikli alguses juba rÀÀgitud, on logide vaatamine:

⊠ja vÔimalus siseneda valitud pod'i konteinerite konsooli:

Lisaks on vÔimalik vaadata ka node'ide limit'e/request'e:

Muidugi ei ole need kĂ”ik paneeli vĂ”imalused, aga loodan, et ĂŒldine arusaam on selgunud.
Integreerimise ja Dashboardi puudused
Kirjeldatud integreerimises puudub igasugune juurdepÀÀsu piiramise. Sellega saavad kÔik kasutajad, kellel on ligipÀÀs GitLabile, juurdepÀÀsu Dashboard'ile. Dashboard'is on neil kÔikidel sama juurdepÀÀs, mis vastab Dashboard'i Ôigustele, . Selge on, et see ei sobi kÔigile, kuid meie puhul osutus see piisavaks.
MÔned mÀrkimisvÀÀrsed miinused DashboarM'i paneelis on jÀrgmised:
- ei ole vÔimalik pÀÀseda init-konteineri konsooli;
- ei saa redigeerida Deployments ja StatefulSets, kuigi seda on vÔimalik parandada ClusterRole'is;
- Dashboard'i ĂŒhilduvus Kubernetes'i uusimate versioonidega ja projekti tulevik tekitavad kĂŒsimusi.
Viimane probleem vÀÀrib eraldi tÀhelepanu.
Dashboard'i staatus ja alternatiivid
Dashboard'i ĂŒhilduvustabel Kubernetes'i vĂ€ljaannetega, mis esitati projekti viimasel versioonil (), ei ole vĂ€ga lohutav:

Ometi on olemas (juba jaanuaris aktsepteeritud) , mis kuulutab vĂ€lja K8s 1.13 toe. Lisaks vĂ”ib projekti issues leida kasutajate mainimisi, kes töötavad paneeliga K8s 1.14. LĂ”puks, projekti koodibaasi ei ole peatunud. Nii et (minimaalselt!) ei ole projekti tegelik staatus nii halb, nagu vĂ”ib esialgu tunduda ametlikust ĂŒhilduvustabelist.
LÔpuks, Dashboard'il on alternatiive. Nende hulgas:
- â noor liides (esimesed commitid pĂ€rinevad selle aasta mĂ€rtsist), mis pakub juba korralikke vĂ”imalusi, nĂ€iteks klambri praeguse staatuse visuaalset esitlust ja selle objektide haldamist. Positsioneeritakse kui "reaalaegne liides", kuna vĂ€rskendab kuvatavaid andmeid automaatselt, ilma et oleks vaja brauseris lehte uuendada.
- â Red Hat OpenShift'i veebiliides, mis toob teie klambri ka projekti muid arendusi, mis ei pruugi kĂ”igile sobida.
- â huvitav projekt, mis loodi madalama taseme (kui Dashboard) liidese jaoks, et vaadata klambri kĂ”iki objekte. Siiski tundub, et selle arendamine on peatunud.
- â literal paar pĂ€eva tagasi projekt, mis ĂŒhendab panelli funktsioonid (kuvab klambri hetkeseisu, kuid ei halda selle objekte) ja automaatse "parimate praktikate valideerimise" (kontrollib klambrit jooksutatud Deployments'i seadistuste Ă”igsuse suhtes).
KokkuvÔtte asemel
Kubernetes Dashboard on meie hallatavate klastrite standardne tööriist. Selle integreerimine GitLabiga on samuti osa meie «vaikespetsifikatsioonist», kuna paljud arendajad hindavad selle paneeli pakutavaid vÔimalusi.
Kubernetes Dashboardil on aeg-ajalt alternatiive Open Source kogukonnalt (ja me oleme valmis neid kaaluma), kuid praegu jÀÀme selle lahenduse juurde.
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
