Mar a dh’ fhosglas tu tunail ann am pod Kubernetes no soitheach le tcpserver agus netcat

Thoir an aire. eadar-theangachadh.: Tha an nota practaigeach seo bho neach-cruthachaidh LayerCI na dheagh eisimpleir de na molaidhean & cleasan ris an canar Kubernetes (agus barrachd). Chan eil am fuasgladh a thathar a’ moladh an seo ach aon den bheagan agus, is dòcha, chan e am fear as fhollaisiche (airson cuid de chùisean, dh’ fhaodadh am fear “dùthchasach” airson K8n a chaidh ainmeachadh cheana anns na beachdan a bhith iomchaidh. kubectl port-forward). Ach, tha e a 'toirt cothrom dhut co-dhiù coimhead air an duilgheadas bho shealladh a bhith a' cleachdadh ghoireasan clasaigeach agus gan cur còmhla - aig an aon àm sìmplidh, sùbailte agus cumhachdach (faic "beachdan eile" aig an deireadh airson brosnachadh).

Mar a dh’ fhosglas tu tunail ann am pod Kubernetes no soitheach le tcpserver agus netcat

Smaoinich air suidheachadh àbhaisteach: tha thu ag iarraidh port air an inneal ionadail agad gus trafaic a chuir air adhart gu draoidheil gu pod / soitheach (no a chaochladh).

Cùisean cleachdaidh a dh’ fhaodadh a bhith ann

  1. Thoir sùil air na tha an endpoint HTTP a’ tilleadh /healthz pod anns a’ bhuidheann riochdachaidh.
  2. Ceangail dì-bhugadair TCP ris a 'phoit air an inneal ionadail.
  3. Faigh cothrom air an stòr-dàta toraidh bho innealan stòr-dàta ionadail gun a bhith a’ cur dragh air dearbhadh (mar as trice tha còraichean freumh aig localhost).
  4. Ruith sgriobt imrich aon-ùine airson dàta ann am buidheann àrd-ùrlar gun a bhith agad ri inneal a chruthachadh air a shon.
  5. Ceangail seisean VNC ri pod a tha a’ ruith deasg brìgheil (faic XVFB).

Beagan fhaclan mu na h-innealan riatanach

Tcpserver - Goireas Open Source ri fhaighinn anns a’ mhòr-chuid de stòran pacaid Linux. Leigidh e leat port ionadail fhosgladh agus trafaic ath-stiùireadh a gheibhear tro stdin/stdout bho àithne ainmichte sam bith thuige:

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:~$

(ascinema.org)

Nì Netcat a chaochladh. Leigidh e leat ceangal ri port fosgailte agus a dhol seachad air an I/O a fhuaireadh bhuaithe gu 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:~$

(ascinema.org)

Anns an eisimpleir gu h-àrd, tha netcat ag iarraidh an duilleag thairis air HTTP. Bratach -C ag adhbhrachadh gun cuir e CRLF ri deireadh na loidhne.

Ceangal le kubectl: èist ris an òstair agus ceangail ris a’ pod

Ma chuireas sinn na h-innealan gu h-àrd còmhla ri kubectl, gheibh sinn òrdugh mar seo:

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

Le samhlachas, gus faighinn gu port 80 taobh a-staigh a’ phoit bidh e gu leòr ri dhèanamh 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

(ascinema.org)

Mar a dh’ fhosglas tu tunail ann am pod Kubernetes no soitheach le tcpserver agus netcat
Diagram eadar-obrachadh goireasachd

An taobh eile: èist sa pod agus ceangail ris an aoigh

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

Leigidh an àithne seo leis a’ phod faighinn gu port 8000 air an inneal ionadail.

Sgriobt bash

Sgrìobh mi sgriobt sònraichte airson Bash a leigeas leat buidheann riochdachaidh Kubernetes a riaghladh Sreath CIa 'cleachdadh an dòigh a tha air a mhìneachadh gu h-àrd:

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

Ma chuireas tu ris a’ ghnìomh seo ~/.bashrc, faodaidh tu tunail fhosgladh gu furasta ann am pod leis an àithne kubetunnel web-pod 8080 agus dèan curl localhost:6666.

  • Airson an tunail a-steach Docker faodaidh tu a dhol an àite a’ phrìomh loidhne le:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • airson tunail a-steach K3s - atharraich e gu:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • agus mar sin air adhart.

Beachdan eile

  • Faodaidh tu trafaic UDP ath-stiùireadh a’ cleachdadh nan òrduighean netcat -l -u -c an àite tcpserver и netcat -u an àite netcat fa leth.
  • Seall I/O tro shealladair pìoba:

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

  • Faodaidh tu trafaic a dhlùthadh agus a dhì-dhùmhlachadh air gach ceann a’ cleachdadh gzip.
  • Ceangail tro SSH ri coimpiutair eile leis an fhaidhle fhreagarrach kubeconfig:

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

  • Faodaidh tu dà pod a cheangal ann an diofar chlàran a’ cleachdadh mkfifo agus ruith dà àithne fa leth kubectl.

Tha na cothroman gun chrìoch!

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann