Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Kubernetes бақылау тақтасы – іске қосылған кластер туралы соңғы ақпаратты алуға және оны аз күш жұмсап басқаруға арналған пайдалану оңай құрал. Бұл мүмкіндіктерге қол жеткізу тек әкімшілерге/DevOps инженерлеріне ғана емес, сонымен қатар консольге азырақ үйренгендерге және/немесе kubectl және компьютерлермен өзара әрекеттесудің барлық қыр-сырымен айналысқысы келмейтіндерге қажет болғанда, сіз оны одан сайын бағалай бастайсыз. басқа утилиталар. Бұл бізбен болды: әзірлеушілер Kubernetes веб-интерфейсіне жылдам қол жеткізгісі келді және біз GitLab-ті пайдаланатындықтан, шешім табиғи түрде келді.

Бұл не үшін?

Тікелей әзірлеушілерді тапсырмаларды түзетуге арналған K8s бақылау тақтасы сияқты құрал қызықтыруы мүмкін. Кейде журналдар мен ресурстарды көргіңіз келеді, кейде подкасттарды өлтіргіңіз келеді, 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 бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Оны қосу нәтижесінде GitLab хэштерді қамтамасыз етеді:

Kubernetes бақылау тақтасы мен 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 өзі бізге беретін cookie файлын өшіретініне әкеледі...

Мәселе патчпен өзіңіздің жеке суретіңізді салу арқылы шешіледі.

Oauth патчын орнатып, қайта орнатыңыз

Ол үшін келесі Docker файлын қолданамыз:

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 бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Оны басқаннан кейін GitLab бізді қарсы алып, өзінің әдеттегі бетіне кіруді ұсынады (әрине, егер біз бұрын кірмеген болсақ):

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Біз GitLab тіркелгі деректерімен кіреміз - және бәрі орындалды:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Бақылау тақтасының мүмкіндіктері туралы

Егер сіз бұрын Kubernetes-пен жұмыс істемеген әзірлеуші ​​болсаңыз немесе қандай да бір себептермен бақылау тақтасын бұрын кездестірмеген болсаңыз, мен оның кейбір мүмкіндіктерін суреттеймін.

Біріншіден, сіз «бәрі жасыл» екенін көре аласыз:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Қоршаған ортаның айнымалы мәндері, жүктеп алынған кескін, іске қосу аргументтері және олардың күйі сияқты толығырақ мәліметтер подкасттар үшін де қол жетімді:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Орналастырулардың көрінетін күйлері бар:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

...және басқа мәліметтер:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

... және орналастыруды масштабтау мүмкіндігі де бар:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Бұл операцияның нәтижесі:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Мақаланың басында айтылған басқа пайдалы мүмкіндіктердің қатарында журналдарды қарау:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

... және таңдалған подкасттың контейнер консоліне кіру функциясы:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Мысалы, түйіндердегі шектеулерді/сұрауларды да қарауға болады:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Әрине, бұл панельдің барлық мүмкіндіктері емес, бірақ сіз жалпы идеяны аласыз деп үміттенемін.

Интеграцияның және бақылау тақтасының кемшіліктері

Сипатталған интеграцияда жоқ қатынасты басқару. Оның көмегімен GitLab-қа кез келген рұқсаты бар барлық пайдаланушылар бақылау тақтасына қол жеткізе алады. Олар бақылау тақтасының өзінде бірдей рұқсатқа ие, бұл бақылау тақтасының құқықтарына сәйкес келеді RBAC-да анықталған. Әлбетте, бұл бәріне жарамайды, бірақ біздің жағдайымыз үшін бұл жеткілікті болып шықты.

Бақылау тақтасындағы елеулі кемшіліктердің арасында мен мыналарды атап өткім келеді:

  • init контейнерінің консольіне кіру мүмкін емес;
  • Deployments және StatefulSets өңдеу мүмкін емес, бірақ бұл ClusterRole ішінде түзетілуі мүмкін;
  • Бақылау тақтасының Kubernetes соңғы нұсқаларымен үйлесімділігі және жобаның болашағы сұрақтар тудырады.

Соңғы мәселе ерекше назар аударуды қажет етеді.

Бақылау тақтасының күйі және балама нұсқалары

Жобаның соңғы нұсқасында ұсынылған Kubernetes шығарылымдары бар бақылау тақтасының үйлесімділік кестесі (v1.10.1), өте қуанышты емес:

Kubernetes бақылау тақтасы мен GitLab пайдаланушыларының интеграциясы

Осыған қарамастан, бар (қаңтарда қабылданған) PR №3476, ол K8s 1.13 қолдауын жариялайды. Сонымен қатар, жоба мәселелерінің ішінде панельмен жұмыс істейтін пайдаланушыларға сілтемелерді K8s 1.14. Ақырында, міндеттейді жобаның кодтық базасына кіру тоқтамайды. Сондықтан (кем дегенде!) Жобаның нақты күйі ресми үйлесімділік кестесінде көрінетіндей жаман емес.

Ақырында, бақылау тақтасына балама нұсқалар бар. Олардың ішінде:

  1. K8Dash — кластердің ағымдағы күйін көрнекі түрде көрсету және оның объектілерін басқару сияқты жақсы мүмкіндіктерді ұсынатын жас интерфейс (алғашқы тапсырулар осы жылдың наурызында басталады). «Нақты уақыттағы интерфейс» ретінде орналастырылған, өйткені браузерде бетті жаңартуды талап етпестен, көрсетілген деректерді автоматты түрде жаңартады.
  2. OpenShift консолі - Red Hat OpenShift веб-интерфейсі, бірақ ол сіздің кластеріңізге жобаның басқа әзірлемелерін әкеледі, бұл барлығына жарамайды.
  3. Кубернатор барлық кластер нысандарын көру мүмкіндігі бар төменгі деңгейлі интерфейс ретінде жасалған (бақылау тақтасына қарағанда) қызықты жоба. Алайда оның дамуы тоқтап қалған сияқты.
  4. Поляр - өткен күні ғана жариялады панель функцияларын біріктіретін жоба (кластердің ағымдағы күйін көрсетеді, бірақ оның нысандарын басқармайды) және автоматты түрде «үздік тәжірибелерді тексеру» (кластерді онда іске қосылған Орналастыру конфигурацияларының дұрыстығын тексереді).

Қорытындылар орнына

Бақылау тақтасы - біз қызмет көрсететін Kubernetes кластерлеріне арналған стандартты құрал. Оның GitLab-пен интеграциясы да әдепкі орнатуымыздың бір бөлігі болды, өйткені көптеген әзірлеушілер осы панельдің мүмкіндіктеріне қуанады.

Kubernetes бақылау тақтасында мезгіл-мезгіл Open Source қауымдастығының баламалары бар (және біз оларды қарауға қуаныштымыз), бірақ осы кезеңде біз осы шешіммен қала береміз.

PS

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру