Kubernetes Dashboard жана GitLab колдонуучуларынын интеграциясы

Kubernetes Dashboard жана GitLab колдонуучуларынын интеграциясы

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

Эмнеге бул?

Түздөн-түз иштеп чыгуучулар мүчүлүштүктөрдү оңдоо тапшырмалары үчүн K8s Dashboard сыяктуу куралга кызыгышы мүмкүн. Кээде сиз журналдарды жана ресурстарды көргүңүз келет, ал эми кээде поддондорду өлтүргүңүз келет, Deployments/StatefulSets масштабын масштабдаңыз, ал тургай контейнер консолуна киргиңиз келет (ошондой эле суроо-талаптар бар, бирок башка жол бар - мисалы, аркылуу kubectl-дебаг).

Мындан тышкары, менеджерлер үчүн психологиялык учур бар, алар кластерди карап көргүсү келет - "баары жашыл" экенин көргүсү келип, "баары иштеп жатат" деп өздөрүн сооротуу (албетте, бул абдан салыштырмалуу... бирок бул макаланын чегинен тышкары ).

Стандарттык CI системасы катары бизде бар колдонулат GitLab: бардык иштеп чыгуучулар да аны колдонушат. Ошондуктан, аларга кирүү мүмкүнчүлүгүн камсыз кылуу үчүн, GitLab аккаунттары менен Dashboard менен интеграциялоо логикалык болду.

Ошондой эле биз NGINX Ingress колдоно турганыбызды белгилей кетейин. Башкалар менен иштесеңиз кирүүчү чечимдер, авторизация үчүн аннотациялардын аналогдорун өз алдынча табышыңыз керек болот.

Интеграциялоо аракети

Куралдар тактасын орнотуу

сактык: Эгерде сиз төмөндөгү кадамдарды кайталасаңыз, анда - керексиз операцияларды болтурбоо үчүн - адегенде кийинки бөлүмчөнү окуп чыгыңыз.

Биз бул интеграцияны көптөгөн орнотууларда колдонгондуктан, биз аны орнотууну автоматташтырдык. Бул үчүн керектүү булактар ​​жарыяланган атайын GitHub репозиторий. Алар бир аз өзгөртүлгөн YAML конфигурацияларына негизделген расмий Dashboard репозиторий, ошондой эле тез жайылтуу үчүн 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 колдонуучуларынын интеграциясы

Айлана-чөйрөнүн өзгөрмөлөрү, жүктөлүп алынган сүрөт, ишке киргизүү аргументтери жана алардын абалы сыяктуу дагы толук маалымат подколор үчүн жеткиликтүү:

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 контейнеринин консолуна кирүү мүмкүн эмес;
  • Deployments жана StatefulSets түзөтүү мүмкүн эмес, бирок муну ClusterRoleде оңдоого болот;
  • Куралдар тактасынын Kubernetesтин акыркы версиялары менен шайкештиги жана долбоордун келечеги суроолорду жаратат.

Акыркы маселе өзгөчө көңүл бурууга татыктуу.

Куралдар тактасынын абалы жана альтернативалары

Долбоордун акыркы версиясында берилген Kubernetes релиздери менен шайкештик тактасы (v1.10.1), абдан бактылуу эмес:

Kubernetes Dashboard жана GitLab колдонуучуларынын интеграциясы

Буга карабастан, бар (январь айында кабыл алынган) PR №3476, ал K8s 1.13 үчүн колдоо жарыялайт. Мындан тышкары, долбоордун маселелери арасында сиз K8s 1.14 панели менен иштеген колдонуучуларга шилтемелерди таба аласыз. Акыры, милдеттендирет Долбоордун коддук базасына токтоп калбаңыз. Ошентип, (жок дегенде!) Долбоордун иш жүзүндөгү абалы биринчи расмий шайкештик таблицасынан көрүнгөндөй жаман эмес.

Акыр-аягы, панелдин альтернативалары бар. Алардын арасында:

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

Корутундунун ордуна

Куралдар тактасы биз тейлеген Kubernetes кластерлери үчүн стандарттуу курал. Анын GitLab менен интеграциясы демейки орнотуубуздун бир бөлүгү болуп калды, анткени көптөгөн иштеп чыгуучулар бул панелдин мүмкүнчүлүктөрүнө кубанышат.

Kubernetes башкаруу тактасында мезгил-мезгили менен Open Source коомчулугунун альтернативалары бар (жана биз аларды карап чыгууга кубанычтабыз), бирок бул этапта биз ушул чечим менен кала беребиз.

PS

Биздин блогдон дагы окуңуз:

Source: www.habr.com

Комментарий кошуу