ProHoster > Blog > İdarə > Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası
Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası
Kubernetes İdarə Paneli işləyən klaster haqqında ən son məlumat və onun minimal idarə olunması üçün istifadəsi asan bir vasitədir. Bu imkanlara giriş təkcə administratorlar/DevOps mühəndisləri tərəfindən deyil, həm də konsola daha az öyrəşmiş və/yaxud kubectl ilə qarşılıqlı əlaqənin bütün incəlikləri ilə məşğul olmaq niyyətində olmayanlar üçün lazım olduqda bunu daha da qiymətləndirməyə başlayırsınız. digər kommunal xidmətlər. Bu, bizimlə baş verdi: tərtibatçılar Kubernetes veb interfeysinə sürətli daxil olmaq istədilər və biz GitLab-dan istifadə etdiyimiz üçün həll təbii olaraq gəldi.
Niyə bu?
Birbaşa tərtibatçılar, sazlama tapşırıqları üçün K8s Dashboard kimi alətlə maraqlana bilər. Bəzən qeydlərə və resurslara baxmaq, bəzən də podları öldürmək, Deployments/StatefulSets-i miqyaslaşdırmaq və hətta konteyner konsoluna getmək istəyirsən (istəklər də var ki, bunun üçün başqa bir yol var - məsələn, kubectl-debug).
Bundan əlavə, menecerlər üçün klasterə baxmaq istəyəndə psixoloji məqam var - “hər şeyin yaşıl olduğunu” görmək və bununla da “hər şeyin işlək olduğuna” (bu, əlbəttə ki, çox nisbidir... lakin bu məqalənin əhatə dairəsi xaricindədir).
Standart CI sistemi olaraq bizdə var tətbiq olunur GitLab: bütün tərtibatçılar da ondan istifadə edirlər. Buna görə də, onlara giriş təmin etmək üçün Dashboard-u GitLab hesabları ilə inteqrasiya etmək məntiqli idi.
Onu da qeyd edim ki, biz NGINX Ingress-dən istifadə edirik. Başqaları ilə işləyirsinizsə giriş həlləri, avtorizasiya üçün müstəqil olaraq annotasiyaların analoqlarını tapmalı olacaqsınız.
İnteqrasiya cəhdi
Panelin quraşdırılması
Diqqət: Aşağıdakı addımları təkrarlamaq niyyətindəsinizsə, o zaman - lazımsız əməliyyatların qarşısını almaq üçün - əvvəlcə növbəti yarımbaşlığı oxuyun.
Bu inteqrasiyadan bir çox quraşdırmalarda istifadə etdiyimiz üçün onun quraşdırılmasını avtomatlaşdırmışıq. Bunun üçün lazım olan mənbələr dərc olunur xüsusi GitHub deposu. Onlar bir qədər dəyişdirilmiş YAML konfiqurasiyalarına əsaslanır Rəsmi Dashboard deposu, həmçinin sürətli yerləşdirmə üçün Bash skripti.
Skript çoxluqda Dashboard quraşdırır və onu GitLab ilə inteqrasiya üçün konfiqurasiya edir:
$ ./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
Bununla belə, onu istifadə etməzdən əvvəl GitLab-a keçməlisiniz: Admin sahəsi → Proqramlar - və gələcək panel üçün yeni proqram əlavə edin. Gəlin buna “kubernetes idarə paneli” deyək:
Onu əlavə etmək nəticəsində GitLab hashları təmin edəcək:
Onlar skript üçün arqument kimi istifadə olunanlardır. Nəticədə quraşdırma bu kimi görünür:
$ 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
Ancaq gec-tez hər şey başlayacaq icazə dərhal işləməyəcək! Məsələ burasındadır ki, istifadə edilən təsvirdə (digər şəkillərdəki vəziyyət oxşardır) geri çağırışda yönləndirmənin tutulması prosesi səhv həyata keçirilir. Bu hal ona gətirib çıxarır ki, oauth özü bizə təqdim etdiyi kukini silir...
Problem, yamaq ilə öz imicinizi qurmaqla həll olunur.
Oauth-u düzəldin və yenidən quraşdırın
Bunun üçün aşağıdakı Dockerfayldan istifadə edəcəyik:
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
İndi siz təsviri yarada və onu GitLab-a köçürə bilərsiniz. Növbəti daxil manifests/kube-dashboard-oauth2-proxy.yaml istədiyiniz şəklin istifadəsini göstərin (onu özünüzlə əvəz edin):
image: docker.io/colemickens/oauth2_proxy:latest
Əgər avtorizasiya ilə bağlanmış reyestriniz varsa, çəkiliş şəkilləri üçün sirrin istifadəsini əlavə etməyi unutmayın:
İdarə panelinə getmək və olduqca arxaik bir giriş düyməsini tapmaq vaxtıdır:
Bunun üzərinə kliklədikdən sonra GitLab bizi salamlayacaq və adi səhifəsinə daxil olmağı təklif edəcək (əlbəttə ki, əvvəllər ora daxil olmamışıqsa):
GitLab etimadnamələri ilə daxil oluruq - və hər şey edilir:
Dashboard xüsusiyyətləri haqqında
Əgər siz əvvəllər Kubernetes ilə işləməmiş və ya sadəcə olaraq nədənsə əvvəllər Dashboard ilə qarşılaşmamış bir tərtibatçısınızsa, onun bəzi imkanlarını təsvir edəcəyəm.
Birincisi, "hər şeyin yaşıl olduğunu" görə bilərsiniz:
Ətraf dəyişənlər, endirilmiş şəkil, işə salma arqumentləri və onların vəziyyəti kimi podlar üçün daha ətraflı məlumat da mövcuddur:
Yerləşdirmələrin görünən statusları var:
...və digər təfərrüatlar:
... və yerləşdirməni genişləndirmək imkanı da var:
Bu əməliyyatın nəticəsi:
Məqalənin əvvəlində qeyd olunan digər faydalı xüsusiyyətlər arasında qeydlərə baxmaq da var:
... və seçilmiş podun konteyner konsoluna daxil olmaq funksiyası:
Məsələn, qovşaqlardakı məhdudiyyətlərə/istəklərə də baxa bilərsiniz:
Əlbəttə ki, bunlar panelin bütün imkanları deyil, amma ümid edirəm ki, ümumi fikri əldə edəcəksiniz.
İnteqrasiya və İdarəetmə Panelinin çatışmazlıqları
Təsvir edilən inteqrasiyada yoxdur giriş nəzarəti. Bununla, GitLab-a istənilən girişi olan bütün istifadəçilər İdarə Panelinə giriş əldə edir. Onlar İdarə Panelinin özündə eyni girişə malikdirlər, bu da İdarə Panelinin özünün hüquqlarına uyğundur RBAC-da müəyyən edilir. Aydındır ki, bu hər kəs üçün uyğun deyil, amma bizim vəziyyətimiz üçün kifayət qədər olduğu ortaya çıxdı.
Panelin özündə nəzərə çarpan çatışmazlıqlar arasında aşağıdakıları qeyd edirəm:
init konteynerinin konsoluna daxil olmaq mümkün deyil;
Deployments və StatefulSets-i redaktə etmək mümkün deyil, baxmayaraq ki, bu ClusterRole-da düzəldilə bilər;
İdarə panelinin Kubernetes-in ən son versiyaları ilə uyğunluğu və layihənin gələcəyi suallar doğurur.
Sonuncu problem xüsusi diqqətə layiqdir.
İdarə paneli statusu və alternativlər
Layihənin ən son versiyasında təqdim olunan Kubernetes buraxılışları ilə tablosuna uyğunluq cədvəli (v1.10.1), çox xoşbəxt deyil:
Buna baxmayaraq, var (artıq yanvar ayında qəbul edilmişdir) PR # 3476, K8s 1.13 üçün dəstəyi elan edir. Bundan əlavə, layihə məsələləri arasında K8s 1.14-də panellə işləyən istifadəçilərə istinadlar tapa bilərsiniz. Nəhayət, törədir layihənin kod bazasına daxil olmağı dayandırmayın. Beləliklə (ən azı!) Layihənin faktiki vəziyyəti ilk olaraq rəsmi uyğunluq cədvəlindən göründüyü qədər pis deyil.
Nəhayət, Dashboard üçün alternativlər var. Onların arasında:
K8Dash — klasterin cari vəziyyətinin vizual təsviri və onun obyektlərinin idarə edilməsi kimi artıq yaxşı funksiyaları təklif edən gənc interfeys (ilk qəbullar bu ilin mart ayına təsadüf edir). “Real vaxt interfeysi” kimi yerləşdirilmişdir, çünki brauzerdə səhifəni yeniləməyinizi tələb etmədən göstərilən məlumatları avtomatik olaraq yeniləyir.
OpenShift Konsolu - Red Hat OpenShift-dən veb interfeysi, lakin bu, layihənin digər inkişaflarını klasterinizə gətirəcək, bu hər kəs üçün uyğun deyil.
Kubernator bütün klaster obyektlərinə baxmaq imkanı ilə aşağı səviyyəli (İdarə panelindən) interfeys kimi yaradılmış maraqlı layihədir. Ancaq görünür, onun inkişafı dayanıb.
Polaris - elə ötən gün elan edildi panelin funksiyalarını birləşdirən layihə (klasterin cari vəziyyətini göstərir, lakin onun obyektlərini idarə etmir) və avtomatik "ən yaxşı təcrübələrin təsdiqi" (içində işləyən Yerləşdirmələrin konfiqurasiyalarının düzgünlüyünü klasteri yoxlayır).
Xülasə yerinə
İdarə paneli xidmət etdiyimiz Kubernetes klasterləri üçün standart alətdir. Onun GitLab ilə inteqrasiyası da standart quraşdırmamızın bir hissəsinə çevrildi, çünki bir çox tərtibatçılar bu panellə malik olduqları imkanlardan məmnundurlar.
Kubernetes İdarə Panelində vaxtaşırı Açıq Mənbə icmasından alternativlər var (və biz onları nəzərdən keçirməkdən məmnunuq), lakin bu mərhələdə biz bu həlldə qalırıq.