Nota. transl.: Kining praktikal nga nota gikan sa tiglalang sa LayerCI usa ka maayo kaayong ilustrasyon sa gitawag nga tips & tricks para sa Kubernetes (ug uban pa). Ang solusyon nga gisugyot dinhi usa lamang sa pipila ug, tingali, dili ang labing klaro (alang sa pipila ka mga kaso, ang "lumad" alang sa mga K8 nga nahisgutan na sa mga komento mahimong angay ). Bisan pa, gitugotan ka nga labing menos tan-awon ang problema gikan sa panan-aw sa paggamit sa mga klasikal nga kagamitan ug dugang nga paghiusa niini - sa samang higayon yano, flexible ug gamhanan (tan-awa ang "ubang mga ideya" sa katapusan alang sa inspirasyon).

Hunahunaa ang usa ka tipikal nga sitwasyon: gusto nimo ang usa ka pantalan sa imong lokal nga makina nga magical forward sa trapiko ngadto sa usa ka pod/container (o vice versa).
Posible nga mga kaso sa paggamit
- Susiha kung unsa ang gibalik sa HTTP endpoint
/healthzpod sa production cluster. - Ikonektar ang TCP debugger sa pod sa lokal nga makina.
- Pag-access sa database sa produksiyon gikan sa mga gamit sa lokal nga database nga dili kinahanglan nga magsamok sa pag-authenticate (kasagaran ang localhost adunay mga katungod sa gamut).
- Pagdalag usa ka higayon nga migration script para sa data sa usa ka staging cluster nga dili na kinahanglang maghimo ug sudlanan para niini.
- Ikonektar ang usa ka sesyon sa VNC sa usa ka pod nga nagdagan sa usa ka virtual desktop (tan-awa ang XVFB).
Pipila ka mga pulong mahitungod sa gikinahanglan nga mga himan
— Usa ka open source nga utility nga anaa sa kadaghanan sa mga repositoryo sa pakete. LinuxGitugotan ka niini nga mag-abli sa usa ka lokal nga pantalan ug i-redirect ang trapiko nga nadawat pinaagi sa stdin/stdout gikan sa bisan unsang gitakda nga mando ngadto niini:
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:~$()
Gibuhat sa Netcat ang sukwahi. Kini nagtugot kanimo sa pagkonektar sa usa ka bukas nga pantalan ug ipasa ang I/O nga nadawat gikan niini ngadto sa 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:~$()
Sa pananglitan sa ibabaw, gihangyo sa netcat ang panid sa HTTP. Bandila -C hinungdan nga idugang niini ang CRLF sa katapusan sa linya.
Koneksyon sa kubectl: paminaw sa host ug sumpay sa pod
Kung atong ikombinar ang mga himan sa ibabaw sa kubectl, makakuha kita og sugo nga sama niini:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080 Pinaagi sa analohiya, aron ma-access ang port 80 sa sulod sa pod kini igo na nga buhaton 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()

Utility interaction diagram
Sa atbang nga direksyon: paminaw sa pod ug sumpay sa host
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 catKini nga sugo nagtugot sa pod nga maka-access sa port 8000 sa lokal nga makina.
Bash nga script
Nagsulat ako usa ka espesyal nga script para sa Bash nga nagtugot kanimo sa pagdumala sa usa ka cluster sa produksiyon sa Kubernetes gamit ang pamaagi nga gihulagway sa ibabaw:
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"
} Kung imong idugang kini nga function sa ~/.bashrc, dali ra nimong maablihan ang usa ka tunel sa usa ka pod gamit ang mando kubetunnel web-pod 8080 ug buhata curl localhost:6666.
- Alang sa tunnel sa Docker mahimo nimong pulihan ang panguna nga linya sa:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT" - alang sa tunnel sa K3s - ilisan kini sa:
tcpserver 127.0.0.1 6666 k3s kubectl exec … - ug uban pa.
Uban pang mga ideya
- Mahimo nimong i-redirect ang trapiko sa UDP gamit ang mga sugo
netcat -l -u -cimbis ngatcpserverиnetcat -uimbis nganetcatsumala niana. - Tan-awa ang I/O pinaagi sa pipe viewer:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat - Mahimo nimong i-compress ug i-decompress ang trapiko sa duha ka tumoy gamit
gzip. - Sumpaysumpaya pinaagi sa SSH sa laing computer uban sa katugbang nga file
kubeconfig:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80" - Mahimo nimong ikonektar ang duha ka pod sa lainlaing mga cluster gamit
mkfifoug pagpadagan sa duha ka managlahing mga sugokubectl.
Во!
PS gikan sa tighubad
Basaha usab sa among blog:
- «";
- «";
- «";
- «".
Source: www.habr.com
