ڪبرنيٽس پوڊ يا ڪنٽينر ۾ tcpserver ۽ netcat سان سرنگ ڪيئن کولجي

نوٽ. ترجمو: LayerCI جي تخليق ڪندڙ کان هي عملي نوٽ ڪبرنيٽس (۽ وڌيڪ) لاءِ نام نهاد تجويزون ۽ ترڪيبون جو هڪ بهترين مثال آهي. هتي تجويز ڪيل حل صرف چند مان هڪ آهي ۽، شايد، سڀ کان وڌيڪ واضح نه آهي (ڪجهه ڪيسن لاء، "آبائي" هڪ K8 لاء اڳ ۾ ئي ذڪر ڪيل تبصرن ۾ مناسب ٿي سگهي ٿو. kubectl port-forward). بهرحال، اهو توهان کي اجازت ڏئي ٿو ته گهٽ ۾ گهٽ مسئلي کي ڏسڻ جي نقطي نظر کان ڪلاسيڪل افاديت کي استعمال ڪرڻ ۽ انهن کي وڌيڪ گڏ ڪرڻ - ساڳئي وقت سادو، لچڪدار ۽ طاقتور (ڏسو "ٻيا خيال" آخر ۾ حيرت لاء).

ڪبرنيٽس پوڊ يا ڪنٽينر ۾ tcpserver ۽ netcat سان سرنگ ڪيئن کولجي

هڪ عام صورتحال جو تصور ڪريو: توهان چاهيو ٿا ته توهان جي مقامي مشين تي هڪ بندرگاهه جادوئي طور تي ٽرئفڪ کي پوڊ / ڪنٽينر ڏانهن منتقل ڪرڻ لاءِ (يا ان جي برعڪس).

ممڪن استعمال ڪيس

  1. چيڪ ڪريو ته ڇا HTTP آخر پوائنٽ واپس اچي ٿو /healthz پيداوار جي ڪلستر ۾ پوڊ.
  2. مقامي مشين تي هڪ TCP ڊيبگر کي پوڊ سان ڳنڍيو.
  3. مقامي ڊيٽابيس جي اوزارن مان پيداوار جي ڊيٽابيس تائين رسائي حاصل ڪريو بغير تصديق جي تڪليف ڪرڻ جي (عام طور تي لوڪل هوسٽ وٽ روٽ حق آهن).
  4. ھڪڙي وقت واري لڏپلاڻ واري اسڪرپٽ کي ھڪڙي اسٽيجنگ ڪلستر ۾ ڊيٽا لاءِ بغير ان لاءِ ڪنٽينر ٺاھيو.
  5. وي اين سي سيشن کي ورچوئل ڊيسڪ ٽاپ تي هلندڙ پوڊ سان ڳنڍيو (ڏسو XVFB).

ضروري اوزار جي باري ۾ چند لفظ

Tcpserver - هڪ اوپن سورس يوٽيليٽي موجود آهي اڪثر لينڪس پيڪيج جي ذخيرن ۾. اهو توهان کي اجازت ڏئي ٿو هڪ مقامي بندرگاهه کولڻ ۽ ڪنهن به مخصوص حڪم کان 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 سان ڪنيڪشن: ميزبان تي ٻڌو ۽ پوڊ سان ڳنڍيو

جيڪڏهن اسان مٿي ڏنل اوزار کي ڪبيڪٽل سان گڏ ڪريون ٿا، اسان کي هن طرح هڪ حڪم ملي ٿو:

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)

ڪبرنيٽس پوڊ يا ڪنٽينر ۾ tcpserver ۽ netcat سان سرنگ ڪيئن کولجي
يوٽيلٽي رابطي جو خاڪو

مخالف سمت ۾: پوڊ ۾ ٻڌو ۽ ميزبان سان ڳنڍيو

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

هي حڪم پوڊ کي مقامي مشين تي پورٽ 8000 تائين رسائي جي اجازت ڏئي ٿو.

باش اسڪرپٽ

مون بش لاءِ هڪ خاص اسڪرپٽ لکيو آهي جيڪا توهان کي ڪبرنيٽس جي پيداوار واري ڪلستر کي منظم ڪرڻ جي اجازت ڏئي ٿي LayerCIمٿي بيان ڪيل طريقي کي استعمال ڪندي:

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"
  • اندر سرنگ لاء ڪ 3 - ان کي تبديل ڪريو:
    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.

امڪان لامحدود آهن!

پي ايس مترجم کان

اسان جي بلاگ تي پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو