ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄: Π’Π°Π·ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ° Π±Π΅Π»Π΅ΠΆΠΊΠ° ΠΎΡ ΡΡΠ·Π΄Π°ΡΠ΅Π»Ρ Π½Π° LayerCI Π΅ ΠΎΡΠ»ΠΈΡΠ½Π° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠ²Π΅ΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅ Π·Π° Kubernetes (ΠΈ Π΄ΡΡΠ³ΠΈ). Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΡΠΊ, Π΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ ΠΎΡ ΠΌΠ°Π»ΠΊΠΎΡΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ Π΅ Π½Π°ΠΉ-ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΡΠΎ (Π·Π° Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΎ βΡΠΎΠ΄Π½ΠΎΡΠΎβ Π·Π° K8, Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ kubectl port-forward
ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ ΡΠΈΠΏΠΈΡΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ: ΠΈΡΠΊΠ°ΡΠ΅ ΠΏΠΎΡΡ Π½Π° Π²Π°ΡΠ°ΡΠ° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ ΠΏΠΎΠ΄/ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ).
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°
- ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ° ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° HTTP
/healthz
pod Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ. - Π‘Π²ΡΡΠΆΠ΅ΡΠ΅ TCP Π΄Π΅Π±ΡΠ³Π΅Ρ ΠΊΡΠΌ pod Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°.
- ΠΠΎΠ»ΡΡΠ΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅ Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ localhost ΠΈΠΌΠ° root ΠΏΡΠ°Π²Π°).
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ΅Π½ ΡΠΊΡΠΈΠΏΡ Π·Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π·Π° Π΄Π°Π½Π½ΠΈ Π² Π΅ΡΠ°ΠΏΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° Π½Π΅Π³ΠΎ.
- Π‘Π²ΡΡΠΆΠ΅ΡΠ΅ VNC ΡΠ΅ΡΠΈΡ ΠΊΡΠΌ ΠΏΠΎΠ΄, ΡΠ°Π±ΠΎΡΠ΅Ρ Ρ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ Π΄Π΅ΡΠΊΡΠΎΠΏ (Π²ΠΈΠΆΡΠ΅ XVFB).
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ
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 ΠΏΡΠ°Π²ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ. Π’Ρ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΊΡΠΌ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΏΠΎΡΡ ΠΈ Π΄Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΡΠ΅ I/O, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ Π½Π΅Π³ΠΎ, ΠΊΡΠΌ 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:~$
Π Π³ΠΎΡΠ½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ netcat ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΏΡΠ΅Π· HTTP. Π€Π»Π°Π³ -C
Π³ΠΎ ΠΊΠ°ΡΠ° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ CRLF Π² ΠΊΡΠ°Ρ Π½Π° ΡΠ΅Π΄Π°.
ΠΡΡΠ·ΠΊΠ° Ρ kubectl: ΡΠ»ΡΡΠ°ΠΉΡΠ΅ Π½Π° Ρ ΠΎΡΡΠ° ΠΈ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ pod
ΠΠΊΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ Π³ΠΎΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Ρ kubectl, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ:
tcpserver 127.0.0.1 8000 kubectl exec -i web-pod nc 127.0.0.1 8080
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ, Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΡ 80 Π²ΡΡΡΠ΅ Π² Π³ΡΡΠΏΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ 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
ΠΠΈΠ°Π³ΡΠ°ΠΌΠ° Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ
Π ΠΎΠ±ΡΠ°ΡΠ½Π°ΡΠ° ΠΏΠΎΡΠΎΠΊΠ°: ΡΠ»ΡΡΠ°ΠΉΡΠ΅ Π² ΠΌΠΎΠ΄ΡΠ»Π° ΠΈ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ Ρ ΠΎΡΡΠ°
nc 127.0.0.1 8000 | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat
Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΡ 8000 Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°.
Bash ΡΠΊΡΠΈΠΏΡ
ΠΠ°ΠΏΠΈΡΠ°Ρ
ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠΊΡΠΈΠΏΡ Π·Π° Bash, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° Kubernetes
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"
}
ΠΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΡΠΌ ~/.bashrc
, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΡΡΠ½Π΅Π» Π² ΠΏΠΎΠ΄ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° kubetunnel web-pod 8080
ΠΈ ΠΏΡΠ°Π²ΠΈ curl localhost:6666
.
- ΠΠ° ΡΡΠ½Π΅Π»Π° Π² Π΄ΠΎΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ΅Π΄ Ρ:
tcpserver 127.0.0.1 6666 docker exec -i "$CONTAINER" nc 127.0.0.1 "$DESTPORT"
- Π·Π° ΡΡΠ½Π΅Π» Π² K3s - ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΎ Π½Π°:
tcpserver 127.0.0.1 6666 k3s kubectl exec β¦
- ΠΈ Ρ.Π½.
ΠΡΡΠ³ΠΈ ΠΈΠ΄Π΅ΠΈ
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΡΠ΅ UDP ΡΡΠ°ΡΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅
netcat -l -u -c
Π²ΠΌΠ΅ΡΡΠΎtcpserver
ΠΈnetcat -u
Π²ΠΌΠ΅ΡΡΠΎnetcat
ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ. - ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° I/O ΡΡΠ΅Π· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈ:
nc 127.0.0.1 8000 | pv --progress | kubectl exec -i web-pod tcpserver 127.0.0.1 8080 cat
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΈ Π΄Π΅ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°ΡΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° ΠΎΡ Π΄Π²Π°ΡΠ° ΠΊΡΠ°Ρ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅
gzip
. - Π‘Π²ΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ ΡΡΠ΅Π· SSH ΠΊΡΠΌ Π΄ΡΡΠ³ ΠΊΠΎΠΌΠΏΡΡΡΡ ΡΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ»
kubeconfig
:tcpserver ssh workcomputer "kubectl exec -i my-pod nc 127.0.0.1 80"
- ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Π΄Π²Π΅ ΡΡΡΡΠ»ΠΊΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅
mkfifo
ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ Π΄Π²Π΅ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈkubectl
.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π΅Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½!
PS ΠΎΡ ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° Kubernetes Β»; - Β«
Π‘ΡΠ²Π΅ΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²Π΅ Π½Π° Kubernetes: ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ½ΠΎΡΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ ΡΠ΅Π»Π΅ΠΏΡΠΈΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Β»; - Β«
kubectl-debug ΠΏΠ»ΡΠ³ΠΈΠ½ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Kubernetes pods Β»; - Β«
ΠΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Kubernetes ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com