A Kubernetes Dashboard és a GitLab felhasználók integrációja
A Kubernetes Dashboard egy könnyen használható eszköz, amellyel naprakész információkhoz juthat a futó fürtről, és minimális erőfeszítéssel kezelheti azokat. Még jobban kezdi értékelni, ha ezekhez a képességekhez nem csak a rendszergazdáknak/DevOps mérnököknek van szükségük, hanem azoknak is, akik kevésbé vannak hozzászokva a konzolhoz és/vagy nem szándékoznak megbirkózni a kubectl-lel és egyéb közművek. Ez nálunk is megtörtént: a fejlesztők gyors hozzáférést akartak a Kubernetes webes felületéhez, és mivel GitLabot használunk, a megoldás magától jött.
Miért ez?
A közvetlen fejlesztők érdeklődhetnek egy olyan eszköz iránt, mint a K8s Dashboard a hibakeresési feladatokhoz. Néha meg szeretné tekinteni a naplókat és az erőforrásokat, néha pedig meg akarja ölni a podokat, méretezheti a telepítéseket/állapotkészleteket, és még a tárolókonzolra is szeretne menni (vannak olyan kérések is, amelyeknek van egy másik módja is - például kubectl-debug).
Emellett a vezetők számára van egy pszichológiai pillanat, amikor rá akarnak nézni a klaszterre - látni, hogy „minden zöld”, és ezzel megnyugtatják magukat, hogy „minden működik” (ami persze nagyon relatív... de ez túlmutat a cikk keretein ).
Szabványos CI rendszerünk van alkalmazott GitLab: minden fejlesztő is használja. Ezért a hozzáférés biztosítása érdekében logikus volt a Dashboard integrálása a GitLab-fiókokkal.
Azt is megjegyzem, hogy NGINX Ingress-t használunk. Ha másokkal dolgozol behatolási megoldások, önállóan meg kell találnia a megjegyzések analógjait az engedélyezéshez.
Integráció próbálkozása
A műszerfal telepítése
Figyelem: Ha meg akarja ismételni az alábbi lépéseket, akkor - a felesleges műveletek elkerülése érdekében - először olvassa el a következő alcímet.
Mivel ezt az integrációt sok telepítésnél használjuk, a telepítését automatizáltuk. Az ehhez szükséges forrásokat ben közöljük speciális GitHub adattár. Ezek kissé módosított YAML konfigurációkon alapulnak hivatalos Dashboard tárház, valamint egy Bash-szkriptet a gyors telepítéshez.
A szkript telepíti az irányítópultot a fürtbe, és beállítja a GitLabbal való integrációhoz:
$ ./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
Használata előtt azonban el kell lépnie a GitLab: Adminisztrációs terület → Alkalmazások oldalra, és új alkalmazást kell hozzáadnia a jövőbeli panelhez. Nevezzük „kubernetes irányítópultnak”:
Hozzáadása eredményeként a GitLab biztosítja a kivonatokat:
Ezek azok, amelyek argumentumaként szolgálnak a szkripthez. Ennek eredményeként a telepítés így néz ki:
$ 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
Előbb-utóbb azonban minden beindul az engedélyezés nem működik azonnal! Az a tény, hogy a használt képen (a többi képen hasonló a helyzet) az átirányítás elkapásának folyamata a visszahívásban helytelenül van megvalósítva. Ez a körülmény oda vezet, hogy az oauth törli azt a sütit, amelyet maga az oauth biztosít számunkra...
A problémát úgy oldja meg, hogy saját oauth-képet készít egy javítással.
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
Most elkészítheti a képet, és behelyezheti a GitLabba. Következő be manifests/kube-dashboard-oauth2-proxy.yaml jelezze a kívánt kép használatát (cserélje ki a sajátjára):
image: docker.io/colemickens/oauth2_proxy:latest
Ha olyan rendszerleíró adatbázissal rendelkezik, amely felhatalmazással zárva van, ne felejtse el hozzáadni a titkosítás használatát a pull képekhez:
imagePullSecrets:
- name: gitlab-registry
... és adja hozzá magát a titkot a rendszerleíró adatbázishoz:
Itt az ideje, hogy az Irányítópultra ugorjon, és találjon egy meglehetősen archaikus bejelentkezési gombot:
A rákattintás után a GitLab fogad minket, felajánlva, hogy bejelentkezünk a megszokott oldalára (persze, ha korábban még nem jelentkeztünk be):
Bejelentkezünk a GitLab hitelesítő adataival – és minden készen áll:
Az irányítópult funkcióiról
Ha Ön olyan fejlesztő, aki korábban nem dolgozott a Kubernetes-szel, vagy egyszerűen valamilyen oknál fogva még nem találkozott a Dashboarddal, akkor bemutatok néhány képességét.
Először is láthatja, hogy „minden zöld”:
Részletesebb adatok is elérhetők a podokról, például környezeti változók, letöltött kép, indítási argumentumok és állapotuk:
A telepítéseknek látható állapotai vannak:
...és egyéb részletek:
... és lehetőség van a telepítés méretezésére is:
Ennek a műveletnek az eredménye:
A cikk elején már említett hasznos funkciók között szerepel a naplók megtekintése:
... és a kiválasztott pod tárolókonzoljába való bejelentkezéshez szükséges funkció:
Például megtekintheti a csomópontokra vonatkozó korlátokat/kéréseket is:
Természetesen ez nem a panel összes képessége, de remélem, hogy érti az általános elképzelést.
Az integráció és a műszerfal hátrányai
A leírt integrációban nincs hozzáférés-szabályozás. Ezzel minden felhasználó, aki bármilyen hozzáféréssel rendelkezik a GitLabhoz, hozzáférhet az irányítópulthoz. Ugyanolyan hozzáféréssel rendelkeznek magán az irányítópulton, ami megfelel magának az irányítópultnak a jogainak, amely RBAC-ban vannak meghatározva. Nyilván ez nem mindenkinek megfelelő, de esetünkben elegendőnek bizonyult.
A műszerfal észrevehető hátrányai között megjegyzem a következőket:
lehetetlen bejutni az init tároló konzoljába;
a Deployments és StatefulSets nem szerkeszthető, bár ez a ClusterRole-ban javítható;
A Dashboard kompatibilitása a Kubernetes legújabb verzióival és a projekt jövője kérdéseket vet fel.
Az utolsó probléma külön figyelmet érdemel.
A műszerfal állapota és alternatívák
Irányítópult kompatibilitási táblázat Kubernetes kiadásokkal, a projekt legújabb verziójában bemutatva (v1.10.1), nem túl boldog:
Ennek ellenére létezik (már januárban elfogadták) PR #3476, amely bejelenti a K8s 1.13 támogatását. Ezenkívül a projektproblémák között találhat hivatkozásokat a K8s 1.14-es panellel dolgozó felhasználókra. Végül, vállalja a projekt kódbázisába ne hagyja abba. Tehát (legalább!) a projekt tényleges állapota nem olyan rossz, mint amilyennek a hivatalos kompatibilitási táblázatból elsőre tűnhet.
Végül az irányítópultnak vannak alternatívái. Közöttük:
K8Dash — egy fiatal interfész (az első commitok ez év márciusára nyúlnak vissza), amely már jó szolgáltatásokat kínál, mint például a fürt aktuális állapotának vizuális megjelenítése és az objektumok kezelése. „valós idejű interfészként” van elhelyezve, mert automatikusan frissíti a megjelenített adatokat anélkül, hogy frissítenie kellene az oldalt a böngészőben.
OpenShift konzol - a Red Hat OpenShift webes felülete, amely azonban a projekt egyéb fejlesztéseit is elhozza a klaszterébe, ami nem mindenki számára megfelelő.
Kubernátor egy érdekes projekt, alacsonyabb szintű (mint az irányítópult) interfészként, amely képes az összes fürt objektum megtekintésére. Úgy tűnik azonban, hogy fejlődése megállt.
Polaris - pont a minap bejelentett egy projekt, amely egyesíti egy panel funkcióit (megmutatja a fürt aktuális állapotát, de nem kezeli annak objektumait) és az automatikus „bevált gyakorlatok érvényesítését” (ellenőrzi a fürtben a benne futó Telepítések konfigurációinak helyességét).
Következtetések helyett
Az irányítópult az általunk kiszolgált Kubernetes-fürtök szabványos eszköze. A GitLabbal való integráció az alapértelmezett telepítésünk részévé is vált, mivel sok fejlesztő izgatott a panelben rejlő lehetőségek miatt.
A Kubernetes Dashboard rendszeres időközönként kínál alternatívákat a nyílt forráskódú közösségtől (és örömmel fontolgatjuk őket), de ebben a szakaszban maradunk ennél a megoldásnál.