๋ฉ๋ชจ. ๋ฒ์ญ: LayerCI ์ ์์๊ฐ ์์ฑํ ์ด ์ค์ฉ์ ์ธ ๋
ธํธ๋ ์์ Kubernetes(๋ฐ ๊ทธ ์ด์)์ ๋ํ ํ๊ณผ ์๋ น์ ํ๋ฅญํ๊ฒ ๋ณด์ฌ์ค๋๋ค. ์ฌ๊ธฐ์ ์ ์๋ ์๋ฃจ์
์ ๋ช ๊ฐ์ง ์๋ฃจ์
์ค ํ๋์ผ ๋ฟ์ด๋ฉฐ ์๋ง๋ ๊ฐ์ฅ ๋ช
ํํ์ง๋ ์์ต๋๋ค(์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๋ฏธ ์๊ฒฌ์ ์ธ๊ธ๋ K8์ฉ "๊ธฐ๋ณธ" ์๋ฃจ์
์ด ์ ํฉํ ์ ์์). kubectl port-forward
์ผ๋ฐ์ ์ธ ์ํฉ์ ์์ํด ๋ณด์ญ์์ค. ๋ก์ปฌ ์์คํ
์ ํฌํธ๊ฐ ๋ง์ ์ฒ๋ผ ํธ๋ํฝ์ ํฌ๋/์ปจํ
์ด๋๋ก(๋๋ ๊ทธ ๋ฐ๋๋ก) ์ ๋ฌํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๊ฐ๋ฅํ ์ฌ์ฉ ์ฌ๋ก
- HTTP ์๋ํฌ์ธํธ๊ฐ ๋ฐํํ๋ ๋ด์ฉ์ ํ์ธํ์ธ์.
/healthz
ํ๋ก๋์ ํด๋ฌ์คํฐ์ ํฌ๋. - TCP ๋๋ฒ๊ฑฐ๋ฅผ ๋ก์ปฌ ๋จธ์ ์ Pod์ ์ฐ๊ฒฐํฉ๋๋ค.
- ์ธ์ฆ์ ๊ฑฐ์น์ง ์๊ณ ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๊ตฌ์์ ํ๋ก๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก 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์ ํตํ ์ฐ๊ฒฐ: ํธ์คํธ์์ ์์ ๋๊ธฐํ๊ณ 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
์ด ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด Pod๊ฐ ๋ก์ปฌ ์์คํ ์ ํฌํธ 8000์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋ฐฐ์ฌ ์คํฌ๋ฆฝํธ
Kubernetes ํ๋ก๋์
ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ Bash์ฉ ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค.
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
.
๊ฐ๋ฅ์ฑ์ ๋ฌดํํฉ๋๋ค!
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Kubernetes์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋๊ตฌ "; - ยซ
Kubernetes ํ ๋ฐ ์๋ น: ๋ก์ปฌ ๊ฐ๋ฐ ๋ฐ Telepresence ์ ๋ณด "; - ยซ
Kubernetes ํฌ๋์์ ๋๋ฒ๊น ์ ์ํ kubectl-debug ํ๋ฌ๊ทธ์ธ "; - ยซ
Kubernetes ์์ ์ ์ ์ฉํ ์ ํธ๋ฆฌํฐ ".
์ถ์ฒ : habr.com