๐ Epilogue
- CSP์ K8s ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ Minikube๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค.
- ๋ ธ๋์ ์ฌ๋ ค๋์ ํ๋์ ๋ํด์ ์ฌ๋ฌ ๊ฐ์ง ํ์ ์ผ๋ก ์๋น์ค๋ฅผ ๋ฐฐํฌํ๊ณ ์ ํ์๋ค.
- ๊ทธ๋ฐ๋ฐ NodePort, LoadBalancer ํ์
์ Minikube์์ Docker Driver ํน์ฑ์ ์๋ฒฝํ๊ฒ ๋์ํ์ง ์๋ ๊ฒ์ด์๋ค.
- NodePort → Container IP๋ก ์ ์ ๋ถ๊ฐ๋ฅ
- LoadBalancer → External IP ์ ๊ณต ๋ถ๊ฐ๋ฅ
- MetalLB addon์ผ๋ก External IP ์ ๊ณต ๊ฐ๋ฅํ์ง๋ง ์ ์ ๋ถ๊ฐ๋ฅ
- minikube service ๋ช ๋ น์ด๋ก tunneling์ ์ด์ฉํด์ ์ ์ ๊ฐ๋ฅ
- ๊ทธ๋์ ์ฌ๊ธฐ์ ์๋ฌธ์ โ๏ธ
- Docker Driver์ ํน์ฑ์ด ๋ญ๊ธธ๋?
- ์ผ๋จ ์ํํธ์จ์ด ๋๋ผ์ด๋ฒ์ ๋ํ์ฌ ์์๋ณด์๋ค.
โช Software Driver
- ์ปค๋ ๋ชจ๋์์ ์คํ๋๋ ์ฝ๋๋ฅผ ํตํด์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ํต์ฌ OS ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ ๋๊ตฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ์ ๋๊ตฌ๋ฅผ ๋ ๊ฐ์ง ์์๋ก ๋ถํ ํ์ฌ ์ํ ๊ฐ๋ฅ
- User mode์์ ์คํ๋๊ณ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต → ์ ํ๋ฆฌ์ผ์ด์
- Kernel mode์ ์คํ๋๋ฉฐ ํต์ฌ OS ๋ฐ์ดํฐ์ ์ ๊ทผ → ์ํํธ์จ์ด ๋๋ผ์ด๋ฒ
- ์ํํธ์จ์ด ๋๋ผ์ด๋ฒ๋ ํญ์ ์ปค๋ ๋ชจ๋๋ก ์คํ
- ์ปค๋ ๋ชจ๋์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ณดํธ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ์ฃผ๋ ๋ชฉ์
⇒ ์ฌ๊ธฐ๊น์ง๋ก ๋์ปค ๋๋ผ์ด๋ฒ๋ ์ปค๋ ๋จ์ ์ฌ๋ฌ ๋ชจ๋๋ค์ ์ ๊ทผํ์ฌ ์ปจํ ์ด๋์ ์์ฑ / ๊ด๋ฆฌ๋ฅผ ๋์์ค๋ค๊ณ ์๊ฐํ ์ ์๋ค.
โช๏ธ Minikube Service
Accessing apps
How to access applications running within minikube
minikube.sigs.k8s.io
- Minikube ๊ณต์ ๋ฌธ์์์ minikube service๋ฅผ ์ง์ํ๋ ์ด์ ๋ฅผ ์ฐพ์๋ณด์๋ค.
Using minikube service with tunnel
The network is limited if using the Docker driver on Darwin, Windows, or WSL, and the Node IP is not reachable directly.
Running minikube on Linux with the Docker driver will result in no tunnel being created.
…
๐ก Darwin : Open-source UNIX OS by Apple
WSL : Window Subsystem for Linux
- Darwin, Windows ๋๋ WSL ๊ธฐ๋ฐ์ ๋์ปค ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋คํธ์ํฌ์ ์ ํ์ด ์๊ธฐ๋ฉฐ Node IP๋ ์ง์ ์ ์ผ๋ก ๋๋ฌํ์ง ์๋๋ค๊ณ ํ๋ค.
- ⇒ ๊ณต์๋ฌธ์์์ ์ OS์ ๋ํ NodePort, LoadBalancer Type ์๋น์ค๋ ์ง์ ์ ์ผ๋ก ์ธ๋ถ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ์ฌ minikube service๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๊ด๋ จ OS์์์ ํน์ง์ด ์กด์ฌํ๋ค๊ณ ์๊ฐํ์๋ค.
- ๊ทธ๋ผ ๋ด๊ฐ Mac OS๋ฅผ ์ฐ๋ ์ ์ฅ์ด๋ฏ๋ก Mac OS์์ ๋์ปค๊ฐ ์ด๋ ํ ํํ๋ก ์๋ํ๊ณ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋์ง ์์๋ณด์
โช๏ธ Docker in Mac OS
- Mac OS์์๋ ๋์ปค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ Hypervisor Type 2๋ฅผ ์ฌ์ฉํ๋ค.
- Hypervisor Type 2๋ Host OS ์์ VM์ ์ฌ๋ ค์ VM ์์ Guest OS๋ฅผ ์ค์นํ๋ ๋ฐฉ์์ด๋ค.
- ๊ฐ์ํ์ ๋ํ ๋ ์์ธํ ์ด์ผ๊ธฐ๋ ์ถํ..
- Mac OS์์์ Hypervisor์ธ Xhyve๋ HyperKit๋ฅผ ์ฌ์ฉํ์ฌ Host๋ด VM์ ์์ฑํ๋ค.
๐ก Xhyve : Bhyve์ Mac OS์ฉ ๋ฒ์
Bhyve : Hypervisor์ Type-2
๐ก HyperKit : ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ดํผ๋ฐ์ด์ ๊ธฐ๋ฅ์ ํฌํจํ๊ธฐ ์ํ ํดํท
GitHub - moby/hyperkit: A toolkit for embedding hypervisor capabilities in your application
A toolkit for embedding hypervisor capabilities in your application - GitHub - moby/hyperkit: A toolkit for embedding hypervisor capabilities in your application
github.com
- ์์ฑํ VM์ Guest OS์๋ Linux Kit์ ์ฌ์ฉํ์ฌ ๋ง๋ ๊ฒฝ๋ํ Linux OS๋ฅผ ์ฌ๋ฆฐ๋ค.
๐ก Linux Kit : ์ปจํ ์ด๋์ฉ์ผ๋ก ๊ตฌ์ถ๋ ๋ฏธ๋๋ฉํ Linux OS ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๋ ์์ํฌ
- ๊ทธ ํ ๋์ปค๋ฅผ ์ฌ๋ ค ์ปจํ ์ด๋๋ฅผ ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํํ๋ค.
- $ docker info → Guest OS๊ฐ Linux OS์ธ ๊ฒ์ ํ์ธ
- ์ฌ๊ธฐ๊น์ง Mac OS ์์์ ๋์ปค๊ฐ ์ด๋ป๊ฒ ์ค์น๋๊ณ ๋์ํ๋์ง์ ๋ํ ๊ตฌ์กฐ๋ฅผ ํ์ธํ์๋ค.
- ๋ค์์ผ๋ก ์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์ ์ ์ง์ ์ปจํ ์ด๋ IP๋ก ์ ๊ทผ์ ํ ์ ์๋์ง ๋คํธ์ํฌ ๋ถ๋ถ์์ ์ด์ง ๋ถ์ํด๋ณด๊ณ ์ ํ๋ค.
โช๏ธ Docker Network in Mac OS
- ์ผ๋จ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ๋ค.
- Mac OS์์ ๋์ปค๋ L4(ํฌํธ ๋ฐ์ธ๋ฉ)๋ฅผ ํตํ ์ปจํ ์ด๋ ์ฐ๊ฒฐ์ ์ง์ํ์ง๋ง L3(IP ์ฃผ์๊ฐ)์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ L3(IP ์ฃผ์ ๊ฐ)์ ์ง์ํ์ง ์๋์ง ์ดํด๋ณด์ !
- ๋์ปค๋ ์ฌ๋ฌ ๊ฐ์ง ๋คํธ์ํฌ ๋ชจ๋๊ฐ ์กด์ฌํ๋ค.
- bridge mode (default)
- host mode
- none mode
- ๋ง์ฝ ๋คํธ์ํฌ ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด --net=[NETWORK-TYPE] ์ต์ ์ถ๊ฐ
- bridge mode (default)
- docker0์ด๋ผ๋ bridge๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
- ์ปจํ ์ด๋๋ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค ์์ญ์ ๊ฐ์ง๋ค.
- ๋จผ์ ์์ฑ๋ ์ปจํ ์ด๋ ๋ด๋ถ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ veth(virtual ethernet)๋ ๋ฐ์ธ๋ฉํ๋ค.
- ๋ฐ์ธ๋ฉ๋ veth๋ docker0 bridge๋ ๋ค์ ํ๋ฒ ๋ฐ์ธ๋ฉ์ ํตํด ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค eth0๊ณผ ํต์ ํ ์ ์๊ฒ ๋๋ค.
- host mode
- ์ปจํ ์ด๋๋ง์ ๋ ๋ฆฝ์ ์ธ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง์ง ์๊ณ ํธ์คํธ์ ๋์ผํ ๋คํธ์ํฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค.
- none
- ์๋ฌด๊ฒ๋ ์๋ ๊ฒฉ๋ฆฌ๋ ์ํ์ ๋คํธ์ํฌ
- ๋คํธ์ํฌ ์ธํฐํ์ด์ค ์์
- ๊ทธ๋ฐ๋ฐ ํธ์คํธ์ docker0์ ๋ํ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์ด์ ๋ฅผ ์๊ฐํด๋ณด๋ฉด Mac OS์์๋ Linux VM ์์ Docker๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ํ bridge๋ Linux VM์์ ์๋ค๊ณ ์๊ฐํ ์ ์๋ค.
- ์์ ๊ฐ์ด ํธ์คํธ์์ bridge ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปจํ
์ด๋์ IP๋ก๋ ์ ๊ทผ์ ๋ชปํ๊ณ ํฌํธ ํฌ์๋ฉ์ ํตํ ํฐ๋๋ง์ผ๋ก ์ ๊ทผ์ ํ ์ ์๋ค.
- Localhost(127.0.0.1:65180) → Tunneling → Docker container(192.168.49.2:32517)
โช๏ธ โญ
- ์ ๋ชฉ์ ๋์ปค ๋๋ผ์ด๋ฒ์ ํน์ฑ์ด๋ผ๊ณ ์ ์์ง๋ง OS ๊ฐ์ ๋์ปค ํน์ฑ(ํนํ, Mac OS..)์ด๋ผ๊ณ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- ๊ฐ์ํ๋ถํฐ ๋์ปค์ ๊ตฌ์กฐ, ๋คํธ์ํฌ๊น์ง ์ ๋ง ๋๋ฃจ๋๋ฃจ ์ดํด๋ณด์์ผ๋..
- ๊ฒฐ๋ก ์ ๋ง์ ๊ฒ์ ์์๊ฐ์ ๊ธฐ๋ถ์ด ์ข๋ค !
ref.
๋๋ผ์ด๋ฒ๋? - Windows drivers
06. ๋์ปค ๋คํธ์ํฌ (Docker Network)
docker: Ingress not exposed on MacOS · Issue #7332 · kubernetes/minikube