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:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Onu əlavə etmək nəticəsində GitLab hashları təmin edəcək:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Onlar skript üçün arqument kimi istifadə olunanlardır. Nəticədə quraşdırma bu kimi görünür:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

Bundan sonra hər şeyin başladığını yoxlayaq:

$ 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:

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" ]

Və burada rd.patch yamasının özü belə görünür

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:

      imagePullSecrets:
     - name: gitlab-registry

... və reyestr üçün sirri əlavə edin:

---
apiVersion: v1
data:
 .dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
 annotations:
 name: gitlab-registry
 namespace: kube-system
type: kubernetes.io/dockercfg

Diqqətli oxucu yuxarıdakı uzun sətirin konfiqurasiyadan base64 olduğunu görəcək:

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "[email protected]"
}
}

Bu, GitLab-da istifadəçi məlumatlarıdır, Kubernetes kodu təsviri reyestrdən çıxaracaq.

Hər şey edildikdən sonra, komanda ilə cari (düzgün işləməyən) Dashboard quraşdırmasını silə bilərsiniz:

$ ./ctl.sh -d

... və hər şeyi yenidən quraşdırın:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

İdarə panelinə getmək və olduqca arxaik bir giriş düyməsini tapmaq vaxtıdır:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

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):

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

GitLab etimadnamələri ilə daxil oluruq - və hər şey edilir:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

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:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Ə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:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Yerləşdirmələrin görünən statusları var:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

...və digər təfərrüatlar:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

... və yerləşdirməni genişləndirmək imkanı da var:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Bu əməliyyatın nəticəsi:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Məqalənin əvvəlində qeyd olunan digər faydalı xüsusiyyətlər arasında qeydlərə baxmaq da var:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

... və seçilmiş podun konteyner konsoluna daxil olmaq funksiyası:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Məsələn, qovşaqlardakı məhdudiyyətlərə/istəklərə də baxa bilərsiniz:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

Ə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:

Kubernetes Dashboard və GitLab İstifadəçilərinin inteqrasiyası

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

PS

Bloqumuzda da oxuyun:

Mənbə: www.habr.com

Добавить комментарий