ืืขืจื. ืชืจืืื: ืืขืจื ืืขืฉืืช ืื ืืืืช ืืืืฆืจ ืฉื LayerCI ืืื ืืืืฉื ืืฆืืื ืช ืฉื ืื ืฉื ืงืจื ืขืฆืืช & tricks ืขืืืจ Kubernetes (ืืขืื). ืืคืชืจืื ืืืืฆืข ืืื ืืื ืจืง ืืื ืืืืืืืื ืืืืื ืื ืืืืื ืืืืื (ืืืงืจืื ืืกืืืืื, ืืคืชืจืื "ืืืงืืจื" ื-K8 ืฉืืืจ ืืืืืจ ืืืขืจืืช ืขืฉืื ืืืชืืื kubectl port-forward
ืชืืจ ืืขืฆืื ืืฆื ืืืคืืกื: ืืชื ืจืืฆื ืืฆืืื ืืืืฉื ืืืงืืื ืฉืื ืืื ืืืขืืืจ ืชื ืืขื ืืฆืืจื ืงืกืืื ืืชืจืืื/ืืืื (ืื ืืืืคื).
ืืงืจื ืฉืืืืฉ ืืคืฉืจืืื
- ืืืืง ืื ืืืืืจื ื ืงืืืช ืืงืฆื ืฉื HTTP
/healthz
ืชืจืืื ืืืฉืืื ืืืืฆืืจ. - ืืืจ ืืืชืจ ืืืืื TCP ืืคืื ืืืืฉื ืืืงืืื.
- ืงืื ืืืฉื ืืืกื ืื ืชืื ืื ืฉื ืืืืฆืืจ ืืืื ืืกื ื ืชืื ืื ืืงืืืืื ืืืื ืืืชืขืกืง ืืืืืืช (ืืืจื ืืื ื-localhost ืืฉ ืืืืืืช ืฉืืจืฉ).
- ืืคืขื ืกืงืจืืคื ืืขืืจื ืื-ืคืขืื ืขืืืจ ื ืชืื ืื ืืืฉืืื ืฉืื ืืืื ืืืฆืืจ ืขืืืจื ืงืื ืืืื ืจ.
- ืืืจ ืืคืขืืช 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: ืืืืื ื ืืืืจื ืืืชืืืจื ืืคืื
ืื ื ืฉืื ืืช ืืืืื ืืขืื ืขื 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
ืืืชืืื. - ืืฆื ืงืื/ืคืื ืืืืฆืขืืช ืืฆืื ืฆืื ืืจืืช:
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
.
ืืืคืฉืจืืืืช ืืื ืกืืคืืืช!
ื .ื ืืืืชืจืื
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืืืื ืืืคืชืื ืืคืืืงืฆืืืช ืืคืืขืืืช ืขื Kubernetes "; - ยซ
ืขืฆืืช ืืืจืืงืื ืฉื Kubernetes: ืขื ืคืืชืื ืืงืืื ืืืื ืืืืืช "; - ยซ
ืชืืกืฃ kubectl-debug ืื ืืคืื ืืืืื ืืชืจืืืืื ืฉื Kubernetes "; - ยซ
ืืื ืขืืจ ืฉืืืืฉืืื ืืขืืืื ืขื Kubernetes ".
ืืงืืจ: www.habr.com