ShĂ«n. pĂ«rk.: Ky kjo shĂ«nim praktik nga krijuesi i LayerCI Ă«shtĂ« njĂ« ilustĂ«rim i shkĂ«lqyer i asaj qĂ« quhet tips & tricks pĂ«r Kubernetes (dhe jo vetĂ«m). Zgjidhja e propozuar kĂ«tu Ă«shtĂ« vetĂ«m njĂ« nga pak tĂ« tilla dhe ndoshta nuk Ă«shtĂ« mĂ« e dukshme (pĂ«r disa raste, mund tĂ« funksionojĂ« port-forward qĂ« Ă«shtĂ« pĂ«rmendur nĂ« komente si 'nativ' pĂ«r K8s ). MegjithatĂ«, ajo lejon sĂ« paku qĂ« tĂ« shikohet problemi nga pikĂ«pamja e pĂ«rdorimit tĂ« mjeteve klasike dhe kombinimit tĂ« tyre â njĂ«kohĂ«sisht e thjeshtĂ«, fleksibile dhe e fuqishme (shih 'ide tĂ« tjera' nĂ« fund pĂ«r frymĂ«zim).

Imagjinoni një situatë tipike: dëshironi që porta në kompjuterin tuaj lokal të drejtojë magjikisht trafik në pod/kontainer (ose anasjelltas).
Scenarët e mundshëm të përdorimit
- Kontrolloni çfarë kthen HTTP endpoint
/healthzpod në klasterin production. - Lidhni një debugguer TCP në pod në makinën lokale.
- Qasuni database në production nga mjetet lokale për punë me databaza pa pasur nevojë të merremi me autentikimin (zakonisht localhost ka të drejta root).
- Lëshoni një skript migrimi njëherësh për të dhënat në klasterin staging pa pasur nevojë të krijoni një kontenier për të.
- Lidhni një sesion VNC me pod-in me një desktop virtual të hapur (shih XVFB).
Disa fjalë për mjetet e nevojshme
â njĂ« utilitar Open Source, i disponueshĂ«m nĂ« shumicĂ«n e repozitorive tĂ« pakove Linux. Ai lejon hapjen e njĂ« porte lokale dhe drejtimin e trafikut nĂ« tĂ« nga stdin/stdout nga çdo komandĂ« tĂ« caktuar:
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:~$()
Netcat bën inverse. Ai lejon që të lidheni me një port të hapur dhe të transmetoni inputin/outputin e marrë 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 kërkon një faqe përmes HTTP. Flagi -C bën që ai të shtojë CRLF në fund të vargut.
Për trajtimin me kubectl: dëgjoni në host dhe lidheni me pod-in
Nëse kombinoni mjetet e paraqitura me kubectl, do të merrni një komandë si kjo:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080 Analogjisht, për qasjen në 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 ndërveprimit të mjeteve
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 catKjo komandë lejon që pod-i të ketë akses në portin 8000 në makinën lokale.
Një skript për Bash
Kam shkruar një skript të veçantë për Bash, që lejon menaxhimin e klasterit production të 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 "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 "Lidhu në 127.0.0.1:6666 për të aksesuar $POD:$DESTPORT"
} Nëse e shtoni këtë funksion në ~/.bashrc, mund të hapni lehtësisht një tunel në pod me komandën kubetunnel web-pod 8080 dhe të bëni curl localhost:6666.
- Për tunelin në Docker mund të zëvendësoni vargun kryesor me:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT" - pĂ«r tunelin nĂ« K3s â zĂ«vendĂ«soni atĂ« me:
tcpserver 127.0.0.1 6666 k3s kubectl exec ⊠- etj.
Ide të tjera
- Mund të drejtoni trafikun UDP me komandat
netcat -l -u -cnë vend tëtcpserverdhenetcat -unë vend tënetcatpërkatësisht. - Shikoni input/output përmes shikuesit të tubave:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat - Mund të kompresoni dhe zgjidhni trafik në të dy anët me
gzip. - Lidhuni përmes 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ë lidhni dy pod-a në klastere të ndryshme me
mkfifodhe të filloni dy komanda të veçantakubectl.
Mundësitë janë të pafundme!
P.S. nga përkthyesi
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
