Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Kubernetes Dashboard нь таны ажиллаж байгаа кластерын талаарх хамгийн сүүлийн үеийн мэдээллийг авч, хамгийн бага хүчин чармайлтаар удирдахад ашиглахад хялбар хэрэгсэл юм. Эдгээр чадавхид хандах нь зөвхөн администраторууд/DevOps инженерүүдэд төдийгүй консолд бага дассан болон/эсвэл kubectl болон программтай харьцах бүх нарийн ширийн зүйлийг даван туулахыг хүсдэггүй хүмүүст хэрэгтэй бол та үүнийг улам их үнэлж эхэлдэг. бусад хэрэгслүүд. Энэ нь бидэнтэй тохиолдсон: хөгжүүлэгчид Kubernetes вэб интерфэйс рүү хурдан нэвтрэхийг хүссэн бөгөөд бид GitLab ашигладаг тул шийдэл нь аяндаа ирсэн.

Яагаад энэ вэ?

Шууд хөгжүүлэгчид дибаг хийх зориулалттай K8s Dashboard гэх мэт хэрэгслийг сонирхож магадгүй юм. Заримдаа та бүртгэлүүд болон нөөцүүдийг үзэхийг хүсдэг, заримдаа pods-ыг устгаж, Deployments/StatefulSets-ийг масштабаар нь масштаблаж, тэр ч байтугай контейнерийн консол руу очихыг хүсдэг (хүсэлтүүд бас байдаг, гэхдээ өөр арга байдаг - жишээлбэл, дамжуулан kubectl-дибаг).

Нэмж дурдахад менежерүүдэд кластер руу харахыг хүсч буй сэтгэлзүйн үе байдаг - "бүх зүйл ногоон өнгөтэй" гэдгийг харах, улмаар "бүх зүйл ажиллаж байна" гэж өөрсдийгөө тайвшруулах (энэ нь мэдээжийн хэрэг маш харьцангуй юм ... гэхдээ энэ нь нийтлэлийн хамрах хүрээнээс гадуур юм).

Бид стандарт CI системтэй хэрэглэсэн GitLab: бүх хөгжүүлэгчид үүнийг ашигладаг. Тиймээс тэдэнд хандах боломжийг олгохын тулд хяналтын самбарыг GitLab дансуудтай нэгтгэх нь логик юм.

Мөн бид NGINX Ingress ашигладаг гэдгийг тэмдэглэх болно. Хэрэв та бусадтай хамтран ажилладаг бол нэвтрэх шийдлүүд, та зөвшөөрөл авахын тулд тэмдэглэгээний аналогийг бие даан олох хэрэгтэй болно.

Интеграцчлалыг оролдож байна

Хяналтын самбар суурилуулах

Анхаар: Хэрэв та доорх алхмуудыг давтах гэж байгаа бол - шаардлагагүй үйлдлээс зайлсхийхийн тулд - эхлээд дараагийн дэд гарчгийг уншина уу.

Бид энэ интеграцийг олон суулгацад ашигладаг тул суулгацыг автоматжуулсан. Үүнд шаардлагатай эх сурвалжуудыг нийтэлсэн тусгай GitHub репозитор. Эдгээр нь бага зэрэг өөрчлөгдсөн YAML тохиргоон дээр суурилдаг Хяналтын самбарын албан ёсны агуулах, түүнчлэн хурдан байршуулах Bash скрипт.

Скрипт нь хяналтын самбарыг кластерт суулгаж, 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

Гэсэн хэдий ч, үүнийг ашиглахаасаа өмнө та GitLab руу очиж: Админ хэсэг → Програмууд - ирээдүйн самбарт шинэ програм нэмэх хэрэгтэй. Үүнийг "kubernetes хяналтын самбар" гэж нэрлэе:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Үүнийг нэмсний үр дүнд GitLab нь хэшүүдийг өгөх болно:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Эдгээр нь скриптийн аргумент болгон ашиглагддаг хүмүүс юм. Үүний үр дүнд суулгац дараах байдалтай байна.

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

Үүний дараа бүх зүйл эхэлсэн эсэхийг шалгацгаая:

$ 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

Гэсэн хэдий ч эрт орой хэзээ нэгэн цагт бүх зүйл эхлэх болно зөвшөөрөл нь шууд ажиллахгүй! Баримт нь ашигласан зурган дээр (бусад зураг дээрх нөхцөл байдал ижил төстэй) буцааж залгахад дахин чиглүүлэх үйл явц буруу хийгдсэн байна. Энэ нөхцөл байдал нь oauth өөрөө бидэнд өгдөг жигнэмэгийг устгахад хүргэдэг...

Нөхөөс нь өөрийн oauth зургийг бүтээх замаар асуудал шийдэгддэг.

Oauth-г нөхөж, дахин суулгана уу

Үүнийг хийхийн тулд бид дараах Dockerfile-г ашиглана.

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

Эндээс rd.patch нөхөөс нь өөрөө ямар харагддаг

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

Одоо та зургийг бүтээж, манай GitLab руу оруулах боломжтой. Дараа нь manifests/kube-dashboard-oauth2-proxy.yaml хүссэн зургийг ашиглахыг зааж өгнө үү (өөрийн зургаар солино уу):

 image: docker.io/colemickens/oauth2_proxy:latest

Хэрэв танд зөвшөөрлийн дагуу хаагдсан бүртгэл байгаа бол татаж авах зургуудын нууцыг ашиглахаа бүү мартаарай:

      imagePullSecrets:
     - name: gitlab-registry

... мөн бүртгэлийн нууцыг өөрөө нэмнэ үү:

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

Анхааралтай уншигч дээрх урт мөр нь тохиргооноос base64 гэдгийг харах болно.

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

Энэ бол GitLab дахь хэрэглэгчийн өгөгдөл бөгөөд Kubernetes код нь бүртгэлээс зургийг татах болно.

Бүх зүйл дууссаны дараа та одоогийн (зөв ажиллахгүй) самбарын суулгацыг дараах тушаалаар устгаж болно.

$ ./ctl.sh -d

... тэгээд бүгдийг дахин суулгана уу:

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

Хяналтын самбар руу ороод нэлээд эртний нэвтрэх товчлуурыг олох цаг болжээ.

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Үүнийг товшсоны дараа GitLab бидэнтэй мэндчилж, ердийн хуудас руугаа нэвтрэхийг санал болгоно (мэдээж хэрэг, хэрэв бид өмнө нь нэвтэрч байгаагүй бол):

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Бид GitLab итгэмжлэлээр нэвтэрч, бүх зүйл хийгдсэн:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Хяналтын самбарын онцлогуудын тухай

Хэрэв та өмнө нь Kubernetes-тэй ажиллаж байгаагүй эсвэл зүгээр л ямар нэг шалтгааны улмаас хяналтын самбартай таарч байгаагүй хөгжүүлэгч бол би түүний зарим чадварыг харуулах болно.

Нэгдүгээрт, та "бүх зүйл ногоон" гэдгийг харж болно:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Орчны хувьсагчид, татаж авсан зураг, эхлүүлэх аргументууд болон тэдгээрийн төлөв зэрэг илүү нарийвчилсан өгөгдлийг pods-д ашиглах боломжтой:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Байрлуулалт нь харагдах төлөвтэй байна:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

...болон бусад дэлгэрэнгүй мэдээлэл:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

... мөн байршуулалтыг томруулах боломж бас бий:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Энэ үйлдлийн үр дүн:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Өгүүллийн эхэнд дурдсан бусад ашигтай шинж чанаруудын дунд логуудыг үзэх нь:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

... мөн сонгосон подын контейнер консол руу нэвтрэх функц:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Жишээлбэл, та зангилааны хязгаарлалт/хүсэлтийг бас харж болно:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Мэдээжийн хэрэг, эдгээр нь самбарын бүх чадвар биш, гэхдээ та ерөнхий санааг олж авсан гэж найдаж байна.

Интеграцчлал ба хяналтын самбарын сул тал

Тайлбарласан интеграцид байхгүй байна хандалтын хяналт. Үүний тусламжтайгаар GitLab-д хандах эрхтэй бүх хэрэглэгчид хяналтын самбарт хандах эрхтэй болно. Тэд Хяналтын самбарт өөрөө хандах эрхтэй бөгөөд энэ нь Хяналтын самбарын эрхэд нийцдэг RBAC-д тодорхойлогддог. Мэдээжийн хэрэг, энэ нь хүн бүрт тохиромжгүй, гэхдээ бидний хувьд энэ нь хангалттай байсан.

Хяналтын самбар дээрх мэдэгдэхүйц сул талуудын дунд би дараахь зүйлийг тэмдэглэж байна.

  • init контейнерийн консол руу орох боломжгүй;
  • ClusterRole дээр үүнийг засах боломжтой хэдий ч Deployments болон StatefulSets-ийг засах боломжгүй;
  • Хяналтын самбар нь Kubernetes-ийн хамгийн сүүлийн үеийн хувилбаруудтай нийцэж байгаа эсэх, төслийн ирээдүй зэрэг нь эргэлзээ төрүүлж байна.

Сүүлийн асуудал нь онцгой анхаарал хандуулах ёстой.

Хяналтын самбарын төлөв ба хувилбарууд

Төслийн хамгийн сүүлийн хувилбарт танилцуулсан Kubernetes хувилбаруудтай хяналтын самбарын нийцтэй байдлын хүснэгт (v1.10.1), тийм ч баяртай биш:

Kubernetes Dashboard болон GitLab хэрэглэгчдийн нэгдэл

Гэсэн хэдий ч (XNUMX-р сард аль хэдийн батлагдсан) байдаг. PR №3476, энэ нь K8s 1.13-д дэмжлэг үзүүлэхээ зарлаж байна. Нэмж дурдахад, төслийн асуудлуудын дотроос та K8s 1.14 дээрх самбартай ажилладаг хэрэглэгчдийн лавлагааг олж болно. Эцэст нь, үйлддэг төслийн кодын суурь руу орох нь зогсохгүй. Тиймээс (наад зах нь!) Төслийн бодит байдал нь албан ёсны нийцтэй байдлын хүснэгтээс харахад тийм ч муу биш юм.

Эцэст нь хяналтын самбараас өөр хувилбарууд бий. Тэдний дунд:

  1. K8Dash — кластерын одоогийн байдлыг дүрслэн харуулах, түүний объектуудыг удирдах гэх мэт сайн боломжуудыг аль хэдийн санал болгож буй залуу интерфейс (эхний үйл ажиллагаа энэ оны XNUMX-р сард хийгдсэн). "Бодит цагийн интерфэйс" гэж байрлуулсан, учир нь Хөтөч дээрх хуудсыг дахин шинэчлэх шаардлагагүйгээр харуулсан өгөгдлийг автоматаар шинэчилдэг.
  2. OpenShift консол - Red Hat OpenShift-ийн вэб интерфэйс нь төслийн бусад хөгжүүлэлтийг таны кластерт авчрах бөгөөд энэ нь хүн бүрт тохиромжгүй юм.
  3. Кубернатор нь кластерын бүх объектыг харах боломжтой доод түвшний (Хяналтын самбараас) интерфейс хэлбэрээр бүтээгдсэн сонирхолтой төсөл юм. Гэсэн хэдий ч хөгжил нь зогссон бололтой.
  4. Polaris - дөнгөж сая зарлалаа самбар (кластерын одоогийн төлөвийг харуулдаг боловч объектуудыг удирддаггүй) болон автоматаар "шилдэг туршлагыг баталгаажуулах" (түүн дээр ажиллаж байгаа байршуулалтын тохиргооны зөв эсэхийг кластерыг шалгадаг) функцийг хослуулсан төсөл.

Дүгнэлт хийхийн оронд

Хяналтын самбар нь бидний үйлчилдэг Kubernetes кластерт зориулсан стандарт хэрэгсэл юм. Үүнийг GitLab-тай нэгтгэх нь бидний анхдагч суулгацын нэг хэсэг болсон, учир нь олон хөгжүүлэгчид энэ самбарт байгаа чадвардаа сэтгэл хангалуун байдаг.

Kubernetes хяналтын самбар нь Нээлттэй эх сурвалжийн нийгэмлэгээс үе үе хувилбаруудтай байдаг (мөн бид тэдгээрийг авч үзэхдээ баяртай байдаг), гэхдээ энэ үе шатанд бид энэ шийдлийг баримталсаар байна.

PS

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх