Kumbuka. tafsiri.: Dokezo hili la vitendo kutoka kwa mtayarishaji wa LayerCI ni kielelezo bora cha kile kinachojulikana kama vidokezo na hila za Kubernetes (na zaidi). Suluhisho lililopendekezwa hapa ni moja tu ya wachache na, labda, sio dhahiri zaidi (kwa baadhi ya matukio, "asili" ya K8 tayari imetajwa kwenye maoni inaweza kufaa. ) Walakini, hukuruhusu angalau kutazama shida kutoka kwa mtazamo wa kutumia huduma za kitamaduni na kuzichanganya zaidi - wakati huo huo ni rahisi, rahisi na yenye nguvu (angalia "maoni mengine" mwishoni kwa msukumo).

Hebu fikiria hali ya kawaida: unataka bandari kwenye mashine yako ya karibu ili kusambaza trafiki kwa njia ya kichawi kwenye ganda/chombo (au kinyume chake).
Kesi zinazowezekana za matumizi
- Angalia kile sehemu ya mwisho ya HTTP inarudi
/healthzganda katika nguzo ya uzalishaji. - Unganisha kitatuzi cha TCP kwenye ganda kwenye mashine ya ndani.
- Pata ufikiaji wa hifadhidata ya uzalishaji kutoka kwa zana za hifadhidata za ndani bila kusumbua na uthibitishaji (kwa kawaida localhost huwa na haki za mizizi).
- Tekeleza hati ya uhamishaji ya mara moja kwa data katika nguzo ya hatua bila kulazimika kuunda chombo kwa ajili yake.
- Unganisha kipindi cha VNC kwenye ganda linaloendesha kompyuta ya mezani (angalia XVFB).
Maneno machache kuhusu zana muhimu
— Huduma huria inayopatikana katika hazina nyingi za vifurushi. LinuxInakuruhusu kufungua lango la ndani na kuelekeza trafiki iliyopokelewa kupitia stdin/stdout kutoka kwa amri yoyote maalum hadi kwake:
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 hufanya kinyume. Inakuruhusu kuunganishwa kwenye bandari iliyo wazi na kupitisha I/O iliyopokelewa kutoka kwake hadi 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:~$()
Katika mfano hapo juu, netcat inaomba ukurasa kupitia HTTP. Bendera -C inasababisha kuambatanisha CRLF hadi mwisho wa mstari.
Muunganisho na kubectl: sikiliza mpangishaji na uunganishe kwenye ganda
Ikiwa tutachanganya zana zilizo hapo juu na kubectl, tunapata amri kama hii:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080 Kwa mlinganisho, kufikia bandari 80 ndani ya pod itakuwa ya kutosha kufanya 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()

Mchoro wa mwingiliano wa matumizi
Kwa upande mwingine: sikiliza kwenye ganda na uunganishe kwa mwenyeji
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 catAmri hii inaruhusu pod kufikia bandari 8000 kwenye mashine ya ndani.
Hati ya bash
Niliandika hati maalum ya Bash ambayo hukuruhusu kudhibiti kikundi cha uzalishaji cha Kubernetes kwa kutumia njia iliyoelezwa hapo juu:
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"
} Ukiongeza kitendakazi hiki kwa ~/.bashrc, unaweza kufungua handaki kwa urahisi kwenye ganda kwa amri kubetunnel web-pod 8080 na kufanya curl localhost:6666.
- Kwa handaki ndani Docker unaweza kubadilisha mstari kuu na:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT" - kwa handaki ndani K3 za - ibadilishe kuwa:
tcpserver 127.0.0.1 6666 k3s kubectl exec … - nk
Mawazo mengine
- Unaweza kuelekeza trafiki ya UDP ukitumia amri
netcat -l -u -cbadala yatcpserverиnetcat -ubadala yanetcatipasavyo. - Tazama I/O kupitia kitazamaji bomba:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat - Unaweza kukandamiza na kupunguza trafiki kwenye ncha zote mbili kwa kutumia
gzip. - Unganisha kupitia SSH kwa kompyuta nyingine na faili inayolingana
kubeconfig:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80" - Unaweza kuunganisha maganda mawili katika makundi tofauti kwa kutumia
mkfifona endesha amri mbili tofautikubectl.
Uwezekano hauna mwisho!
PS kutoka kwa mtafsiri
Soma pia kwenye blogi yetu:
- «";
- «";
- «";
- «'.
Chanzo: mapenzi.com
