ProHoster > Blog > yönetim > 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:
Eklemenin bir sonucu olarak GitLab, karmaları sağlayacaktır:
Senaryoya argüman olarak kullanılanlar bunlardır. Sonuç olarak kurulum şöyle görünür:
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:
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:
Kontrol Paneline gidip oldukça eski bir giriş düğmesi bulmanın zamanı geldi:
Ü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):
GitLab kimlik bilgileriyle giriş yapıyoruz ve her şey tamamlandı:
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:
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:
Dağıtımların görünür durumları vardır:
...ve diğer ayrıntılar:
... ve ayrıca dağıtımı ölçeklendirme olanağı da var:
Bu işlemin sonucu:
Makalenin başında bahsedilen diğer yararlı özellikler arasında günlüklerin görüntülenmesi de yer almaktadır:
... ve seçilen bölmenin konteyner konsolunda oturum açma işlevi:
Örneğin, düğümlerdeki sınırlara/isteklere de bakabilirsiniz:
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:
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:
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.
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.
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.
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.