Momwe mungatsegule ngalande mu Kubernetes pod kapena chidebe chokhala ndi tcpserver ndi netcat

Zindikirani. transl.: Cholemba chothandiza ichi chochokera kwa omwe adapanga LayerCI ndi chithunzi chabwino kwambiri chazomwe zimatchedwa malangizo & zidule za Kubernetes (ndi zina zambiri). Yankho lomwe laperekedwa pano ndi limodzi mwa ochepa chabe ndipo, mwina, osati lodziwikiratu (nthawi zina, "yachibadwidwe" ya ma K8 omwe atchulidwa kale m'mawu atha kukhala oyenera. kubectl port-forward). Komabe, zimakulolani kuti muyang'ane vutolo pogwiritsa ntchito zida zakale ndikuziphatikizanso - nthawi yomweyo zosavuta, zosinthika komanso zamphamvu (onani "malingaliro ena" kumapeto kwa kudzoza).

Momwe mungatsegule ngalande mu Kubernetes pod kapena chidebe chokhala ndi tcpserver ndi netcat

Ingoganizirani momwe zimakhalira: mukufuna doko pamakina anu am'deralo kuti lizitumiza modabwitsa magalimoto ku pod/chotengera (kapena mosemphanitsa).

Zotheka kugwiritsa ntchito

  1. Onani zomwe HTTP endpoint ibwerera /healthz pod mu gulu lopanga.
  2. Lumikizani debugger ya TCP ku pod pamakina akomweko.
  3. Pezani mwayi wopezeka pankhokwe zopangira kuchokera ku zida zam'malo osungiramo zinthu popanda kuvutitsidwa ndi kutsimikizika (nthawi zambiri localhost imakhala ndi maufulu a mizu).
  4. Thamangani zolembedwa zakusamuka kamodzi kwa data mugulu lamagulu osapanga chidebe.
  5. Lumikizani gawo la VNC ku pod yomwe ikuyenda pakompyuta (onani XVFB).

Mawu ochepa okhudza zida zofunika

Tcpserver - Ntchito Yotsegula Yopezeka m'malo ambiri a Linux phukusi. Zimakulolani kuti mutsegule doko lapafupi ndikuwongoleranso magalimoto omwe alandilidwa kudzera pa stdin/stdout kuchokera ku lamulo lililonse lomwe laperekedwa kwa ilo:

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 imachita zosiyana. Zimakupatsani mwayi wolumikizana ndi doko lotseguka ndikudutsa I/O yomwe idalandilidwa kuchokera pamenepo kupita ku 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)

Muchitsanzo pamwambapa, netcat imapempha tsambali pa HTTP. Mbendera -C zimapangitsa kuti iwonjezere CRLF mpaka kumapeto kwa mzere.

Kulumikizana ndi kubectl: mverani wolandirayo ndikulumikizana ndi pod

Tikaphatikiza zida zomwe zili pamwambapa ndi kubectl, timalandila lamulo monga ili:

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

Mwa fanizo, kulowa doko 80 mkati mwa pod kudzakhala kokwanira kuchita 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)

Momwe mungatsegule ngalande mu Kubernetes pod kapena chidebe chokhala ndi tcpserver ndi netcat
Chiwonetsero chothandizira

Kumbali ina: mvetserani mu pod ndikugwirizanitsa ndi wolandira

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

Lamuloli limalola kuti pod ipeze doko 8000 pamakina akomweko.

Bash script

Ndinalemba zolemba zapadera za Bash zomwe zimakupatsani mwayi wowongolera gulu la Kubernetes kupanga LayerCIpogwiritsa ntchito njira yomwe tafotokozayi:

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"
}

Ngati muwonjezera ntchitoyi ~/.bashrc, mutha kutsegula tunnel mu pod ndi lamulo kubetunnel web-pod 8080 ndi kuchita curl localhost:6666.

  • Kwa tunnel mu Docker mutha kusintha mzere waukulu ndi:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • kwa tunnel K3 ndi -kusintha kukhala:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • ndi zina zotero.

Malingaliro ena

  • Mutha kuwongolera magalimoto a UDP pogwiritsa ntchito malamulowo netcat -l -u -c mmalo mwa tcpserver ΠΈ netcat -u mmalo mwa netcat motero.
  • Onani I/O kudzera pa pipe viewer:

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

  • Mutha kupondereza ndikuchepetsa kuchuluka kwa magalimoto kumbali zonse ziwiri pogwiritsa ntchito gzip.
  • Lumikizani kudzera pa SSH ku kompyuta ina ndi fayilo yofananira kubeconfig:

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

  • Mutha kulumikiza ma pod awiri m'magulu osiyanasiyana pogwiritsa ntchito mkfifo ndikuyendetsa malamulo awiri osiyana kubectl.

Mwayi ndi zopanda malire!

PS kuchokera kwa womasulira

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga