Kubernetes informÄcijas paneļa un GitLab lietotÄju integrÄcija
Kubernetes Dashboard ir Ärti lietojams rÄ«ks, lai iegÅ«tu jaunÄko informÄciju par savu darbÄ«go kopu un pÄrvaldÄ«tu to ar minimÄlu piepÅ«li. JÅ«s sÄkat to novÄrtÄt vÄl vairÄk, kad piekļuve Ŕīm iespÄjÄm ir nepiecieÅ”ama ne tikai administratoriem/DevOps inženieriem, bet arÄ« tiem, kuri ir mazÄk pieraduÅ”i pie konsoles un/vai neplÄno saskarties ar visÄm sarežģītÄ«bÄm, kas saistÄ«tas ar mijiedarbÄ«bu ar kubectl un citi komunÄlie pakalpojumi. Tas notika ar mums: izstrÄdÄtÄji vÄlÄjÄs Ätru piekļuvi Kubernetes tÄ«mekļa saskarnei, un, tÄ kÄ mÄs izmantojam GitLab, risinÄjums radÄs dabiski.
KÄpÄc ir Å”is?
TieÅ”os izstrÄdÄtÄjus varÄtu interesÄt tÄds rÄ«ks kÄ K8s Dashboard atkļūdoÅ”anas uzdevumu veikÅ”anai. Dažreiz jÅ«s vÄlaties skatÄ«t žurnÄlus un resursus un dažreiz iznÄ«cinÄt aplikumus, mÄrogot izvietojumus/StatefulSets un pat doties uz konteinera konsoli (ir arÄ« pieprasÄ«jumi, kuriem tomÄr ir cits veids, piemÄram, izmantojot kubectl-debug).
TurklÄt vadÄ«tÄjiem ir psiholoÄ£isks brÄ«dis, kad viÅi vÄlas paskatÄ«ties uz klasteri - redzÄt, ka "viss ir zaļŔ", un tÄdÄjÄdi nomierinÄt sevi, ka "viss darbojas" (kas, protams, ir ļoti relatÄ«vi... bet tas ir Ärpus raksta darbÄ«bas jomas).
Mums ir standarta CI sistÄma piemÄro GitLab: to izmanto arÄ« visi izstrÄdÄtÄji. TÄpÄc, lai nodroÅ”inÄtu viÅiem piekļuvi, bija loÄ£iski integrÄt informÄcijas paneli ar GitLab kontiem.
Es arÄ« atzÄ«mÄÅ”u, ka mÄs izmantojam NGINX Ingress. Ja strÄdÄjat ar citiem iekļūŔanas risinÄjumi, jums bÅ«s patstÄvÄ«gi jÄatrod anotÄciju analogi autorizÄcijai.
MÄÄ£ina integrÄt
InformÄcijas paneļa uzstÄdÄ«Å”ana
UzmanÄ«bu: Ja jÅ«s gatavojaties atkÄrtot tÄlÄk norÄdÄ«tÄs darbÄ«bas, tad, lai izvairÄ«tos no nevajadzÄ«gÄm darbÄ«bÄm, vispirms izlasiet nÄkamo apakÅ”virsrakstu.
TÄ kÄ mÄs Å”o integrÄciju izmantojam daudzÄs instalÄcijÄs, esam automatizÄjuÅ”i tÄs instalÄÅ”anu. Tam nepiecieÅ”amie avoti ir publicÄti Ä«paÅ”a GitHub repozitorija. Tie ir balstÄ«ti uz nedaudz modificÄtÄm YAML konfigurÄcijÄm no oficiÄlÄ informÄcijas paneļa repozitorijs, kÄ arÄ« Bash skriptu Ätrai izvietoÅ”anai.
Skripts instalÄ informÄcijas paneli klasterÄ« un konfigurÄ to integrÄcijai ar 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 message
TomÄr, pirms to izmantojat, jums jÄiet uz GitLab: Admin area ā Applications - un jÄpievieno jauna lietojumprogramma nÄkotnes panelim. Sauksim to par ākubernetes informÄcijas paneliā:
$ 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 14s
Agri vai vÄlu viss tomÄr sÄksies autorizÄcija nedarbosies uzreiz! Fakts ir tÄds, ka izmantotajÄ attÄlÄ (situÄcija citos attÄlos ir lÄ«dzÄ«ga) novirzÄ«Å”anas uztverÅ”anas process atzvanÄ«Å”anÄ ir Ä«stenots nepareizi. Å is apstÄklis āānoved pie tÄ, ka oauth izdzÄÅ” sÄ«kfailu, ko pats oauth mums nodroÅ”ina...
ProblÄma tiek atrisinÄta, izveidojot savu oauth attÄlu ar ielÄpu.
Izlabojiet oauth un pÄrinstalÄjiet
Lai to izdarÄ«tu, mÄs izmantosim Å”Ädu Dockerfile:
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
Tagad varat izveidot attÄlu un ievietot to mÅ«su GitLab. NÄkamais iekÅ”Ä manifests/kube-dashboard-oauth2-proxy.yaml norÄdiet vÄlamÄ attÄla izmantoÅ”anu (aizstÄt to ar savu):
image: docker.io/colemickens/oauth2_proxy:latest
Ja jums ir reÄ£istrs, kas ir aizvÄrts ar autorizÄciju, neaizmirstiet attÄlu vilkÅ”anai pievienot noslÄpuma izmantoÅ”anu:
Ir pienÄcis laiks doties uz informÄcijas paneli un atrast diezgan arhaisku pieteikÅ”anÄs pogu:
PÄc noklikŔķinÄÅ”anas uz tÄ mÅ«s sagaida GitLab, piedÄvÄjot ielogoties savÄ parastajÄ lapÄ (protams, ja iepriekÅ” neesam tur pieteikuÅ”ies):
MÄs piesakÄmies ar GitLab akreditÄcijas datiem - un viss ir izdarÄ«ts:
Par informÄcijas paneļa funkcijÄm
Ja esat izstrÄdÄtÄjs, kurÅ” iepriekÅ” nav strÄdÄjis ar Kubernetes vai vienkÄrÅ”i kÄdu iemeslu dÄļ iepriekÅ” neesat saskÄries ar Dashboard, es ilustrÄÅ”u dažas no tÄ iespÄjÄm.
PirmkÄrt, jÅ«s varat redzÄt, ka āviss ir zaļŔā:
Ir pieejami arÄ« detalizÄtÄki dati par podiem, piemÄram, vides mainÄ«gie, lejupielÄdÄtais attÄls, palaiÅ”anas argumenti un to stÄvoklis:
Izvietojumiem ir redzami statusi:
...un cita informÄcija:
... un ir arÄ« iespÄja mÄrogot izvietoÅ”anu:
Å Ä«s operÄcijas rezultÄts:
Starp citÄm noderÄ«gÄm funkcijÄm, kas jau minÄtas raksta sÄkumÄ, ir žurnÄlu skatÄ«Å”ana:
... un funkcija, lai pieteiktos atlasÄ«tÄ aplikuma konteinera konsolÄ:
Protams, tÄs nav visas paneļa iespÄjas, taÄu es ceru, ka jÅ«s sapratÄ«sit vispÄrÄjo priekÅ”statu.
IntegrÄcijas un informÄcijas paneļa trÅ«kumi
AprakstÄ«tajÄ integrÄcijÄ nav piekļuves kontrole. Izmantojot to, visi lietotÄji ar jebkÄdu piekļuvi GitLab iegÅ«st piekļuvi informÄcijas panelim. ViÅiem ir tÄda pati piekļuve paÅ”Ä informÄcijas panelÄ«, kas atbilst paÅ”a informÄcijas paneļa tiesÄ«bÄm, kuras ir definÄti RBAC. AcÄ«mredzot tas nav piemÄrots visiem, bet mÅ«su gadÄ«jumÄ tas izrÄdÄ«jÄs pietiekami.
Starp pamanÄmajiem trÅ«kumiem paÅ”Ä informÄcijas panelÄ« es atzÄ«mÄju sekojoÅ”o:
nav iespÄjams iekļūt init konteinera konsolÄ;
nav iespÄjams rediÄ£Ät Deployments un StatefulSets, lai gan to var labot programmÄ ClusterRole;
InformÄcijas paneļa saderÄ«ba ar jaunÄkajÄm Kubernetes versijÄm un projekta nÄkotne rada jautÄjumus.
PÄdÄjÄ problÄma ir pelnÄ«jusi Ä«paÅ”u uzmanÄ«bu.
InformÄcijas paneļa statuss un alternatÄ«vas
InformÄcijas paneļa saderÄ«bas tabula ar Kubernetes laidieniem, kas parÄdÄ«ta jaunÄkajÄ projekta versijÄ (v1.10.1), ne pÄrÄk laimÄ«gs:
Neskatoties uz to, ir (jau pieÅemts janvÄrÄ«) PR #3476, kas paziÅo par atbalstu K8s 1.13. TurklÄt starp projekta problÄmÄm varat atrast atsauces uz lietotÄjiem, kuri strÄdÄ ar paneli K8s 1.14. Visbeidzot, apÅemas projekta kodu bÄzÄ neapstÄjas. TÄtad (vismaz!) projekta faktiskais statuss nav tik slikts, kÄ sÄkotnÄji varÄtu Ŕķist pÄc oficiÄlÄs saderÄ«bas tabulas.
Visbeidzot, informÄcijas panelim ir alternatÄ«vas. Starp viÅiem:
K8Dash ā jauns interfeiss (pirmÄs saistÄ«bas datÄtas ar Ŕī gada martu), kas jau piedÄvÄ labas iespÄjas, piemÄram, klastera paÅ”reizÄjÄ statusa vizuÄlu attÄlojumu un tÄ objektu pÄrvaldÄ«bu. PozicionÄts kÄ āreÄllaika interfeissā, jo automÄtiski atjaunina parÄdÄ«tos datus, neprasot lapas atsvaidzinÄÅ”anu pÄrlÅ«kprogrammÄ.
OpenShift konsole - Red Hat OpenShift tÄ«mekļa saskarne, kas tomÄr ienesÄ«s jÅ«su klasterÄ« citas projekta izstrÄdes, kas nav piemÄrotas visiem.
Kubernators ir interesants projekts, kas izveidots kÄ zemÄka lÄ«meÅa (nekÄ informÄcijas panelis) saskarne ar iespÄju skatÄ«t visus klastera objektus. TomÄr izskatÄs, ka tÄ attÄ«stÄ«ba ir apstÄjusies.
Polaris - tikai otro dienu paziÅoja projekts, kas apvieno paneļa funkcijas (parÄda klastera paÅ”reizÄjo stÄvokli, bet nepÄrvalda tÄ objektus) un automÄtisku ālabÄkÄs prakses validÄcijuā (pÄrbauda klastera tajÄ strÄdÄjoÅ”o izvietojumu konfigurÄciju pareizÄ«bu).
SecinÄjumu vietÄ
InformÄcijas panelis ir standarta rÄ«ks mÅ«su apkalpotajÄm Kubernetes klasteriem. TÄ integrÄcija ar GitLab arÄ« ir kļuvusi par daļu no mÅ«su noklusÄjuma instalÄcijas, jo daudzi izstrÄdÄtÄji ir sajÅ«smÄ par iespÄjÄm, ko viÅiem sniedz Å”is panelis.
Kubernetes Dashboard periodiski piedÄvÄ alternatÄ«vas no atvÄrtÄ pirmkoda kopienas (un mÄs ar prieku tÄs apsveram), taÄu Å”ajÄ posmÄ mÄs paliekam pie Ŕī risinÄjuma.