Dasbernetes Dashboard dan Integrasi GitLab



Kubernetes Dashboard adalah alat yang mudah digunakan untuk memperoleh informasi terkini tentang kluster yang berfungsi dan kontrol minimal terhadapnya. Anda mulai lebih menghargainya ketika akses ke fitur-fitur ini diperlukan tidak hanya oleh administrator / insinyur DevOps, tetapi juga oleh mereka yang kurang terbiasa dengan konsol dan / atau tidak berniat untuk berurusan dengan semua seluk-beluk berinteraksi dengan kubectl dan utilitas lain. Jadi itu terjadi pada kami: para pengembang menginginkan akses cepat ke antarmuka web Kubernetes, dan karena kami menggunakan GitLab, solusinya datang secara alami.

Kenapa ini?


Pengembang langsung mungkin tertarik pada alat seperti K8s Dashboard untuk tugas debugging. Kadang-kadang Anda ingin melihat log dan sumber daya, dan kadang-kadang membunuh pod, skala Penyebaran / StatefulSets dan bahkan masuk ke konsol wadah (ada juga permintaan yang ada cara lain, misalnya, melalui kubectl-debug ).

Selain itu, ada momen psikologis bagi manajer ketika mereka ingin melihat cluster - untuk melihat bahwa "semuanya hijau", dan dengan demikian menenangkan bahwa "semuanya bekerja" (yang, tentu saja, sangat relatif ... tetapi ini di luar ruang lingkup artikel )

Kami menggunakan GitLab sebagai sistem CI standar: semua pengembang menggunakannya. Karena itu, untuk memberi mereka akses, masuk akal untuk mengintegrasikan Dashboard dengan akun di GitLab.

Perhatikan juga bahwa kami menggunakan NGINX Ingress. Jika Anda bekerja dengan solusi masuknya lainnya, Anda perlu mencari sendiri analog anotasi untuk otorisasi.

Kami mencoba integrasi


Instal Dasbor


Perhatian : Jika Anda akan mengulangi langkah-langkah yang dijelaskan di bawah ini, maka - untuk menghindari operasi yang tidak perlu - baca terlebih dahulu ke subtitle berikutnya.

Karena kami menggunakan integrasi ini di banyak instalasi, kami mengotomatiskan pemasangannya. Sumber-sumber yang diperlukan untuk ini diterbitkan dalam repositori GitHub khusus . Mereka didasarkan pada konfigurasi YAML yang sedikit dimodifikasi dari repositori Dashboard resmi , serta skrip Bash untuk penyebaran cepat.

Script menginstal Dashboard di sebuah cluster dan mengonfigurasinya untuk diintegrasikan dengan 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 

Namun, sebelum menggunakannya, Anda harus pergi ke GitLab: Admin area β†’ Aplikasi - dan menambahkan aplikasi baru untuk panel masa depan. Sebut saja "kubernetes dashboard":



Sebagai hasil dari penambahannya, GitLab akan menyediakan hash:



Mereka digunakan sebagai argumen untuk skrip. Akibatnya, instalasi adalah sebagai berikut:

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

Setelah itu, periksa apakah semuanya dimulai:

 $ 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 

Cepat atau lambat semuanya akan mulai, tetapi otorisasi tidak akan langsung berfungsi ! Faktanya adalah bahwa dalam gambar yang digunakan (situasi dalam gambar lain serupa), proses penangkapan ulang dalam panggilan balik dilaksanakan secara tidak benar. Keadaan ini mengarah pada fakta bahwa oauth menghapus cookie, yang menyediakan (...

Masalahnya dipecahkan dengan membangun gambar asli Anda dengan tambalan.

Tambal ke oauth dan instal ulang


Untuk melakukan ini, gunakan Dockerfile berikut:

 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 \ && go get -u github.com/golang/dep/cmd/dep \ && 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 fa2771998a98a5bfdfa3c3503757668ac4f1c8ec 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" ] 

Dan ini patch rd.patch itu sendiri
 diff --git a/Gopkg.lock b/Gopkg.lock index 5a3758a..1294a90 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -131,7 +131,7 @@ version = "v1.0.0" [[projects]] - name = "gopkg.in/fsnotify.v1" + name = "gopkg.in/fsnotify/fsnotify.v1" packages = ["."] revision = "836bfd95fecc0f1511dd66bdbf2b5b61ab8b00b6" version = "v1.2.11" @@ -149,6 +149,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "b502c41a61115d14d6379be26b0300f65d173bdad852f0170d387ebf2d7ec173" + inputs-digest = "cfdd05348394cd0597edb858bdba5681665358a963356ed248d98f39373c33b5" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index c4005e1..422bd43 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -4,7 +4,7 @@ # [[constraint]] - name = "github.com/18F/hmacauth" + name = "github.com/mbland/hmacauth" version = "~1.0.1" [[constraint]] @@ -36,7 +36,7 @@ name = "google.golang.org/api" [[constraint]] - name = "gopkg.in/fsnotify.v1" + name = "gopkg.in/fsnotify/fsnotify.v1" version = "~1.2.0" [[constraint]] 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/dist 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 diff --git a/watcher.go b/watcher.go index bedb9f8..4b83946 100644 --- a/watcher.go +++ b/watcher.go @@ -7,8 +7,7 @@ import ( "os" "path/filepath" "time" - - "gopkg.in/fsnotify.v1" + "gopkg.in/fsnotify/fsnotify.v1" ) func WaitForReplacement(filename string, op fsnotify.Op, 

Sekarang Anda dapat membangun gambar dan mendorongnya ke GitLab kami. Selanjutnya, dalam manifests/kube-dashboard-oauth2-proxy.yaml tentukan penggunaan gambar yang diinginkan (ganti dengan milik Anda sendiri):

  image: docker.io/colemickens/oauth2_proxy:latest 

Jika Anda memiliki registri yang ditutup oleh otorisasi - jangan lupa menambahkan rahasia untuk menarik gambar:

  imagePullSecrets: - name: gitlab-registry 

... dan tambahkan rahasia itu sendiri untuk registri:

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

Pembaca yang penuh perhatian akan melihat bahwa garis panjang di atas adalah base64 dari konfigurasi:

 {"registry.company.com": { "username": "oauth2", "password": "PASSWORD", "auth": "AUTH_TOKEN", "email": "mail@company.com" } } 

Ini adalah data pengguna di GitLab, kode yang digunakan Kubernetes untuk menarik gambar dari registri.

Setelah semuanya selesai, Anda dapat menghapus instalasi Dashboard saat ini (salah berfungsi) dengan perintah:

 $ ./ctl.sh -d 

... dan pasang kembali semuanya:

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

Saatnya masuk ke Dasbor dan menemukan tombol masuk yang agak kuno:



Setelah mengkliknya, GitLab akan menemui kami, menawarkan untuk masuk pada halaman yang sudah dikenalnya (tentu saja, jika kami tidak mendapatkan pra-otorisasi di sana):



Masuk dengan kredensial GitLab Anda - dan semuanya terjadi:



Tentang Fitur Dasbor


Jika Anda seorang pengembang yang sebelumnya tidak bekerja dengan Kubernetes, atau hanya karena alasan tertentu tidak pernah menemukan Dashboard sebelumnya, saya akan menggambarkan beberapa fitur-fiturnya.

Pertama, Anda dapat melihat bahwa "semuanya berwarna hijau":



Data yang lebih rinci tersedia di pod, seperti variabel lingkungan, gambar kempes, argumen startup, statusnya:



Status penerapan terlihat:



... dan detail lainnya:



... serta kemampuan untuk meningkatkan penyebaran:



Hasil dari operasi ini:



Di antara fitur bermanfaat lainnya yang telah disebutkan di awal artikel adalah melihat log:



... dan fungsi memasuki konsol wadah dari pod yang dipilih:



Misalnya, Anda juga dapat melihat batas / permintaan pada node:



Tentu saja, ini tidak semua fitur panel, tapi saya harap ide umum telah berkembang.

Kerugian Integrasi dan Dasbor


Dalam integrasi yang dijelaskan tidak ada kontrol akses . Dengannya, semua pengguna yang memiliki akses apa pun ke GitLab mendapatkan akses ke Dasbor. Mereka memiliki akses yang sama ke Dasbor, sesuai dengan hak Dasbor, yang didefinisikan dalam RBAC . Jelas, ini tidak cocok untuk semua orang, tetapi untuk kasus kami ternyata cukup.

Dari minus yang terlihat di Dashboard itu sendiri, saya perhatikan yang berikut:

  • tidak mungkin untuk masuk ke konsol wadah init;
  • tidak mungkin untuk mengedit Penyebaran dan StatefulSets, meskipun ini dapat diperbaiki di ClusterRole;
  • Kompatibilitas dasbor dengan versi terbaru Kubernetes dan masa depan proyek menimbulkan pertanyaan.

Masalah terakhir pantas mendapat perhatian khusus.

Status dan Alternatif Dasbor


Tabel kompatibilitas Dashboard dengan rilis Kubernetes, disajikan dalam versi terbaru proyek ( v1.10.1 ), sangat tidak senang:



Meskipun demikian, ada (sudah diadopsi pada bulan Januari) PR # 3476 , yang mengumumkan dukungan untuk K8 1.13. Selain itu, di antara masalah-masalah proyek Anda dapat menemukan referensi untuk pengguna yang bekerja dengan panel di K8 1.14. Akhirnya, komit ke basis kode proyek tidak berhenti. Jadi (setidaknya!) Status sebenarnya dari proyek ini tidak seburuk yang pertama kali muncul dari tabel kompatibilitas resmi.

Akhirnya, Dashboard memiliki alternatif. Diantaranya adalah:

  1. K8Dash adalah antarmuka muda (komit pertama bertanggal Maret tahun ini), sudah menawarkan fitur yang baik, seperti representasi visual dari status cluster saat ini dan pengelolaan objeknya. Diposisikan sebagai "antarmuka waktu nyata", karena secara otomatis memperbarui data yang ditampilkan tanpa memerlukan penyegaran halaman di browser.
  2. OpenShift Console adalah antarmuka web dari Red Hat OpenShift, yang, bagaimanapun, akan membawa pencapaian proyek lainnya ke cluster Anda, yang tidak cocok untuk semua orang.
  3. Kubernator adalah proyek menarik yang dibuat sebagai antarmuka level bawah (selain Dashboard) dengan kemampuan untuk melihat semua objek di cluster. Namun, semuanya tampak seperti perkembangannya telah berhenti.
  4. Polaris baru-baru ini mengumumkan sebuah proyek yang menggabungkan fungsi-fungsi sebuah panel (menunjukkan keadaan cluster saat ini, tetapi tidak mengelola objeknya) dan "validasi praktik terbaik" otomatis (memeriksa cluster untuk konfigurasi yang benar dari Penyebaran yang berjalan di dalamnya).

Alih-alih kesimpulan


Dashboard adalah alat standar untuk kelompok Kubernet yang kami layani. Integrasi dengan GitLab juga telah menjadi bagian dari "instalasi default" kami, karena banyak pengembang senang dengan peluang yang mereka miliki dengan panel ini.

Kubernetes Dashboard secara berkala memiliki alternatif dari komunitas Open Source (dan kami senang mempertimbangkannya), tetapi pada tahap ini kami tetap dengan solusi ini.

PS


Baca juga di blog kami:



UPD Menurut laporan whoch, kesalahan ditemukan di tambalan (tab diganti dengan spasi). Tambalan dalam artikel telah diperbarui.

Source: https://habr.com/ru/post/id452988/


All Articles