Kubernetes ڈیش بورڈ اور GitLab صارفین کا انضمام

Kubernetes ڈیش بورڈ اور GitLab صارفین کا انضمام

Kubernetes ڈیش بورڈ آپ کے چل رہے کلسٹر کے بارے میں تازہ ترین معلومات حاصل کرنے اور اسے کم سے کم کوشش کے ساتھ منظم کرنے کے لیے استعمال میں آسان ٹول ہے۔ آپ اس کی مزید تعریف کرنا شروع کر دیتے ہیں جب ان خصوصیات تک رسائی کی ضرورت نہ صرف منتظمین/DevOps انجینئرز کو ہوتی ہے، بلکہ ان لوگوں کو بھی جو کنسول کے کم عادی ہیں اور/یا kubectl کے ساتھ بات چیت کی تمام پیچیدگیوں سے نمٹنے کا ارادہ نہیں رکھتے ہیں۔ دیگر افادیت. یہ ہمارے ساتھ ہوا: ڈویلپرز Kubernetes ویب انٹرفیس تک فوری رسائی چاہتے تھے، اور چونکہ ہم GitLab استعمال کرتے ہیں، اس لیے حل قدرتی طور پر سامنے آیا۔

یہ کیوں ہے؟

براہ راست ڈویلپرز ڈیبگنگ کے کاموں کے لیے K8s ڈیش بورڈ جیسے ٹول میں دلچسپی لے سکتے ہیں۔ کبھی کبھی آپ لاگز اور وسائل دیکھنا چاہتے ہیں، اور کبھی کبھی پوڈز کو مارنا چاہتے ہیں، ڈیپلائمنٹس/StatefulSets کو پیمانہ کرنا چاہتے ہیں، اور یہاں تک کہ کنٹینر کنسول پر جانا چاہتے ہیں (ایسی درخواستیں بھی ہیں، تاہم، ایک اور طریقہ بھی ہے - مثال کے طور پر، کے ذریعے kubectl-debug).

اس کے علاوہ، مینیجرز کے لیے ایک نفسیاتی لمحہ ہوتا ہے جب وہ کلسٹر کو دیکھنا چاہتے ہیں - یہ دیکھنا کہ "سب کچھ سبز ہے"، اور اس طرح خود کو یقین دلاتے ہیں کہ "سب کچھ کام کر رہا ہے" (جو یقیناً بہت ہی رشتہ دار ہے... لیکن یہ مضمون کے دائرہ کار سے باہر ہے)۔

ایک معیاری 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

تاہم، اسے استعمال کرنے سے پہلے، آپ کو گٹ لیب: ایڈمن ایریا → ایپلی کیشنز پر جانا ہوگا اور مستقبل کے پینل کے لیے ایک نئی ایپلیکیشن شامل کرنا ہوگی۔ آئیے اسے "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 اس کوکی کو مٹا دیتا ہے جو خود ہمیں فراہم کرتا ہے...

مسئلہ ایک پیچ کے ساتھ آپ کی اپنی اوتھ امیج بنا کر حل ہو جاتا ہے۔

پیچ اوتھ اور دوبارہ انسٹال کریں۔

ایسا کرنے کے لیے، ہم درج ذیل 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 ڈیش بورڈ اور 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 کنٹینر کے کنسول میں جانا ناممکن ہے۔
  • تعیناتیوں اور اسٹیٹفول سیٹس میں ترمیم کرنا ناممکن ہے، حالانکہ اسے کلسٹر رول میں طے کیا جا سکتا ہے۔
  • Kubernetes کے تازہ ترین ورژنز کے ساتھ ڈیش بورڈ کی مطابقت اور پروجیکٹ کے مستقبل پر سوالات اٹھتے ہیں۔

آخری مسئلہ خصوصی توجہ کا مستحق ہے۔

ڈیش بورڈ کی حیثیت اور متبادل

Kubernetes ریلیز کے ساتھ ڈیش بورڈ مطابقت کی میز، پروجیکٹ کے تازہ ترین ورژن میں پیش کی گئی ہے (v1.10.1)، بہت خوش نہیں:

Kubernetes ڈیش بورڈ اور GitLab صارفین کا انضمام

اس کے باوجود، وہاں ہے (پہلے ہی جنوری میں اپنایا گیا) PR #3476، جو K8s 1.13 کے لیے حمایت کا اعلان کرتا ہے۔ اس کے علاوہ، پروجیکٹ کے مسائل میں سے آپ K8s 1.14 میں پینل کے ساتھ کام کرنے والے صارفین کے حوالے تلاش کر سکتے ہیں۔ آخر میں، عہد کرتا ہے پراجیکٹ کے کوڈ بیس میں نہ رکیں۔ لہذا (کم از کم!) پروجیکٹ کی اصل حیثیت اتنی خراب نہیں ہے جتنی کہ یہ پہلے سرکاری مطابقت کی میز سے معلوم ہوتی ہے۔

آخر میں، ڈیش بورڈ کے متبادل موجود ہیں۔ ان کے درمیان:

  1. K8Dash — ایک نوجوان انٹرفیس (پہلا کمٹ اس سال کے مارچ کی تاریخ کا ہے)، جو پہلے سے ہی اچھی خصوصیات پیش کرتا ہے، جیسے کلسٹر کی موجودہ حیثیت کی بصری نمائندگی اور اس کی اشیاء کا انتظام۔ ایک "ریئل ٹائم انٹرفیس" کے طور پر پوزیشن میں ہے، کیونکہ آپ کو براؤزر میں صفحہ کو ریفریش کرنے کی ضرورت کے بغیر دکھائے گئے ڈیٹا کو خود بخود اپ ڈیٹ کرتا ہے۔
  2. اوپن شفٹ کنسول - Red Hat OpenShift کی طرف سے ایک ویب انٹرفیس، جو، تاہم، آپ کے کلسٹر میں پروجیکٹ کی دیگر پیشرفت لائے گا، جو ہر کسی کے لیے موزوں نہیں ہے۔
  3. کبرنیٹر ایک دلچسپ پروجیکٹ ہے، جو تمام کلسٹر اشیاء کو دیکھنے کی صلاحیت کے ساتھ نچلی سطح کے (ڈیش بورڈ سے زیادہ) انٹرفیس کے طور پر بنایا گیا ہے۔ تاہم، ایسا لگتا ہے کہ اس کی ترقی رک گئی ہے۔
  4. Polaris - دوسرے دن اعلان کیا ایک پروجیکٹ جو پینل کے افعال کو یکجا کرتا ہے (کلسٹر کی موجودہ حالت کو ظاہر کرتا ہے، لیکن اس کی اشیاء کو منظم نہیں کرتا ہے) اور خودکار "بہترین طریقوں کی توثیق" (اس میں چلنے والی تعیناتیوں کی ترتیب کی درستگی کے لیے کلسٹر کو چیک کرتا ہے)۔

نتائج کے بجائے

ڈیش بورڈ Kubernetes کلسٹرز کے لیے ایک معیاری ٹول ہے جو ہم پیش کرتے ہیں۔ GitLab کے ساتھ اس کا انضمام بھی ہماری ڈیفالٹ تنصیب کا حصہ بن گیا ہے، کیونکہ بہت سے ڈویلپر اس پینل کے ساتھ ان کی صلاحیتوں کے بارے میں پرجوش ہیں۔

Kubernetes ڈیش بورڈ کے پاس وقتاً فوقتاً اوپن سورس کمیونٹی کے متبادل ہوتے ہیں (اور ہمیں ان پر غور کرنے میں خوشی ہوتی ہے)، لیکن اس مرحلے پر ہم اس حل کے ساتھ رہتے ہیں۔

PS

ہمارے بلاگ پر بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں