Shën. përkth.: Ky kjo shënim praktik nga krijuesi i LayerCI është një ilustërim i shkëlqyer i ashtuquajturave këshilla dhe trika për Kubernetes (dhe më shumë). Zgjidhja e propozuar këtu është vetëm një nga të paktat dhe ndoshta e pamundshme (në disa raste, zgjidhja e përmendur në komente "prapamendore" për K8s mund të jetë e përshtatshme) ). Sidoqoftë, ajo ofron të paktën mundësinë për të parë problemin nga pozita e përdorimit të utilitarëve klasikë dhe kombinimit të tyre më tej - të thjeshtë, fleksibël dhe të fuqishëm (shih "ide të tjera" në fund për frymëzim).

Imagjinoni një situatë tipike: dëshironi që një port në kompjuterin lokal të drejtojë magjikisht trafikun në pod/konteiner (ose anasjelltas).
Skenarët e mundshëm të përdorimit
- Kontrolloni se çfarë kthen HTTP endpoint
/healthzpod-it në klasterin e prodhimit. - Për të lidhur një debugger TCP me pod-in në kompjuterin lokal.
- Të qasni bazën e të dhënave të prodhimit nga mjetet lokale për punë me Baza të Dhënash pa pasur nevojë të merremi me autentifikimin (zakonisht localhost ka të drejta root).
- Të ekzekutoni një skenar migrimi një herë për të dhënat në klasterin e staging pa qënë nevoja të krijoni një kontejner për të.
- Të lidhni një sesion VNC me pod-in që ka një tryezë virtuale të aktivizuar (shih XVFB).
Disa fjalë për mjetet e nevojshme
â NjĂ« utilitar Open Source, i cili Ă«shtĂ« i disponueshĂ«m nĂ« shumicĂ«n e repozitorĂ«ve tĂ« paketave Linux. Ai mundĂ«son hapjen e njĂ« porti lokal dhe tĂ« drejtojĂ« trafikun nĂ« tĂ« nga stdin/stdout nga çdo komandĂ« tĂ« specifikuar:
colin@colin-work:~$ tcpserver 127.0.0.1 8080 echo -e 'HTTP/1.0 200 OKrnContent-Length: 19rnrn<body>përshëndetje!</body>'&
[1] 17377
colin@colin-work:~$ curl localhost:8080
<body>përshëndetje!</body>colin@colin-work:~$()
Netcat bën të kundërtën. Ai lejon lidhjen me një port të hapur dhe të dërgojë input/output nga ai në 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:~$()
Në shembullin e mësipërm, netcat bën një kërkesë HTTP. Flamuri -C bën që ai të shtojë CRLF në fund të rreshtit.
Kombinimi me kubectl: dëgjoni në host dhe lidheni me pod-in
Nëse bashkojmë mjetet e paraqitura me kubectl, do të marrim një komandë si kjo:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080 Po ashtu, për të qasur portin 80 brenda pod-it, mjafton të bëni 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()

Skema e bashkëveprimit të utilitarëve
Në anën tjetër: dëgjoni në pod dhe lidheni me hostin
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 catKy komandë lejon pod-in të qaset në portin 8000 në makinë lokale.
Skripti për Bash
Kisha shkruar një skript të veçantë për Bash, që lejon menaxhimin e klasterit të prodhimit Kubernetes , duke përdorur metodën e përshkruar më sipër:
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Përdorimi: kubetunnel [emri i pod-it] [porti destinacion]"
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 "Lidheni me 127.0.0.1:6666 për të qasur $POD:$DESTPORT"
} Nëse e shton këtë funksion në ~/ .bashrc, mund të hapësh lehtësisht një tunel në pod me komandën kubetunnel web-pod 8080 dhe bëj curl localhost:6666.
- Për tunelin në Docker mund të zëvendësosh rreshtin kryesor me:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT" - pĂ«r tunelin nĂ« K3s â ndrysho atĂ« nĂ«:
tcpserver 127.0.0.1 6666 k3s kubectl exec ⊠- etj.
Ide të tjera
- Rëndimi i trafik UDP mund të bëhet me komandat
netcat -l -u -cnë vend tëtcpserverdhenetcat -unë vend tënetcatpërkatësisht. - Shiko të dhënat hyrëse/dalëse përmes viewer-it të pipës:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat - Mund të kompresosh dhe dekompresosh trafik në të dy anët me anë të
gzip. - Lidhu për SSH me një kompjuter tjetër me skedarin përkatës
kubeconfig:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80" - Mund të lidhësh dy pod-a në klastere të ndryshme me anë të
mkfifodhe të ekzekutosh dy komanda të veçantakubectl.
Mundësitë janë të pafundme!
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
