Conas tollán a oscailt i pod Kubernetes nó i gcoimeádán le tcpserver agus netcat

Nóta. aistrigh.: Is léiriú iontach é an nóta praiticiúil seo ó chruthaitheoir LayerCI ar na leideanna & cleasanna mar a thugtar orthu do Kubernetes (agus níos mó). Níl sa réiteach atá molta anseo ach ceann amháin den bheagán agus, b’fhéidir, nach bhfuil an ceann is soiléire (i gcásanna áirithe, d’fhéadfadh an réiteach “dúchais” do K8anna a luadh cheana sna tuairimí a bheith oiriúnach. kubectl port-forward). Mar sin féin, ligeann sé duit ar a laghad breathnú ar an bhfadhb ó thaobh úsáid a bhaint as fóntais chlasaiceacha agus iad a chomhcheangal tuilleadh - ag an am céanna simplí, solúbtha agus cumhachtach (féach “smaointe eile” ag an deireadh le haghaidh inspioráid).

Conas tollán a oscailt i pod Kubernetes nó i gcoimeádán le tcpserver agus netcat

Samhlaigh gnáthstaid: teastaíonn uait port ar do mheaisín áitiúil chun trácht a chur ar aghaidh go draíochtúil chuig pod/coimeádán (nó vice versa).

Cásanna úsáide féideartha

  1. Seiceáil cad a thugann an críochphointe HTTP ar ais /healthz pod sa bhraisle táirgeachta.
  2. Ceangail dífhabhtóir TCP leis an pod ar an meaisín áitiúil.
  3. Faigh rochtain ar an mbunachar sonraí táirgthe ó uirlisí bunachar sonraí áitiúla gan bac a chur ar fhíordheimhniú (go hiondúil tá cearta fréamhacha ag localhost).
  4. Rith script ascnaimh aonuaire le haghaidh sonraí i mbraisle stáitse gan a bheith ort coimeádán a chruthú dó.
  5. Ceangail seisiún VNC le pod a ritheann deasc fhíorúil (féach XVFB).

Cúpla focal faoi na huirlisí is gá

Freastalaí tcp — Fóntas Foinse Oscailte atá ar fáil i bhformhór na stórtha pacáiste Linux. Ligeann sé duit port áitiúil a oscailt agus trácht a fhaightear trí stdin/stdout a atreorú ó aon ordú sonraithe chuige:

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)

Déanann Netcat a mhalairt. Ligeann sé duit ceangal le port oscailte agus an I/O a fuarthas uaidh a chur ar aghaidh chuig 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)

Sa sampla thuas, iarrann netcat an leathanach thar HTTP. Bratach -C cuireann sé CRLF i gceangal le deireadh na líne.

Ceangal le kubectl: éisteacht ar an ósta agus ceangal leis an pod

Má chomhcheanglaímid na huirlisí thuas le kubectl, faighimid ordú mar seo:

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

De réir analaí, chun rochtain a fháil ar phort 80 taobh istigh den pod beidh sé go leor le dé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)

Conas tollán a oscailt i pod Kubernetes nó i gcoimeádán le tcpserver agus netcat
Léaráid idirghníomhaíochta fóntais

Sa treo eile: éisteacht sa pod agus ceangal leis an ósta

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

Ligeann an t-ordú seo don phod rochtain a fháil ar phort 8000 ar an meaisín áitiúil.

Bash script

Scríobh mé script speisialta do Bash a ligeann duit braisle táirgthe Kubernetes a bhainistiú Ciseal CIag baint úsáide as an modh a bhfuil cur síos air thuas:

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

Má chuireann tú an fheidhm seo le ~/.bashrc, is féidir leat tollán a oscailt go héasca i pod leis an ordú kubetunnel web-pod 8080 agus déan curl localhost:6666.

  • Don tollán i dhugaire is féidir leat an príomhlíne a athsholáthar le:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • le haghaidh tollán i K3s - athraigh go:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • etc

Tuilleadh smaointe

  • Is féidir leat trácht UDP a atreorú ag baint úsáide as na horduithe netcat -l -u -c in ionad tcpserver и netcat -u in ionad netcat faoi ​​seach.
  • Féach ar I/O trí amharcóir píopa:

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

  • Is féidir leat trácht ar an dá cheann a chomhbhrú agus a dhí-chomhbhrú ag baint úsáide as gzip.
  • Ceangail trí SSH le ríomhaire eile leis an gcomhad comhfhreagrach kubeconfig:

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

  • Is féidir leat dhá pods a nascadh i mbraislí éagsúla ag baint úsáide as mkfifo agus rith dhá ordú ar leith kubectl.

Tá na féidearthachtaí gan teorainn!

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment