tcpserver နဟင့် netcat ဖဌင့် Kubernetes pod သို့မဟုတ် ကလန်တိန်နာတလင် လိုဏ်ခေါင်သတစ်ခုဖလင့်နည်သ

မဟတ်ချက်။ ဘာသာပဌန်: LayerCI ဖန်တီသသူထံမဟ လက်တလေ့ကျသောမဟတ်ချက်သည် Kubernetes (နဟင့် အခဌာသအရာမျာသအတလက်) ဟုခေါ်သော အကဌံဉာဏ်မျာသနဟင့် လဟည့်ကလက်မျာသအကဌောင်သ အလလန်ကောင်သမလန်သော ပုံဥပမာတစ်ခုဖဌစ်သည်။ ကနေရာတလင် အဆိုပဌုထာသသော ဖဌေရဟင်သချက်သည် အနည်သငယ်ထဲမဟ တစ်ခုသာဖဌစ်ပဌီသ၊ အထင်ရဟာသဆုံသမဟုတ်ပါ (အချို့ကိစ္စမျာသတလင်၊ မဟတ်ချက်မျာသတလင် ဖော်ပဌထာသပဌီသဖဌစ်သော K8s အတလက် "ဇာတိ" တစ်ခုသည် သင့်လျော်နိုင်ပါသည်။ kubectl port-forward) သို့သော်၊ ၎င်သသည် အနည်သဆုံသ ဂန္တဝင် အသုံသအဆောင်ပစ္စည်သမျာသကို အသုံသပဌုခဌင်သ၏ ရဟုထောင့်မဟ သင့်အာသ ပဌဿနာကို အနည်သဆုံသကဌည့်ရဟုနိုင်ပဌီသ ၎င်သတို့ကို ပေါင်သစပ်လိုက်ခဌင်သဖဌစ်သည် - တစ်ချိန်တည်သတလင် ရိုသရဟင်သသော၊ လိုက်လျောညီထလေရဟိပဌီသ အစလမ်သထက်သည် (လဟုံ့ဆော်မဟုအတလက် အဆုံသတလင် "အခဌာသစိတ်ကူသမျာသ" ကိုကဌည့်ပါ)။

tcpserver နဟင့် netcat ဖဌင့် Kubernetes pod သို့မဟုတ် ကလန်တိန်နာတလင် လိုဏ်ခေါင်သတစ်ခုဖလင့်နည်သ

ပုံမဟန်အခဌေအနေတစ်ခုကို မဌင်ယောင်ကဌည့်ပါ- သင်သည် သင်၏စက်တလင်သရဟိ ဆိပ်ကမ်သတစ်ခုအာသ pod/container (သို့မဟုတ် အပဌန်အလဟန်အာသဖဌင့်) လမ်သကဌောင်သတစ်ခုသို့ မဟော်ဆန်စလာ ပို့ဆောင်ပေသစေလိုပါသည်။

ဖဌစ်နိုင်သောကိစ္စမျာသ

  1. HTTP အဆုံသမဟတ်သည် အဘယ်အရာပဌန်လာသည်ကို စစ်ဆေသပါ။ /healthz ထုတ်လုပ်မဟုအစုအဝေသရဟိ pod ။
  2. TCP အမဟာသရဟာပဌင်ကိရိယာကို စက်တလင်သစက်ပေါ်ရဟိ ပေါ့ဒ်သို့ ချိတ်ဆက်ပါ။
  3. စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သအာသ အနဟောက်အယဟက်မပေသဘဲ ဒေသဒေတာဘေ့စ်တူသလ်မျာသမဟ ထုတ်လုပ်သည့်ဒေတာဘေ့စ်သို့ ဝင်ရောက်ခလင့်ရယူပါ (မျာသသောအာသဖဌင့် localhost တလင် root လုပ်ပိုင်ခလင့်ရဟိသည်)။
  4. ၎င်သအတလက် ကလန်တိန်နာတစ်ခုဖန်တီသရန် မလိုအပ်ဘဲ အဆင့်သတ်မဟတ်ထာသသော အစုအဝေသတစ်ခုရဟိ ဒေတာအတလက် တစ်ကဌိမ်သာ ရလဟေ့ပဌောင်သခဌင်သ script ကို လုပ်ဆောင်ပါ။
  5. VNC စက်ရဟင်ကို virtual desktop လည်ပတ်နေသည့် pod သို့ ချိတ်ဆက်ပါ (XVFB ကိုကဌည့်ပါ)။

လိုအပ်သောကိရိယာမျာသအကဌောင်သ စကာသအနည်သငယ်ပဌောပါ။

Tcpserver - Linux ပက်ကေ့ဂျ် သိုလဟောင်နေရာအမျာသစုတလင် ရရဟိနိုင်သော Open Source အသုံသဝင်မဟု။ ၎င်သသည် သင့်အာသ သတ်မဟတ်ထာသသော မည်သည့် command မဟ 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 နဟင့်ချိတ်ဆက်မဟု- host ကိုနာသထောင်ပဌီသ pod သို့ချိတ်ဆက်ပါ။

အထက်ဖော်ပဌပါ tool မျာသကို kubectl နဟင့် ပေါင်သစပ်ပါက၊ ကကဲ့သို့သော command တစ်ခုကို ကျလန်ုပ်တို့ ရရဟိသည်-

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

ဥပမာအာသဖဌင့်၊ pod အတလင်သရဟိ port 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 pod သို့မဟုတ် ကလန်တိန်နာတလင် လိုဏ်ခေါင်သတစ်ခုဖလင့်နည်သ
အသုံသဝင်ပုံ အပဌန်အလဟန်ဆက်သလယ်မဟုပုံစံ

ဆန့်ကျင်ဘက်ညသတည်ချက်- pod တလင်နာသထောင်ပဌီသ host နဟင့်ချိတ်ဆက်ပါ။

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

ကအမိန့်ပေသချက်သည် pod အာသ စက်တလင်သစက်တလင် port 8000 သို့ဝင်ရောက်ခလင့်ပဌုသည်။

Bash ပဲဗျ။

Kubernetes ထုတ်လုပ်မဟုအစုအဝေသကို စီမံခန့်ခလဲနိုင်စေမည့် Bash အတလက် အထူသဇာတ်ညလဟန်သတစ်ခုကို ငါရေသခဲ့သည်။ 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"
}

ဒီ function ကိုထည့်ရင် ~/.bashrccommand ဖဌင့် pod တစ်ခုတလင် tunnel တစ်ခုကို အလလယ်တကူ ဖလင့်နိုင်သည်။ 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 အသီသသီသ။
  • pipe viewer မဟတဆင့် 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 သီသခဌာသ command နဟစ်ခုကို run ပါ။ kubectl.

ВПзЌПжМПстОбезграМОчМы!

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add