Megjegyzés fordítás.: Ez a praktikus megjegyzés a LayerCI alkotójától nagyszerű példája a Kubernetes (és még sok más) úgynevezett tippeinek és trükkjeinek. Az itt javasolt megoldás csupán egy a néhány közül, és valószínűleg nem a legnyilvánvalóbb (néhány esetben megfelelő lehet a már említett 'natív' K8s is). ). Mindazonáltal lehetővé teszi, hogy legalább a klasszikus eszközök alkalmazásának szempontjából nézzük meg a problémát, és azokat további kombinálásra — egyszerre egyszerű, rugalmas és hatékony (lásd a 'további ötletek' részt a végén inspirációért).

Képzelje el a tipikus helyzetet: azt szeretné, ha a helyi számítógépen egy port varázsütésre átirányítaná a forgalmat a podra/kontejnerre (vagy fordítva).
Lehetséges felhasználási forgatókönyvek
- Ellenőrizze, hogy mit ad vissza a HTTP végpont
/healthza pod-ra a production klaszterben. - Csatlakoztassa a TCP hibakeresőt a pod-hoz a helyi gépen.
- Jusson hozzá a production adatbázishoz helyi báziskezelő eszközökből anélkül, hogy a hitelesítéssel bajlódna (általában a localhost-nak root jogosultságai vannak).
- Futtasson egy egyszeri migráló szkriptet az adatok számára a staging klaszterben anélkül, hogy új konténert kellene létrehozni hozzá.
- Csatlakoztasson egy VNC munkamenetet a pod-hoz, amely virtuális asztalt futtat (lásd: XVFB).
Néhány szó a szükséges eszközökről
— Egy nyílt forráskódú eszköz, amely a Linux csomagkezelői közül a legtöbbben elérhető. Lehetővé teszi, hogy helyi portot nyisson meg, és ráirányítsa a forgalmat a stdin/stdout-ból bármely megadott parancsnak.
colin@colin-work:~$ tcpserver 127.0.0.1 8080 echo -e 'HTTP/1.0 200 OKrnContent-Length: 19rnrn<body>helló!</body>'&
[1] 17377
colin@colin-work:~$ curl localhost:8080
<body>helló!</body>colin@colin-work:~$()
A Netcat a fordítottját teszi. Lehetővé teszi, hogy csatlakozzon egy nyitott portra és átadja az onnan kapott bemenetet/kimenetet a stdin/stdout-ra:
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:~$()
A fenti példában a netcat HTTP-n kérdezi le az oldalt. A -C kapcsoló -C arra kényszeríti, hogy CRLF-t adjon a sor végére.
Kapcsolódás a kubectl-hez: hallgassa a gazdagépen, és csatlakozzon a pod-hoz
Ha a fenti eszközöket összekapcsoljuk a kubectl-lel, akkor egy ilyen parancsot kapunk:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080 Hasonlóképpen, a 80-as port eléréséhez a pod-on belül elegendő lenne megtenni 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
Csomaglisták olvasása... Kész
Függőségi fa felépítése
Állapot információ olvasása... Kész
netcat-openbsd már a legújabb verzió (1.195-2).
0 frissítve, 0 új telepítve, 0 eltávolítva és 10 nem frissítve.
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()

A segédprogramok interakciós sémája
A fordított irányba: hallgasson a podban és csatlakozzon a hoszthez
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 catEz a parancs lehetővé teszi a pod számára, hogy hozzáférjen a 8000-es porthoz a helyi gépen.
Bash szkript
Írtam egy speciális Bash szkriptet, amely lehetővé teszi a Kubernetes production klaszterének kezelését , a fentebb leírt módszerrel:
kubetunnel() {
POD="$1"
DESTPORT="$2"
if [ -z "$POD" -o -z "$DESTPORT" ]; then
echo "Használat: kubetunnel [pod név] [célport]"
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 "Csatlakozzon a 127.0.0.1:6666-hoz, hogy hozzáférjen a $POD:$DESTPORT-hoz"
} Ha ezt a funkciót hozzáadja a ~/.bashrc, akkor könnyen megnyithat egy alagutat a podban a parancs használatával kubetunnel web-pod 8080 és használhatja a curl localhost:6666.
- Az alagútnál Docker a fő sort helyettesítheti a következővel:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT" - az alagútnál a K3s — módosítsa a következőre:
tcpserver 127.0.0.1 6666 k3s kubectl exec … - stb.
További ötletek
- UDP-forgalom irányítása a következő parancsokkal lehetséges
netcat -l -u -c$CI_COMMIT_TAGtcpserverésnetcat -u$CI_COMMIT_TAGnetcatvagy. - Bemenet/kimenet megtekintése pipe viewer segítségével:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat - A forgalom tömörítésére és kicsomagolására mindkét végén van lehetőség
gzip. - Csatlakozás SSH-n keresztül egy másik számítógéphez a megfelelő fájl használatával
kubeconfig:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80" - Két pod összekapcsolása különböző klaszterekből a következőképpen lehetséges
mkfifoés két külön parancs futtatásakubectl.
A lehetőségek végtelenek!
Fejlesztési eszközök, amelyek Kubernetesben futnak
Olvasson további információkat a blogunkban:
- «»;
- «»;
- «»;
- «».
Forrás: habr.com
