
Kubernetes Dashboard Àr ett anvÀndarvÀnligt verktyg för att fÄ aktuell information om en fungerande kluster och för att hantera det minimalt. Du börjar uppskatta det Ànnu mer nÀr Ätkomst till dessa funktioner behövs inte bara av administratörer/DevOps-ingenjörer, utan Àven av dem som Àr mindre vana vid konsolen och/eller inte har för avsikt att fördjupa sig i alla subtiliteter kring interaktionen med kubectl och andra verktyg. SÄ har det blivit för oss: utvecklarna ville ha snabb Ätkomst till webgrÀnssnittet för Kubernetes, och eftersom vi anvÀnder GitLab blev lösningen uppenbar.
Varför detta?
Direkta utvecklare kan vara intresserade av ett verktyg som K8s Dashboard för felsökningsuppgifter. Ibland vill man granska loggar och resurser, och ibland till och med döda pods, skala Deployments/StatefulSets och till och med komma Ă„t containrarnas konsol (det förekommer sĂ„dana förfrĂ„gningar, för att lösa vilka det dock finns en annan vĂ€g â till exempel genom ).
Dessutom finns det en psykologisk aspekt för ledare, nĂ€r de vill titta pĂ„ klustret â se att "allt Ă€r grönt", och dĂ€rmed lugna sig att "allt fungerar" (vilket naturligtvis Ă€r ganska relativt... men detta gĂ„r redan utanför artikelns Ă€mne).
Som standard CI-system anvÀnder vi GitLab: den anvÀnds av alla utvecklare. SÄ för att ge dem tillgÄng var det logiskt att integrera Dashboard med konton i GitLab.
Jag noterar ocksÄ att vi anvÀnder NGINX Ingress. Om du arbetar med andra , behöver du sjÀlv hitta motsvarande annoteringar för autentisering.
Vi testar integrationen
Installation av Dashboard
Observera: Om du planerar att upprepa de steg som beskrivs nedan, lÀs först fram till nÀsta underrubrik för att undvika onödiga ÄtgÀrder.
Eftersom denna integration anvÀnds av oss i mÄnga installationer har vi automatiserat dess installation. KÀllkoden som behövs för detta har publicerats i . De bygger pÄ nÄgot modifierade YAML-konfigurationer frÄn , samt ett Bash-skript för snabb utrullning.
Skriptet installerar Dashboard i klustret och konfigurerar det för integration med GitLab:
$ ./ctl.sh
AnvÀndning: ctl.sh [ALTERNATIV]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Installera kubernetes-dashboard i Kubernetes-klustret.
Obligatoriska argument:
-i, --install installera i 'kube-system' namespace
-u, --upgrade uppgradera befintlig installation, kommer att ÄteranvÀnda lösenord och vÀrdnamn
-d, --delete ta bort allt, inklusive namnet
--gitlab-url stÀll in gitlab-url med schema (https://gitlab.example.com)
--oauth2-id stÀll in OAUTH2_PROXY_CLIENT_ID frÄn gitlab
--oauth2-secret stÀll in OAUTH2_PROXY_CLIENT_SECRET frÄn gitlab
--dashboard-url stÀll in dashboard-url utan schema (dashboard.example.com)
Valfria argument:
-h, --help visa detta meddelandeMen innan du anvĂ€nder det mĂ„ste du gĂ„ till GitLab: AdminomrĂ„de â Applikationer â och lĂ€gga till en ny applikation för den framtida panelen. Vi kallar den "kubernetes dashboard":

Som ett resultat av att den lagts till kommer GitLab att tillhandahÄlla hashvÀrden:

Dessa anvÀnds som argument till skriptet. SÄ installationen ser ut som följer:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comEfter detta kontrollerar vi att allt har startat:
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1/1 Kör 0 14s
oauth2-proxy-5586ccf95c-czp2v 1/1 Kör 0 14sFörr eller senare kommer allt att starta, men direkt kommer autentiseringen inte att fungera! Grejen Àr att i den anvÀnda bilden (situation i andra bilder Àr liknande) Àr processen för att fÄnga omdirigeringen i callback felaktigt implementerad. Detta leder till att oauth raderar cookies, som den sjÀlv (oauth) tillhandahÄller oss...
Problemet löses genom att bygga en egen oauth-bild med en patch.
Patch för oauth och en ny installation
För detta ÀndamÄl anvÀnder vi 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" ]SÄ hÀr ser sjÀlva patchen rd.patch 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 "... kör tests"
-.\/test.sh
+#.\/test.sh
-for os in windows linux darwin; do
- echo "... bygger v$version fö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 "... bygger v$version fö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
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 vi bygga bilden och 'push' den till vÄr GitLab. DÀrefter i manifests/kube-dashboard-oauth2-proxy.yaml ange anvÀndningen av önskad bild (byt ut den mot din):
image: docker.io/colemickens/oauth2_proxy:latestOm du har en privat registrering med autentisering - glöm inte att lÀgga till sekretess för att dra bilder:
imagePullSecrets:
- name: gitlab-registry⊠och lÀgg till sjÀlva hemligheten för registreringen:
---
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 ovanstÄende lÄnga strÀngen Àr base64 av konfigurationen:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "mail@company.com"
}
}Detta Àr anvÀndardata för GitLab, koden som Kubernetes kommer att anvÀnda för att hÀmta bilden frÄn registreringen.
NÀr allt Àr klart kan vi ta bort den nuvarande (felaktigt fungerande) installationen av Dashboard med kommandot:
$ ./ctl.sh -d⊠och installera allt pÄ nytt:
$ ./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 Dashboard och hitta den ganska förÄldrade autentiseringsknappen:

NÀr vi trycker pÄ den möts vi av GitLab, som erbjuder oss att logga in pÄ sin vanliga sida (naturligtvis om vi inte har loggat in dÀr tidigare):

Vi autentiserar oss med vĂ„ra GitLab-uppgifter â och allt Ă€r klart:

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

För poddar finns detaljerad information tillgÀnglig, sÄsom miljövariabler, nedladdad bild, startargument och deras status:

För deployment visas statusar:

⊠och andra detaljer:

⊠och det finns Àven möjlighet att skala upp deployment:

Resultatet av denna ÄtgÀrd:

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

⊠och möjligheten att gÄ in i konsolen för containrar i den valda podden:

Dessutom kan man till exempel se limit/requests pÄ noder:

SjÀlvklart Àr detta inte alla funktioner i panelen, men jag hoppas att en allmÀn bild har skapats.
Nackdelar med integration och Dashboard
I den beskrivna integrationen finns det inget Ätkomstkontroll. Med det fÄr alla anvÀndare som har nÄgon Ätkomst till GitLab ocksÄ Ätkomst till Dashboard. à tkomsten i Dashboard Àr densamma för dem, vilken motsvarar rÀttigheterna i sjÀlva Dashboard, som . Det Àr uppenbart att detta inte passar alla, men för vÄrt fall visade det sig vara tillrÀckligt.
Bland de mÀrkvÀrdiga nackdelarna med sjÀlva Dashboard-panelen noterar jag följande:
- det gÄr inte att komma Ät konsolen för init-containern;
- det gÄr inte att redigera Deployments och StatefulSets, Àven om detta kan ÄtgÀrdas i ClusterRole;
- kompatibiliteten mellan Dashboard och de senaste versionerna av Kubernetes och projektets framtid vÀcker frÄgor.
Det sista problemet förtjÀnar sÀrskild uppmÀrksamhet.
Status och alternativ till Dashboard
Kompatibilitetstabellen för Dashboard med Kubernetes versioner, som presenteras i den senaste versionen av projektet (), Àr inte sÀrskilt upplyftande:

Trots detta finns det (redan accepterad i januari) , som meddelar stöd för K8s 1.13. Dessutom kan man bland projektets problem hitta omnÀmnanden av anvÀndare som arbetar med panelen i K8s 1.14. Slutligen, i projektets kodbas upphör inte. SÄ (Ätminstone!) Àr den faktiska statusen för projektet inte sÄ dÄlig som den först kan verka utifrÄn den officiella kompatibilitetstabellen.
Till sist finns det alternativ till Dashboard. Bland dessa:
- â ett ungt grĂ€nssnitt (första commits dateras frĂ„n mars i Ă„r) som redan erbjuder ganska bra möjligheter, sĂ„som visuell representation av den aktuella statusen för klustret och hantering av dess objekt. Positioneras som "ett realtidsgrĂ€nssnitt", eftersom det automatiskt uppdaterar de visade uppgifterna utan att behöva uppdatera sidan i webblĂ€saren.
- â ett webbgrĂ€nssnitt frĂ„n Red Hat OpenShift, som dock kommer att föra in andra resultat frĂ„n projektet i ditt kluster, vilket kanske inte passar alla.
- â ett intressant projekt, skapat som ett mer lĂ„g nivĂ„ (Ă€n Dashboard) grĂ€nssnitt dĂ€r man kan se alla objekt i klustret. Men det verkar som om dess utveckling har avstannat.
- â bokstavligt talat nyligen ett projekt som kombinerar funktioner av en panel (visar den aktuella statusen för klustret men hanterar dess objekt) och automatisk "validering av bĂ€sta praxis" (kontrollerar klustret för korrekthet i konfigurationerna av de Deployments som körs i det).
IstÀllet för slutsatser
Dashboard â standardverktyget för Kubernetes-kluster som vi underhĂ„ller. Dess integration med GitLab blev ocksĂ„ en del av vĂ„r "standardinstallation", eftersom mĂ„nga utvecklare Ă€r glada över de möjligheter som öppnas med denna panel.
Det dyker regelbundet upp alternativ för Kubernetes Dashboard frÄn Open Source-communityt (och vi Àr glada att övervÀga dem), men i dagslÀget stannar vi med denna lösning.
P.S.
LÀs Àven i vÄr blogg:
- «»;
- «»;
- «»;
- «».
KĂ€lla: habr.com
