
Kubernetes Dashboard er et brukervennlig verktÞy for Ä fÄ oppdatert informasjon om den aktive klyngen og for minimal administrasjon av den. Du setter pris pÄ det enda mer nÄr tilgangen til disse funksjonene ikke bare er nÞdvendig for administratorer/DevOps-ingeniÞrer, men ogsÄ for dem som er mindre vant til konsollen eller som ikke Þnsker Ä sette seg inn i alle nyansene ved samhandling med kubectl og andre verktÞy. Slik skjedde det ogsÄ hos oss: utviklerne Þnsket rask tilgang til webgrensesnittet for Kubernetes, og siden vi bruker GitLab, var lÞsningen Äpenbar.
Hvorfor det?
Direkte utviklere kan vĂŠre interessert i et verktĂžy som K8s Dashboard for feilsĂžkingsoppgaver. Av og til Ăžnsker man Ă„ se pĂ„ logger og ressurser, og noen ganger til og med drepe pod-er, skalere Deployments/StatefulSets og til og med gĂ„ inn i konsollen for containere (det skjer ogsĂ„ forespĂžrseler for slike oppgaver, som imidlertid kan lĂžses pĂ„ en annen mĂ„te â for eksempel via ).
I tillegg er det et psykologisk aspekt for ledere nĂ„r de Ăžnsker Ă„ se pĂ„ klyngen â se at «alt er grĂžnt», og slik fĂžler seg beroliget om at «alt fungerer» (som selvfĂžlgelig er ganske relativt... men det overskrider allerede rammer for denne artikkelen).
Som standard CI-system bruker vi GitLab: Dette brukes av alle utviklerne. Derfor var det logisk Ă„ gjĂžre en integrering av Dashboard med GitLab-kontoene for Ă„ gi dem tilgang.
Jeg vil ogsÄ pÄpeke at vi bruker NGINX Ingress. Dersom du jobber med andre , mÄ du selv finne alternativer til annotasjonene for autorisasjon.
Vi prĂžver integreringen
Installering av Dashboard
Obs: Hvis du planlegger Ä gjenta stegene beskrevet nedenfor, anbefales det Ä lese ferdig til neste underoverskrift fÞrst for Ä unngÄ unÞdvendige operasjoner.
Siden denne integreringen brukes av oss i mange installasjoner, har vi automatisert installeringen. Kildene som kreves for dette er offentliggjort i . De er basert pÄ svakt modifiserte YAML-konfigurasjoner fra , samt et Bash-skript for rask distribusjon.
Skriptet installerer Dashboard i klyngen og konfigurerer det for integrasjon med GitLab:
$ .\/ctl.sh
Bruk: ctl.sh [VALG]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Installer kubernetes-dashboard til Kubernetes-klyngen.
Obligatoriske argumenter:
-i, --install installer i 'kube-system' namespace
-u, --upgrade oppgradere eksisterende installasjon, vil gjenbruke passord og vertsnavn
-d, --delete fjerne alt, inkludert namespace
--gitlab-url sett gitlab-url med skjema (https:\/\/gitlab.example.com)
--oauth2-id sett OAUTH2_PROXY_CLIENT_ID fra gitlab
--oauth2-secret sett OAUTH2_PROXY_CLIENT_SECRET fra gitlab
--dashboard-url sett dashboard-url uten skjema (dashboard.example.com)
Valgfritt argument:
-h, --help viser denne meldingenMen fĂžr du bruker det, mĂ„ du gĂ„ til GitLab: Admin-omrĂ„de â Applikasjoner â og legge til en ny applikasjon for den fremtidige panelet. La oss kalle det «kubernetes dashboard»:

Som et resultat av tillegget vil GitLab gi hashene:

Disse brukes som argumenter til skriptet. Som et resultat, ser installasjonen slik ut:
$ .\/ctl.sh -i --gitlab-url https:\/\/gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comDeretter vil vi sjekke at alt har startet:
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1\/1 KjĂžring 0 14s
oauth2-proxy-5586ccf95c-czp2v 1\/1 KjĂžring 0 14sTid eller annet vil alt starte, men umiddelbart vil autentiseringen ikke fungere! Det er slik at i det brukte bildet (situasjonen i andre bilder er lik) er prosessen for Ă„ fange omdirigeringen i callback implementert feil. Denne omstendigheten fĂžrer til at oauth sletter informasjonskapselen, som oauth selv gir oss...
Problemet lĂžses ved Ă„ bygge ditt eget oauth-bilde med patch.
Patch til oauth og ny installasjon
For dette bruker vi fĂžlgende 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\/\n
EXPOSE 8080 4180
ENTRYPOINT [ "\/bin\/oauth2_proxy" ]
CMD [ "--upstream=http:\/\/0.0.0.0:8080\/", "--http-address=0.0.0.0:4180" ]Slik ser selve 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 "... kjĂžrer tester"
-.\/test.sh
+#.\/test.sh
-for os in windows linux darwin; do
- echo "... bygger 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 "... bygger 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 NÄ kan vi bygge bildet og 'pushe' det til vÄr egen GitLab. Deretter i manifests/kube-dashboard-oauth2-proxy.yaml vi spesifiserer bruken av det nÞdvendige bildet (erstatte det med ditt):
image: docker.io/colemickens/oauth2_proxy:latestHvis du har et registreringsvindu med autentisering â husk Ă„ legge til en hemmelighet for Ă„ dra bildene:
imagePullSecrets:
- name: gitlab-registry⊠og legg til selve hemmeligheten for registreringen:
---
apiVersion: v1
data:
.dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
annotations:
name: gitlab-registry
namespace: kube-system
type: kubernetes.io/dockercfgDen oppmerksomme leseren vil se at den lange strengen ovenfor â er base64 av konfigurasjonen:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "mail@company.com"
}
}Dette er brukerdataene i GitLab, koden som Kubernetes vil bruke for Ă„ dra bildet fra registreringen.
NÄr alt er gjort, kan vi fjerne den nÄvÊrende (feilaktige) installasjonen av Dashboard med kommandoen:
$ .\/ctl.sh -d⊠og installere alt pÄ nytt:
$ .\/ctl.sh -i --gitlab-url https:\/\/gitlab.example.com --oauth2-id 6a52769e⊠--oauth2-secret 6b79168f⊠--dashboard-url dashboard.example.comDet er pÄ tide Ä gÄ til Dashboard og finne den ganske gammeldagse autorisasjonsknappen:

Etter Ä ha klikket pÄ den, vil vi bli mÞtt av GitLab som tilbyr Ä logge inn pÄ sin vante side (selvfÞlgelig, hvis vi ikke allerede har logget inn der):

Vi autoriserer med GitLab-legitimasjonen â og alt er gjort:

Om mulighetene til Dashboard
Hvis du er utvikler som aldri har arbeidet med Kubernetes fÞr, eller av en eller annen grunn ikke har stÞtt pÄ Dashboard tidligere, vil jeg illustrere noen av dets muligheter.
For det fĂžrste kan vi se at "alt er grĂžnt":

For pod-er er det ogsÄ tilgjengelige mer detaljerte data, som miljÞvariabler, hentet bilde, oppstartargumenter, deres tilstand:

For deployment-er kan vi se statusene:

⊠og andre detaljer:

⊠og det er ogsÄ mulighet for Ä skalere deployment:

Resultatet av denne operasjonen:

Blant de andre nyttige funksjonene, allerede nevnt i begynnelsen av artikkelen, er visning av logger:

⊠og funksjonen for Ä fÄ tilgang til konsollen til containerne i den valgte pod-en:

I tillegg kan vi for eksempel se limit-er/request-er pÄ nodene:

SelvfÞlgelig er dette ikke alle funksjonene til panelet, men jeg hÄper at du fÄr et godt overblikk.
Ulemper med integrasjonen og Dashboard
I den beskrevne integrasjonen finnes det ingen tilgangsbegrensning. Med den fÄr alle brukere som har noe tilgang til GitLab, tilgang til Dashboard. Tilgang i selve Dashboard er lik for dem, som tilsvarer rettighetene i selve Dashboard, som . à penbart passer ikke dette for alle, men for vÄrt tilfelle viste det seg Ä vÊre tilstrekkelig.
Av bemerkelsesverdige ulemper med selve Dashboard-panelet nevner jeg fĂžlgende:
- det er ikke mulig Ä fÄ tilgang til konsollen til init-containeren;
- det er ikke mulig Ă„ redigere Deployments og StatefulSets, selv om dette kan rettes i ClusterRole;
- kompatibiliteten til Dashboard med de nyeste versjonene av Kubernetes og fremtiden til prosjektet reiser spÞrsmÄl.
Den siste betegnelsen fortjener spesiell oppmerksomhet.
Status og alternativer til Dashboard
Tabellen for kompatibilitet mellom Dashboard og Kubernetes-utgivelser, presentert i den siste versjonen av prosjektet (), er ikke veldig opplĂžftende:

Til tross for dette finnes det (allerede akseptert i januar) , som annonserer stÞtte for K8s 1.13. I tillegg kan vi finne omtaler fra brukere som jobber med panelet i K8s 1.14 blant problemene i prosjektet. Til slutt, til kodebasen til prosjektet opphÞrer ikke. SÄ (minst!) er den faktiske statusen til prosjektet ikke sÄ dÄrlig som man fÞrst kan anta fra den offisielle kompatibilitetstabellen.
Til slutt har Dashboard alternativer. Blant dem:
- â et ungt grensesnitt (de fĂžrste committene er datert til mars i Ă„r) som allerede tilbyr anstendige muligheter, som visuell representasjon av nĂ„vĂŠrende status for klyngen og styring av dens objekter. Posisjoneres som "sanntidsgrensesnitt", da det automatisk oppdaterer viste data uten Ă„ kreve at man oppdaterer siden i nettleseren.
- â et webgrensesnitt fra Red Hat OpenShift, som imidlertid vil bringe med seg andre resultater fra prosjektet til klyngen din, noe som ikke passer for alle.
- â et interessant prosjekt, utviklet som et lavere nivĂ„ (enn Dashboard) grensesnitt med mulighet for Ă„ se alle objektene i klyngen. Likevel ser det ut til at utviklingen har stoppet.
- â kun nylig et prosjekt som kombinerer funksjoner fra panelet (viser nĂ„vĂŠrende tilstand av klyngen, men styrer ikke objektene) og automatisk "validering av beste praksis" (sjekker klyngen for korrekthet i konfigurasjoner av Deployments som kjĂžrer i den).
I stedet for konklusjoner
Dashboard â det standardverktĂžyet for Kubernetes-klynger vi betjener. Integrasjonen med GitLab er ogsĂ„ blitt en del av vĂ„r "standardinstallasjon", siden mange utviklere er glade for de mulighetene de fĂ„r med dette panelet.
Det dukker jevnlig opp alternativer til Kubernetes Dashboard fra Open Source-samfunnet (og vi vurderer dem gjerne), men pÄ nÄvÊrende tidspunkt holder vi oss til denne lÞsningen.
P.S.
Also read in our blog:
- «»;
- «»;
- «»;
- «».
Kilde: habr.com
