د tcpserver او netcat سره د Kubernetes پوډ یا کانټینر کې د تونل خلاصولو څرنګوالی

نوټ. ژباړه: د LayerCI د جوړونکي څخه دا عملي یادښت د Kubernetes (او نور) لپاره د تش په نامه لارښوونو او چلونو غوره مثال دی. دلته وړاندیز شوی حل یوازې یو له یو څو څخه دی او شاید خورا څرګند نه وي (د ځینو قضیو لپاره ، د K8s لپاره "اصلي" یو چې دمخه یې په نظرونو کې یادونه شوې ممکن مناسب وي kubectl port-forward). په هرصورت، دا تاسو ته اجازه درکوي چې لږترلږه د کلاسیکي اسانتیاوو کارولو او د دوی د یوځای کولو له نظره ستونزه وګورئ - په ورته وخت کې ساده، انعطاف وړ او ځواکمن (د الهام لپاره په پای کې "نور نظرونه" وګورئ).

د tcpserver او netcat سره د Kubernetes پوډ یا کانټینر کې د تونل خلاصولو څرنګوالی

یو عادي حالت تصور کړئ: تاسو غواړئ په خپل محلي ماشین کې یو بندر په جادویی ډول ټرافیک پوډ / کانټینر ته ولیږئ (یا برعکس).

د کارولو احتمالي قضیې

  1. وګورئ چې د HTTP پای ټکی څه بیرته راګرځي /healthz پوډ د تولید کلستر کې.
  2. د TCP ډیبګر په محلي ماشین کې پوډ ته وصل کړئ.
  3. د ځایی ډیټابیس وسیلو څخه د تولید ډیټابیس ته لاسرسی ترلاسه کړئ پرته لدې چې د تصدیق سره زحمت وکړئ (معمولا لوکل هوسټ د ریښې حقونه لري).
  4. په سټیجینګ کلستر کې د ډیټا لپاره د یو وخت مهاجرت سکریپټ چل کړئ پرته لدې چې د دې لپاره کانټینر رامینځته کړئ.
  5. د VNC سیشن یو پوډ سره وصل کړئ چې یو مجازی ډیسټاپ چلوي (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 سره د Kubernetes پوډ یا کانټینر کې د تونل خلاصولو څرنګوالی
د کارونې متقابل عمل ډیاګرام

په مخالف لوري کې: په پوډ کې واورئ او کوربه سره وصل شئ

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.

  • د تونل دننه لپاره ډاکر تاسو کولی شئ اصلي کرښه د دې سره بدله کړئ:
    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

Add a comment