Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Kubernetes Dashboard - bu ishlayotgan klasteringiz haqida so'nggi ma'lumotlarni olish va uni minimal kuch bilan boshqarish uchun ishlatish uchun qulay vosita. Ushbu imkoniyatlardan foydalanish nafaqat ma'murlar/DevOps muhandislari, balki konsolga kamroq o'rganib qolgan va/yoki kubectl va bilan ishlashning barcha nozikliklari bilan shug'ullanish niyatida bo'lmaganlar uchun ham zarur bo'lganda, siz buni yanada ko'proq qadrlay boshlaysiz. boshqa kommunal xizmatlar. Bu biz bilan sodir bo'ldi: ishlab chiquvchilar Kubernetes veb-interfeysiga tezkor kirishni xohlashdi va biz GitLab-dan foydalanganimiz sababli, yechim o'z-o'zidan paydo bo'ldi.

Nima uchun bu?

To'g'ridan-to'g'ri ishlab chiquvchilarni disk raskadrovka vazifalari uchun K8s Dashboard kabi vosita qiziqtirishi mumkin. Ba'zan siz jurnallar va resurslarni ko'rishni, ba'zan esa podlarni o'ldirishni, Deployments/StatefulSets-ni o'lchashni va hatto konteyner konsoliga o'tishni xohlaysiz (shuningdek, so'rovlar mavjud, ammo boshqa yo'l ham bor - masalan, orqali kubectl-debug).

Bundan tashqari, menejerlar uchun klasterga qarashni xohlaydigan psixologik moment bor - "hamma narsa yashil" ekanligini ko'rish va shu bilan o'zlarini "hamma narsa ishlayotganiga" ishontirish (bu, albatta, juda nisbiy ... lekin bu maqola doirasidan tashqarida ).

Standart CI tizimi sifatida bizda mavjud qo'llaniladi GitLab: barcha ishlab chiquvchilar ham undan foydalanadilar. Shuning uchun ularga kirishni ta'minlash uchun asboblar panelini GitLab hisoblari bilan birlashtirish mantiqan to'g'ri edi.

Shuni ham ta'kidlaymanki, biz NGINX Ingress-dan foydalanamiz. Agar siz boshqalar bilan ishlasangiz kirish yechimlari, avtorizatsiya uchun izohlarning analoglarini mustaqil ravishda topishingiz kerak bo'ladi.

Integratsiyaga urinish

Boshqaruv panelini o'rnatish

ogohlantirish: Agar siz quyidagi amallarni takrorlamoqchi bo'lsangiz, unda - keraksiz operatsiyalardan qochish uchun - avval keyingi sarlavhani o'qing.

Ushbu integratsiyani ko'plab o'rnatishlarda qo'llaganimiz sababli, biz uni o'rnatishni avtomatlashtirdik. Buning uchun kerakli manbalar nashr etilgan maxsus GitHub ombori. Ular biroz o'zgartirilgan YAML konfiguratsiyalariga asoslangan Dashboard rasmiy ombori, shuningdek, tezkor joylashtirish uchun Bash skripti.

Skript asboblar panelini klasterga o'rnatadi va uni GitLab bilan integratsiya qilish uchun sozlaydi:

$ ./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

Biroq, uni ishlatishdan oldin siz GitLab-ga o'tishingiz kerak: Administrator maydoni → Ilovalar - va kelajakdagi panel uchun yangi dastur qo'shing. Keling, buni "kubernetes asboblar paneli" deb ataymiz:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Uni qo'shish natijasida GitLab xeshlarni taqdim etadi:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Ular skriptga dalil sifatida ishlatiladiganlardir. Natijada, o'rnatish quyidagicha ko'rinadi:

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

Shundan so'ng, hamma narsa boshlanganligini tekshiramiz:

$ 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

Biroq, ertami-kechmi hamma narsa boshlanadi avtorizatsiya darhol ishlamaydi! Gap shundaki, foydalanilgan rasmda (boshqa rasmlardagi vaziyat o'xshash) qayta qo'ng'iroqda qayta yo'naltirishni ushlash jarayoni noto'g'ri amalga oshirilgan. Bu holat oauthning o'zi bizga taqdim etgan cookie faylini o'chirib tashlashiga olib keladi...

Muammoni yamoq yordamida o'zingizning rasmingizni yaratish orqali hal qilinadi.

Oauth-ni tuzatish va qayta o'rnatish

Buning uchun biz quyidagi Docker faylidan foydalanamiz:

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

Va rd.patch patchining o'zi nimaga o'xshaydi

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

Endi siz rasmni yaratishingiz va uni GitLab-ga surishingiz mumkin. Keyingisi manifests/kube-dashboard-oauth2-proxy.yaml kerakli tasvirdan foydalanishni ko'rsating (uni o'zingiz bilan almashtiring):

 image: docker.io/colemickens/oauth2_proxy:latest

Agar sizda avtorizatsiya bilan yopilgan ro'yxatga olish kitobi bo'lsa, rasmlarni tortib olish uchun sirni qo'shishni unutmang:

      imagePullSecrets:
     - name: gitlab-registry

... va ro'yxatga olish kitobi uchun sirni qo'shing:

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

Diqqatli o'quvchi yuqoridagi uzun satr konfiguratsiyadan base64 ekanligini ko'radi:

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

Bu GitLab-dagi foydalanuvchi ma'lumotlari, Kubernetes kodi tasvirni ro'yxatga olish kitobidan tortib oladi.

Har bir narsa bajarilgandan so'ng, siz buyruq bilan joriy (to'g'ri ishlamayotgan) asboblar panelini o'rnatishni olib tashlashingiz mumkin:

$ ./ctl.sh -d

... va hamma narsani qayta o'rnating:

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

Boshqaruv paneliga o'tish va juda eskirgan kirish tugmachasini topish vaqti keldi:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Uni bosgandan so'ng, GitLab bizni kutib oladi va o'zining odatiy sahifasiga kirishni taklif qiladi (albatta, agar biz u erga ilgari kirmagan bo'lsak):

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Biz GitLab hisob ma'lumotlari bilan tizimga kirdik - va hamma narsa bajarildi:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Boshqaruv paneli xususiyatlari haqida

Agar siz ilgari Kubernetes bilan ishlamagan ishlab chiquvchi bo'lsangiz yoki oddiygina biron sababga ko'ra oldin asboblar panelini uchratmagan bo'lsangiz, men uning ba'zi imkoniyatlarini tasvirlab beraman.

Birinchidan, siz "hamma narsa yashil" ekanligini ko'rishingiz mumkin:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Atrof-muhit o'zgaruvchilari, yuklab olingan rasm, ishga tushirish argumentlari va ularning holati kabi batafsil ma'lumotlar pods uchun ham mavjud:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

O'rnatishlar ko'rinadigan holatlarga ega:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

... va boshqa tafsilotlar:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

... shuningdek, joylashtirishni kengaytirish imkoniyati ham mavjud:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Ushbu operatsiyaning natijasi:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Maqolaning boshida aytib o'tilgan boshqa foydali xususiyatlar qatorida jurnallarni ko'rish:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

... va tanlangan podning konteyner konsoliga kirish funksiyasi:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Masalan, siz tugunlardagi cheklovlar/so'rovlarni ham ko'rishingiz mumkin:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Albatta, bu panelning barcha imkoniyatlari emas, lekin umid qilamanki, siz umumiy fikrni olasiz.

Integratsiya va asboblar panelining kamchiliklari

Ta'riflangan integratsiyada yo'q kirish nazorati. Uning yordamida GitLab-ga kirish huquqiga ega bo'lgan barcha foydalanuvchilar boshqaruv paneliga kirish huquqiga ega bo'ladi. Ular asboblar panelining o'zida bir xil kirish huquqiga ega, bu asboblar panelining huquqlariga mos keladi RBACda aniqlanadi. Shubhasiz, bu hamma uchun mos emas, lekin bizning holatlarimiz uchun bu etarli bo'lib chiqdi.

Boshqaruv panelidagi sezilarli kamchiliklar orasida men quyidagilarni ta'kidlayman:

  • init konteynerining konsoliga kirishning iloji yo'q;
  • Deployments va StatefulSets-ni tahrirlash mumkin emas, garchi buni ClusterRole-da tuzatish mumkin;
  • Boshqaruv panelining Kubernetes-ning so'nggi versiyalari bilan mosligi va loyihaning kelajagi savollarni tug'diradi.

Oxirgi muammo alohida e'tiborga loyiqdir.

Boshqaruv paneli holati va muqobil variantlar

Loyihaning so'nggi versiyasida taqdim etilgan Kubernetes relizlari bilan asboblar paneli moslik jadvali (v1.10.1), unchalik xursand emas:

Kubernetes boshqaruv paneli va GitLab foydalanuvchilarining integratsiyasi

Shunga qaramay, mavjud (allaqachon yanvar oyida qabul qilingan) PR № 3476, bu K8s 1.13-ni qo'llab-quvvatlashni e'lon qiladi. Bundan tashqari, loyiha masalalari orasida K8s 1.14 da panel bilan ishlaydigan foydalanuvchilarga havolalarni topishingiz mumkin. Nihoyat, majburiyat oladi loyihaning kod bazasiga kirish to'xtamaydi. Shunday qilib (hech bo'lmaganda!) Loyihaning haqiqiy holati birinchi navbatda rasmiy muvofiqlik jadvalida ko'rinadigan darajada yomon emas.

Va nihoyat, asboblar paneliga alternativalar mavjud. Ular orasida:

  1. K8Dash — yosh interfeys (birinchi topshiriqlar shu yilning martiga to‘g‘ri keladi), u allaqachon klasterning joriy holatini vizual tarzda ko‘rsatish va uning ob’ektlarini boshqarish kabi yaxshi funksiyalarni taqdim etadi. "Real vaqt interfeysi" sifatida joylashtirilgan, chunki brauzerda sahifani yangilashni talab qilmasdan ko'rsatilgan ma'lumotlarni avtomatik ravishda yangilaydi.
  2. OpenShift konsoli - Red Hat OpenShift veb-interfeysi, ammo bu sizning klasteringizga loyihaning boshqa ishlanmalarini olib keladi, bu hamma uchun mos emas.
  3. Kubernator barcha klaster ob'ektlarini ko'rish imkoniyatiga ega bo'lgan past darajadagi (boshqarish panelidan) interfeys sifatida yaratilgan qiziqarli loyihadir. Biroq, uning rivojlanishi to'xtaganga o'xshaydi.
  4. Polaris - boshqa kuni e'lon qilindi panel funktsiyalarini birlashtirgan loyiha (klasterning joriy holatini ko'rsatadi, lekin uning ob'ektlarini boshqarmaydi) va avtomatik "eng yaxshi amaliyotlarni tekshirish" (klasterni unda ishlaydigan joylashtirish konfiguratsiyasining to'g'riligini tekshiradi).

Xulosalar o'rniga

Boshqaruv paneli biz xizmat qiladigan Kubernetes klasterlari uchun standart vositadir. Uning GitLab bilan integratsiyasi ham standart o'rnatishimizning bir qismiga aylandi, chunki ko'plab ishlab chiquvchilar ushbu panel bilan ega bo'lgan imkoniyatlardan xursand.

Kubernetes asboblar panelida vaqti-vaqti bilan Ochiq manbalar hamjamiyatining muqobil variantlari mavjud (va biz ularni ko'rib chiqishdan mamnunmiz), ammo bu bosqichda biz ushbu yechim bilan qolamiz.

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish