Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Kubernetes Dashboard, çalışan kümeniz hakkında güncel bilgiler almaya ve kümeyi minimum çabayla yönetmeye yönelik, kullanımı kolay bir araçtır. Bu yeteneklere erişim yalnızca yöneticiler/DevOps mühendisleri tarafından değil aynı zamanda konsola daha az alışkın olanlar ve/veya kubectl ile etkileşimin tüm incelikleriyle uğraşmayı düşünmeyenler tarafından da ihtiyaç duyulduğunda bunu daha da fazla takdir etmeye başlarsınız. diğer yardımcı programlar. Bu bizde de oldu: Geliştiriciler Kubernetes web arayüzüne hızlı erişim istediler ve GitLab'ı kullandığımız için çözüm kendiliğinden geldi.

Neden ki?

Doğrudan geliştiriciler, hata ayıklama görevleri için K8s Dashboard gibi bir araçla ilgilenebilir. Bazen günlükleri ve kaynakları görüntülemek, bazen de bölmeleri öldürmek, Dağıtımları/StatefulSet'leri ölçeklendirmek ve hatta konteyner konsoluna gitmek isteyebilirsiniz (ancak bunun başka bir yolu olan istekler de vardır - örneğin, aracılığıyla) kubectl-hata ayıklama).

Ek olarak, yöneticilerin kümeye bakıp "her şeyin yeşil olduğunu" görmek ve böylece "her şeyin çalıştığı" konusunda kendilerini rahatlatmak istedikleri psikolojik bir an vardır (ki bu elbette çok görecelidir...) ancak bu makalenin kapsamı dışındadır).

Standart bir CI sistemi olarak elimizde uygulamak GitLab: Tüm geliştiriciler de bunu kullanıyor. Bu nedenle onlara erişim sağlamak için Dashboard'u GitLab hesaplarıyla entegre etmek mantıklıydı.

Ayrıca NGINX Ingress kullandığımızı da not edeceğim. Başkalarıyla çalışıyorsanız giriş çözümleri, yetkilendirme için ek açıklamaların analoglarını bağımsız olarak bulmanız gerekecektir.

Entegrasyon deneniyor

Kontrol paneli kurulumu

Dikkat: Aşağıdaki adımları tekrarlayacaksanız - gereksiz işlemlerden kaçınmak için - önce bir sonraki alt başlığı okuyun.

Bu entegrasyonu birçok kurulumda kullandığımız için kurulumunu otomatize ettik. Bunun için gerekli kaynaklar şu adreste yayınlanmıştır: özel GitHub deposu. Bunlar, biraz değiştirilmiş YAML yapılandırmalarına dayanmaktadır. resmi Kontrol Paneli deposuhızlı dağıtım için bir Bash betiğinin yanı sıra.

Betik, Dashboard'u kümeye yükler ve GitLab ile entegrasyon için yapılandırır:

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

Ancak kullanmadan önce GitLab: Yönetici alanı → Uygulamalar'a gitmeniz ve gelecekteki panel için yeni bir uygulama eklemeniz gerekir. Buna “kubernetes kontrol paneli” diyelim:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Eklemenin bir sonucu olarak GitLab, karmaları sağlayacaktır:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Senaryoya argüman olarak kullanılanlar bunlardır. Sonuç olarak kurulum şöyle 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 her şeyin başladığını kontrol edelim:

$ 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

Ancak er ya da geç her şey başlayacak yetkilendirme hemen çalışmayacak! Gerçek şu ki, kullanılan görüntüde (diğer görüntülerdeki durum benzer), geri aramada yönlendirmeyi yakalama işlemi yanlış uygulanıyor. Bu durum, oauth'un bize sağladığı çerezin, oauth tarafından silinmesine yol açmaktadır...

Sorun, bir yama ile kendi oauth görüntünüzü oluşturarak çözülür.

Oauth'u yamalayın ve yeniden yükleyin

Bunu yapmak için aşağıdaki Dockerfile'ı kullanacağız:

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

İşte rd.patch yamasının kendisi şöyle görünüyor

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

Artık görüntüyü oluşturabilir ve GitLab'ımıza aktarabilirsiniz. Sonraki manifests/kube-dashboard-oauth2-proxy.yaml İstediğiniz görselin kullanımını belirtin (kendi görselinizle değiştirin):

 image: docker.io/colemickens/oauth2_proxy:latest

Yetkilendirme yoluyla kapatılmış bir kayıt defteriniz varsa, çekme görüntüleri için bir sır kullanımını eklemeyi unutmayın:

      imagePullSecrets:
     - name: gitlab-registry

... ve kayıt defteri için sırrın kendisini ekleyin:

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

Dikkatli okuyucu yukarıdaki uzun dizenin yapılandırmadan base64 olduğunu görecektir:

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

Bu GitLab'daki kullanıcı verileridir, Kubernetes kodu görüntüyü kayıt defterinden çeker.

Her şey tamamlandıktan sonra mevcut (doğru çalışmayan) Dashboard kurulumunu şu komutla kaldırabilirsiniz:

$ ./ctl.sh -d

... ve her şeyi tekrar yükleyin:

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

Kontrol Paneline gidip oldukça eski bir giriş düğmesi bulmanın zamanı geldi:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Üzerine tıkladıktan sonra GitLab bizi karşılayacak ve her zamanki sayfasına giriş yapmayı teklif edecek (tabii ki daha önce giriş yapmamışsak):

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

GitLab kimlik bilgileriyle giriş yapıyoruz ve her şey tamamlandı:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Kontrol Paneli özellikleri hakkında

Kubernetes ile daha önce çalışmamış bir geliştiriciyseniz veya herhangi bir nedenle Dashboard ile daha önce karşılaşmadıysanız, onun bazı yeteneklerini örneklendireceğim.

Öncelikle “her şeyin yeşil” olduğunu görebilirsiniz:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Ortam değişkenleri, indirilen görüntü, başlatma bağımsız değişkenleri ve durumları gibi bölmeler için daha ayrıntılı veriler de mevcuttur:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Dağıtımların görünür durumları vardır:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

...ve diğer ayrıntılar:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

... ve ayrıca dağıtımı ölçeklendirme olanağı da var:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Bu işlemin sonucu:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Makalenin başında bahsedilen diğer yararlı özellikler arasında günlüklerin görüntülenmesi de yer almaktadır:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

... ve seçilen bölmenin konteyner konsolunda oturum açma işlevi:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Örneğin, düğümlerdeki sınırlara/isteklere de bakabilirsiniz:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Elbette panelin tüm yetenekleri bunlar değil ama umarım genel fikri anlamışsınızdır.

Entegrasyon ve Kontrol Panelinin dezavantajları

Açıklanan entegrasyonda hiçbir giriş kontrolu. Bununla birlikte GitLab'a erişimi olan tüm kullanıcılar Kontrol Paneline erişim kazanır. Kontrol Panelinin kendi haklarına karşılık gelen, Kontrol Panelinin kendisinde de aynı erişime sahiptirler; RBAC'da tanımlanır. Açıkçası bu herkes için uygun değil ama bizim durumumuzda yeterli olduğu ortaya çıktı.

Kontrol Panelinin kendisinde göze çarpan dezavantajlar arasında aşağıdakilere dikkat ediyorum:

  • init konteynerinin konsoluna girmek imkansızdır;
  • Dağıtımları ve StatefulSet'leri düzenlemek imkansızdır, ancak bu ClusterRole'da düzeltilebilir;
  • Dashboard'un Kubernetes'in en son sürümleriyle uyumluluğu ve projenin geleceği soruları gündeme getiriyor.

Son sorun özel ilgiyi hak ediyor.

Kontrol paneli durumu ve alternatifler

Projenin en son sürümünde sunulan Kubernetes sürümleriyle kontrol paneli uyumluluk tablosu (v1.10.1), pek memnun değilim:

Kubernetes Dashboard ve GitLab Kullanıcılarının Entegrasyonu

Buna rağmen (zaten Ocak ayında kabul edilmiştir) PR # 3476K8s 1.13 desteğini duyurdu. Ayrıca proje konuları arasında K8s 1.14'teki panelle çalışan kullanıcılara referanslar bulabilirsiniz. Nihayet, taahhüt eder projenin kod tabanına girmeyin. Yani (en azından!) projenin gerçek durumu ilk başta resmi uyumluluk tablosunda göründüğü kadar kötü değil.

Son olarak Dashboard'a alternatifler var. Aralarında:

  1. K8Dash — kümenin mevcut durumunun görsel temsili ve nesnelerinin yönetimi gibi zaten iyi özellikler sunan genç bir arayüz (ilk taahhütler bu yılın Mart ayına kadar uzanıyor). “Gerçek zamanlı arayüz” olarak konumlandırılmıştır çünkü tarayıcıda sayfayı yenilemenize gerek kalmadan görüntülenen verileri otomatik olarak günceller.
  2. OpenShift Konsolu - Red Hat OpenShift'in web arayüzü, ancak bu, projedeki diğer gelişmeleri kümenize getirecek ve bu herkes için uygun olmayacaktır.
  3. Kubernator tüm küme nesnelerini görüntüleme yeteneğine sahip, daha düşük seviyeli (Kontrol Panelinden) bir arayüz olarak oluşturulmuş ilginç bir projedir. Ancak gelişimi durmuş gibi görünüyor.
  4. Polaris - sadece diğer gün duyuruldu bir panelin işlevlerini (kümenin mevcut durumunu gösterir, ancak nesnelerini yönetmez) ve otomatik "en iyi uygulamaların doğrulanmasını" (kümeyi, içinde çalışan Dağıtımların yapılandırmalarının doğruluğunu kontrol eder) birleştiren bir proje.

Sonuç yerine

Dashboard, hizmet verdiğimiz Kubernetes kümeleri için standart bir araçtır. Birçok geliştirici bu panelin sahip olduğu yeteneklerden heyecan duyduğundan, GitLab ile entegrasyonu da varsayılan kurulumumuzun bir parçası haline geldi.

Kubernetes Dashboard'un periyodik olarak Açık Kaynak topluluğundan alternatifleri vardır (ve bunları dikkate almaktan mutluluk duyarız), ancak bu aşamada bu çözümle kalıyoruz.

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle