ٹی سی پیسرور اور نیٹ کیٹ کے ساتھ کبرنیٹس پوڈ یا کنٹینر میں سرنگ کیسے کھولی جائے

نوٹ. ترجمہ: LayerCI کے تخلیق کار کی طرف سے یہ عملی نوٹ Kubernetes (اور مزید) کے لیے نام نہاد تجاویز اور چالوں کی ایک بہترین مثال ہے۔ یہاں تجویز کردہ حل صرف چند میں سے ایک ہے اور، شاید، سب سے زیادہ واضح نہیں ہے (کچھ معاملات کے لیے، K8s کے لیے "مقامی" جو پہلے ہی تبصروں میں ذکر کیا گیا ہے، مناسب ہو سکتا ہے kubectl port-forward)۔ تاہم، یہ آپ کو کم از کم کلاسیکی افادیت کے استعمال اور ان کو مزید یکجا کرنے کے نقطہ نظر سے مسئلہ کو دیکھنے کی اجازت دیتا ہے - ایک ہی وقت میں سادہ، لچکدار اور طاقتور (انسپائریشن کے لیے آخر میں "دیگر آئیڈیاز" دیکھیں)۔

ٹی سی پیسرور اور نیٹ کیٹ کے ساتھ کبرنیٹس پوڈ یا کنٹینر میں سرنگ کیسے کھولی جائے

ایک عام صورت حال کا تصور کریں: آپ چاہتے ہیں کہ آپ کی مقامی مشین پر ایک بندرگاہ جادوئی طور پر ٹریفک کو پوڈ/کنٹینر (یا اس کے برعکس) کی طرف بھیجے۔

ممکنہ استعمال کے معاملات

  1. چیک کریں کہ HTTP اینڈ پوائنٹ کیا لوٹاتا ہے۔ /healthz پیداوار کلسٹر میں پوڈ.
  2. مقامی مشین پر ایک TCP ڈیبگر کو پوڈ سے جوڑیں۔
  3. تصدیق کے ساتھ پریشان کیے بغیر مقامی ڈیٹا بیس ٹولز سے پروڈکشن ڈیٹا بیس تک رسائی حاصل کریں (عام طور پر لوکل ہوسٹ کے بنیادی حقوق ہوتے ہیں)۔
  4. اسٹیجنگ کلسٹر میں ڈیٹا کے لیے کنٹینر بنائے بغیر ایک بار کی منتقلی کا اسکرپٹ چلائیں۔
  5. VNC سیشن کو ورچوئل ڈیسک ٹاپ چلانے والے پوڈ سے جوڑیں (XVFB دیکھیں)۔

ضروری اوزار کے بارے میں چند الفاظ

ٹی سی پیسرور — ایک اوپن سورس یوٹیلیٹی جو زیادہ تر لینکس پیکیج ریپوزٹریز میں دستیاب ہے۔ یہ آپ کو مقامی بندرگاہ کھولنے اور stdin/stdout کے ذریعے موصول ہونے والی ٹریفک کو کسی مخصوص کمانڈ سے اس کی طرف بھیجنے کی اجازت دیتا ہے:

colin@colin-work:~$ tcpserver 127.0.0.1 8080 echo -e 'HTTP/1.0 200 OKrnContent-Length: 19rnrn<body>hello!</body>'&
[1] 17377
colin@colin-work:~$ curl localhost:8080
<body>hello!</body>colin@colin-work:~$

(asciinema.org)

Netcat اس کے برعکس کرتا ہے۔ یہ آپ کو کھلی بندرگاہ سے منسلک ہونے اور اس سے موصول ہونے والے I/O کو stdin/stdout میں منتقل کرنے کی اجازت دیتا ہے:

colin@colin-work:~$ nc -C httpstat.us 80
GET /200 HTTP/1.0
Host: httpstat.us
HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.1
Access-Control-Allow-Origin: *
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=93fdbab9d364704de8ef77182b4d13811344b7dd1ec45d3a9682bbd6fa154ead;Path=/;HttpOnly;Domain=httpstat.us
Date: Fri, 01 Nov 2019 17:53:04 GMT
Connection: close
Content-Length: 0

^C
colin@colin-work:~$

(asciinema.org)

مندرجہ بالا مثال میں، netcat HTTP پر صفحہ کی درخواست کرتا ہے۔ جھنڈا۔ -C لائن کے آخر میں CRLF کو جوڑنے کا سبب بنتا ہے۔

kubectl کے ساتھ کنکشن: میزبان پر سنیں اور پوڈ سے جڑیں۔

اگر ہم اوپر والے ٹولز کو kubectl کے ساتھ جوڑتے ہیں تو ہمیں اس طرح کی کمانڈ ملتی ہے:

tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080

تشبیہ کے مطابق، پوڈ کے اندر پورٹ 80 تک رسائی حاصل کرنا کافی ہوگا۔ curl "127.0.0.1:80":

colin@colin-work:~$ sanic kubectl exec -it web-54dfb667b6-28n85 bash
root@web-54dfb667b6-28n85:/web# apt-get -y install netcat-openbsd
Reading package lists... Done
Building dependency tree
Reading state information... Done
netcat-openbsd is already the newest version (1.195-2).
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.
root@web-54dfb667b6-28n85:/web# exit
colin@colin-work:~$ tcpserver 127.0.0.1 8000 sanic kubectl exec -i web-54dfb667b6-28n85 nc 127.0.0.1 8080&
[1] 3232
colin@colin-work:~$ curl localhost:8000/healthz
{"status":"ok"}colin@colin-work:~$ exit

(asciinema.org)

ٹی سی پیسرور اور نیٹ کیٹ کے ساتھ کبرنیٹس پوڈ یا کنٹینر میں سرنگ کیسے کھولی جائے
افادیت کے تعامل کا خاکہ

مخالف سمت میں: پوڈ میں سنیں اور میزبان سے جڑیں۔

nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat

یہ کمانڈ پوڈ کو مقامی مشین پر پورٹ 8000 تک رسائی کی اجازت دیتی ہے۔

باش اسکرپٹ

میں نے Bash کے لیے ایک خصوصی اسکرپٹ لکھا ہے جو آپ کو Kubernetes پروڈکشن کلسٹر کا انتظام کرنے کی اجازت دیتا ہے۔ لیئر سی آئیاوپر بیان کردہ طریقہ کا استعمال کرتے ہوئے:

kubetunnel() {
    POD="$1"
    DESTPORT="$2"
    if [ -z "$POD" -o -z "$DESTPORT" ]; then
        echo "Usage: kubetunnel [pod name] [destination port]"
        return 1
    fi
    pkill -f 'tcpserver 127.0.0.1 6666'
    tcpserver 127.0.0.1 6666 kubectl exec -i "$POD" nc 127.0.0.1 "$DESTPORT"&
    echo "Connect to 127.0.0.1:6666 to access $POD:$DESTPORT"
}

اگر آپ اس فنکشن کو اس میں شامل کرتے ہیں۔ ~/.bashrc، آپ کمانڈ کے ساتھ آسانی سے پوڈ میں ایک سرنگ کھول سکتے ہیں۔ kubetunnel web-pod 8080 اور کرو curl localhost:6666.

  • اندر سرنگ کے لیے میں Docker آپ مین لائن کو اس سے بدل سکتے ہیں:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • میں سرنگ کے لیے K3s - اسے تبدیل کریں:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • وغیرہ

دوسرے خیالات

  • آپ کمانڈز کا استعمال کرتے ہوئے UDP ٹریفک کو ری ڈائریکٹ کر سکتے ہیں۔ netcat -l -u -c کے بجائے tcpserver и netcat -u کے بجائے netcat بالترتیب.
  • پائپ ویور کے ذریعے I/O دیکھیں:

    nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat

  • آپ استعمال کر کے دونوں سروں پر ٹریفک کو کمپریس اور ڈیکمپریس کر سکتے ہیں۔ gzip.
  • SSH کے ذریعے متعلقہ فائل کے ساتھ دوسرے کمپیوٹر سے جڑیں۔ kubeconfig:

    tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80"

  • آپ استعمال کرتے ہوئے مختلف کلسٹرز میں دو پوڈس کو جوڑ سکتے ہیں۔ mkfifo اور دو الگ الگ کمانڈ چلائیں۔ kubectl.

! безграничны!

مترجم سے PS

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

ماخذ: www.habr.com

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