Yuav ua li cas qhib lub qhov hauv Kubernetes pod lossis thawv nrog tcpserver thiab netcat

Nco tseg. txhais.: Daim ntawv qhia siv tau los ntawm tus tsim LayerCI yog ib qho piv txwv zoo heev ntawm cov lus qhia thiab kev ua kom yuam kev rau Kubernetes (thiab ntau dua). Cov kev daws teeb meem no tsuas yog ib qho ntawm ob peb thiab, tej zaum, tsis yog qhov pom tseeb tshaj plaws (rau qee kis, "ib haiv neeg" rau K8s twb tau hais hauv cov lus yuav tsim nyog. kubectl port-forward). Txawm li cas los xij, nws tso cai rau koj kom tsawg kawg saib qhov teeb meem los ntawm kev xav ntawm kev siv cov khoom siv classical thiab txuas ntxiv ua ke - tib lub sijhawm yooj yim, hloov tau thiab muaj zog (saib "lwm cov tswv yim" thaum kawg rau kev tshoov siab).

Yuav ua li cas qhib lub qhov hauv Kubernetes pod lossis thawv nrog tcpserver thiab netcat

Xav txog qhov xwm txheej zoo li no: koj xav tau qhov chaw nres nkoj ntawm koj lub tshuab hauv zos kom xa mus rau kev xa mus rau lub plhaub taum / thawv (lossis lwm qhov).

Muaj peev xwm siv tau

  1. Txheeb xyuas qhov HTTP qhov kawg xa rov qab /healthz pod nyob rau hauv pawg ntau lawm.
  2. Txuas lub TCP debugger rau lub pod ntawm lub tshuab hauv zos.
  3. Tau txais kev nkag mus rau cov ntaub ntawv tsim tawm los ntawm cov cuab yeej database hauv zos tsis tas yuav thab nrog kev lees paub (feem ntau localhost muaj cai hauv paus).
  4. Khiav ib tsab ntawv tsiv teb tsaws chaw ib zaug rau cov ntaub ntawv hauv pawg staging yam tsis tas yuav tsim lub thawv rau nws.
  5. Txuas lub rooj sib tham VNC mus rau lub pod khiav lub desktop virtual (saib XVFB).

Ob peb lo lus hais txog cov cuab yeej tsim nyog

Tcpserver - Qhov qhib qhov chaw siv hluav taws xob muaj nyob rau hauv feem ntau Linux pob repositories. Nws tso cai rau koj qhib qhov chaw nres nkoj hauv zos thiab hloov pauv tsheb tau txais los ntawm stdin / stdout los ntawm ib qho lus txib rau nws:

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 ua qhov sib txawv. Nws tso cai rau koj txuas mus rau qhov chaw nres nkoj qhib thiab hla I / O tau txais los ntawm nws mus rau 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)

Hauv qhov piv txwv saum toj no, netcat thov nplooj ntawv hla HTTP. Chij -C ua rau nws ntxiv CRLF mus rau qhov kawg ntawm kab.

Kev sib txuas nrog kubectl: mloog ntawm tus tswv tsev thiab txuas mus rau lub pod

Yog tias peb muab cov cuab yeej saum toj no nrog kubectl, peb tau txais cov lus txib zoo li no:

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

Los ntawm kev sib piv, kom nkag mus rau qhov chaw nres nkoj 80 hauv lub pod nws yuav txaus ua 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)

Yuav ua li cas qhib lub qhov hauv Kubernetes pod lossis thawv nrog tcpserver thiab netcat
Daim duab qhia kev sib txuas lus siv hluav taws xob

Nyob rau hauv qhov opposite kev taw qhia: mloog nyob rau hauv lub pod thiab txuas mus rau tus tswv tsev

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

Cov lus txib no tso cai rau lub pod nkag mus rau qhov chaw nres nkoj 8000 ntawm lub tshuab hauv zos.

Bash tsab ntawv

Kuv tau sau ib tsab ntawv tshwj xeeb rau Bash uas tso cai rau koj los tswj hwm Kubernetes pawg ntau lawm Txheej CIsiv txoj kev piav qhia saum toj no:

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

Yog tias koj ntxiv cov haujlwm no rau ~/.bashrc, koj tuaj yeem yooj yim qhib lub qhov hauv lub plhaub nrog cov lus txib kubetunnel web-pod 8080 thiab ua curl localhost:6666.

  • Rau qhov tunnel hauv docker koj tuaj yeem hloov lub ntsiab kab nrog:
    tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
  • rau tunnel hauv K3 xyoo - hloov nws mus rau:
    tcpserver 127.0.0.1 6666 k3s kubectl exec …
  • thiab ua li ntawd.

Lwm cov tswv yim

  • Koj tuaj yeem hloov pauv UDP tsheb siv cov lus txib netcat -l -u -c es tsis txhob tcpserver ΠΈ netcat -u es tsis txhob netcat feem.
  • Saib I/O ntawm yeeb nkab saib:

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

  • Koj tuaj yeem compress thiab decompress tsheb khiav ntawm ob qhov kawg siv gzip.
  • Txuas ntawm SSH mus rau lwm lub computer nrog cov ntaub ntawv sib xws kubeconfig:

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

  • Koj tuaj yeem txuas ob lub pods hauv pawg sib txawv siv mkfifo thiab khiav ob yam lus txib kubectl.

Qhov ua tau yog qhov kawg!

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib