
Kubernetes Dashboard Àr ett lÀttanvÀnt verktyg för att fÄ uppdaterad information om ditt löpande kluster och hantera det med minimal anstrÀngning. Du börjar uppskatta det Ànnu mer nÀr Ätkomst till dessa funktioner behövs inte bara av administratörer/DevOps-ingenjörer, utan ocksÄ av de som Àr mindre vana vid konsolen och/eller inte har för avsikt att ta itu med alla krÄngligheterna med att interagera med kubectl och andra verktyg. Detta hÀnde med oss: utvecklarna ville ha snabb tillgÄng till Kubernetes webbgrÀnssnitt, och eftersom vi anvÀnder GitLab kom lösningen naturligt.
Varför Àr detta?
Direktutvecklare kan vara intresserade av ett verktyg som K8s Dashboard för felsökningsuppgifter. Ibland vill du se loggar och resurser, och ibland döda poddar, skala Deployments/StatefulSets och till och med gÄ till containerkonsolen (det finns ocksÄ sÄdana förfrÄgningar, men det finns ett annat sÀtt för - t.ex. ).
Dessutom finns det ett psykologiskt ögonblick för chefer nÀr de vill titta pÄ klustret - att se att "allt Àr grönt", och dÀrmed försÀkra sig om att "allt fungerar" (vilket naturligtvis Àr vÀldigt relativt... men detta ligger utanför artikelns rÀckvidd).
Som ett standard CI-system har vi GitLab: alla utvecklare anvÀnder det ocksÄ. DÀrför, för att ge dem Ätkomst, var det logiskt att integrera Dashboard med GitLab-konton.
Jag kommer ocksÄ att notera att vi anvÀnder NGINX Ingress. Om du jobbar med andra , mÄste du sjÀlvstÀndigt hitta analoger till annoteringar för auktorisering.
Försöker integration
Installation av instrumentbrÀda
Varning: Om du ska upprepa stegen nedan, lÀs först till nÀsta underrubrik - för att undvika onödiga operationer.
Eftersom vi anvÀnder denna integration i mÄnga installationer har vi automatiserat installationen. De kÀllor som behövs för detta publiceras i . De Àr baserade pÄ nÄgot modifierade YAML-konfigurationer frÄn , samt ett Bash-skript för snabb distribution.
Skriptet installerar Dashboard i klustret och konfigurerar det för integration med 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 messageInnan du anvĂ€nder den mĂ„ste du dock gĂ„ till GitLab: Admin area â Applications - och lĂ€gga till en ny applikation för den framtida panelen. LĂ„t oss kalla det "kubernetes instrumentpanel":

Som ett resultat av att lÀgga till det kommer GitLab att tillhandahÄlla hasharna:

Det Àr de som anvÀnds som argument till manuset. Som ett resultat ser installationen ut sÄ hÀr:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comEfter det, lÄt oss kontrollera att allt började:
$ 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 14sFörr eller senare börjar dock allt auktorisering kommer inte att fungera omedelbart! Faktum Àr att i bilden som anvÀnds (situationen i andra bilder Àr liknande) Àr processen att fÄnga en omdirigering i Äteruppringningen implementerad felaktigt. Denna omstÀndighet leder till att oauth raderar cookien som oauth sjÀlv tillhandahÄller oss...
Problemet löses genom att bygga din egen oauth-bild med en patch.
Patcha oauth och installera om
För att göra detta kommer vi att anvÀnda följande 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" ]Och sÄ hÀr ser sjÀlva rd.patch-patchen ut
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 Nu kan du bygga bilden och skjuta in den i vÄrt GitLab. NÀsta in manifests/kube-dashboard-oauth2-proxy.yaml ange anvÀndningen av den önskade bilden (ersÀtt den med din egen):
image: docker.io/colemickens/oauth2_proxy:latestOm du har ett register som Àr stÀngt med auktorisering, glöm inte att lÀgga till anvÀndningen av en hemlighet för pull-bilder:
imagePullSecrets:
- name: gitlab-registry... och lÀgg till sjÀlva hemligheten för registret:
---
apiVersion: v1
data:
.dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
annotations:
name: gitlab-registry
namespace: kube-system
type: kubernetes.io/dockercfgDen uppmÀrksamma lÀsaren kommer att se att den lÄnga strÀngen ovan Àr base64 frÄn konfigurationen:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "mail@company.com"
}
}Detta Àr anvÀndardata i GitLab, Kubernetes-koden kommer att dra bilden frÄn registret.
NÀr allt Àr klart kan du ta bort den nuvarande (inte fungerar korrekt) Dashboard-installationen med kommandot:
$ ./ctl.sh -d... och installera allt igen:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comDet Àr dags att gÄ till instrumentpanelen och hitta en ganska arkaisk inloggningsknapp:

Efter att ha klickat pÄ den kommer GitLab att hÀlsa oss vÀlkomna och erbjuda sig att logga in pÄ sin vanliga sida (naturligtvis om vi inte tidigare har loggat in dÀr):

Vi loggar in med GitLab-uppgifter - och allt Àr klart:

Om Dashboard-funktioner
Om du Àr en utvecklare som inte har arbetat med Kubernetes tidigare, eller helt enkelt av nÄgon anledning inte har stött pÄ Dashboard tidigare, kommer jag att illustrera nÄgra av dess möjligheter.
För det första kan du se att "allt Àr grönt":

Mer detaljerad data Àr ocksÄ tillgÀnglig för poddar, sÄsom miljövariabler, nedladdad bild, startargument och deras tillstÄnd:

Implementeringar har synliga statusar:

...och andra detaljer:

... och det finns ocksÄ möjligheten att skala distributionen:

Resultatet av denna operation:

Bland andra anvÀndbara funktioner som redan nÀmnts i början av artikeln Àr att visa loggar:

... och funktionen för att logga in pÄ behÄllarkonsolen för den valda podden:

Till exempel kan du ocksÄ titta pÄ grÀnserna/förfrÄgningarna pÄ noder:

Naturligtvis Àr detta inte alla funktioner i panelen, men jag hoppas att du förstÄr den allmÀnna uppfattningen.
Nackdelar med integration och Dashboard
I den beskrivna integrationen finns ingen Ätkomstkontroll. Med den fÄr alla anvÀndare med nÄgon tillgÄng till GitLab tillgÄng till Dashboard. De har samma Ätkomst i sjÀlva Dashboarden, motsvarande rÀttigheterna för sjÀlva Dashboarden, vilket . Uppenbarligen Àr detta inte lÀmpligt för alla, men för vÄrt fall visade det sig vara tillrÀckligt.
Bland de mÀrkbara nackdelarna i sjÀlva instrumentpanelen noterar jag följande:
- det Àr omöjligt att komma in i konsolen pÄ initbehÄllaren;
- det Àr omöjligt att redigera Deployments och StatefulSets, Àven om detta kan fixas i ClusterRole;
- Dashboards kompatibilitet med de senaste versionerna av Kubernetes och projektets framtid vÀcker frÄgor.
Det sista problemet förtjÀnar sÀrskild uppmÀrksamhet.
Instrumentpanelens status och alternativ
Dashboard-kompatibilitetstabell med Kubernetes-versioner, presenterad i den senaste versionen av projektet (), inte sÀrskilt nöjd:

Trots detta finns det (redan antaget i januari) , som tillkÀnnager stöd för K8s 1.13. Dessutom kan du bland projektfrÄgorna hitta referenser till anvÀndare som arbetar med panelen i K8s 1.14. Till sist, in i projektets kodbas inte sluta. SÄ (Ätminstone!) den faktiska statusen för projektet Àr inte sÄ dÄlig som det först kan verka frÄn den officiella kompatibilitetstabellen.
Slutligen finns det alternativ till Dashboard. Bland dem:
- â ett ungt grĂ€nssnitt (de första Ă„tagandena gĂ„r tillbaka till mars i Ă„r), som redan erbjuder bra funktioner, sĂ„som en visuell representation av klustrets nuvarande status och hantering av dess objekt. Positionerad som ett "realtidsgrĂ€nssnitt", eftersom uppdaterar automatiskt den visade informationen utan att du behöver uppdatera sidan i webblĂ€saren.
- - ett webbgrÀnssnitt frÄn Red Hat OpenShift, som dock kommer att föra andra utvecklingar av projektet till ditt kluster, vilket inte Àr lÀmpligt för alla.
- Àr ett intressant projekt, skapat som ett grÀnssnitt pÄ lÀgre nivÄ (Àn Dashboard) med möjlighet att se alla klusterobjekt. Det ser dock ut som att dess utveckling har avstannat.
- - hÀromdagen ett projekt som kombinerar funktionerna i en panel (visar det aktuella tillstÄndet för klustret, men hanterar inte dess objekt) och automatisk "validering av bÀsta praxis" (kontrollerar klustret för korrektheten av konfigurationerna av distributioner som körs i det).
I stÀllet för slutsatser
Dashboard Àr ett standardverktyg för de Kubernetes-kluster vi betjÀnar. Dess integration med GitLab har ocksÄ blivit en del av vÄr standardinstallation, eftersom mÄnga utvecklare Àr entusiastiska över de möjligheter de har med den hÀr panelen.
Kubernetes Dashboard har periodvis alternativ frÄn Open Source-communityn (och vi övervÀger dem gÀrna), men i det hÀr skedet stÄr vi kvar med denna lösning.
PS
LÀs Àven pÄ vÄr blogg:
- «";
- «";
- «";
- «".
KĂ€lla: will.com
