Minikube & K9s (Kubernetes ๋คํธ์ํฌ ์ค์ต)
Kubernetes ๋คํธ์ํฌ ์ค์ต ํญ๋ชฉ
ํญ๋ชฉ | ํ ์คํธ ๋ชฉ์ |
Pod ๊ฐ ํต์ | Pod์์ Service ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ Pod์ HTTP ์์ฒญ์ด ๊ฐ๋ฅํ์ง ํ์ธ |
Secvice ์ ๊ทผ | ํด๋ฌ์คํฐ ์ธ๋ถ(ํธ์คํธ)์์ ClusterIP ์์ด๋ ์๋น์ค ์ ์ ํ์ธ |
NodePort ํ ์คํธ | NodePort ํ์ Service๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋์๋์ง ํ์ธ |
Ingress ํ ์คํธ | Ingress Controller๋ฅผ ํตํด ๋๋ฉ์ธ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด ๋์ํ๋์ง ํ์ธ |
DNS ํ ์คํธ | ํด๋ฌ์คํฐ DNS๊ฐ Service FQDN์ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ํ๋์ง ํ์ธ |
์ ์ : nginx๊ฐ ์ด๋ฏธ pod๋ก ๋์ด์ ธ ์๋ ์ํ
1. Pod ๊ฐ ํต์
๋ชฉํ : Pod์์ Service ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ Pod์ HTTP ์์ฒญ์ด ๊ฐ๋ฅํ์ง ํ์ธ
1. BusyBox ์ Pod ์คํ
kubectl run busybox --image=busybox --restart=Never -it --rm -- sh
2. ์ ธ ์์์ nginx Service๋ก HTTP ์์ฒญ
wget -qO- http://nginx
3. ๊ฒฐ๊ณผ
HTML(nginx ํ์ ํ์ด์ง)์ด ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ฉด ์ฑ๊ณต์ ๋๋ค.
2. Service ์ ๊ทผ (ClousterIP ๋ด๋ถ ํ ์คํธ)
๋ชฉํ : ํด๋ฌ์คํฐ ์ธ๋ถ(ํธ์คํธ)์์ ClusterIP ์์ด๋ ์๋น์ค ์ ์ ํ์ธ
1. minikube ip๋ก ์ ๊ทผ
minikube ip
minikube ip๋ก ๋ฐํ ๋ฐ์ ip๋ก ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผํ์ง๋ง, ์ ๊ทผ์ด ์ ๋จ
ClusterIP ํ์ ์ Service๋ ํด๋ฌ์คํฐ ๋ด๋ถ ๋คํธ์ํฌ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ IP๋ฅผ ๋ถ์ฌํฉ๋๋ค., ๋ฐ๋ผ์ ํธ์คํธ ๋จธ์ (๋ธ๋ผ์ฐ์ )์์ minikube ip๋ฅผ ์ด์ฉํด ์ ์ํด๋ ํด๋ฌ์คํฐ ์ธ๋ถ๋ก ๋ผ์ฐํ ๋์ง ์์ ์ฐ๊ฒฐ์ด ๋์ง ์๋ ๊ฒ์ด ์ ์์ ๋๋ค.
2. minikube service nginx --url ๋ก ์ ๊ทผ
minikube service nginx --url
์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก SSH(port-forward) ์ ๋์๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ฌ์ง์ฒ๋ผ http://127.0.0.1:54374 ์ด ๋์จ๋ค. ํ์ง๋ง, ์ด๋ํ ๋ก์ปฌ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ์ ์ด ๋ฉ๋๋ค.
ํ์ฌ ๋ก์ปฌ์์๋ง ์ ๊ทผํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด์ฌํ ๋ธ๋ผ์ฐ์ ๋ก nginx ์ ๊ทผ ์ฑ๊ณตํ์ต๋๋ค.
3. NodePort ํ ์คํธ
๋ชฉํ : NodePort ํ์ Service๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋์๋์ง ํ์ธ
1. NodePort type์ผ๋ก nginx๋ฅผ ์๋น์ค๋ก ๋์ฐ๊ธฐ
kubectl expose deployment nginx \
--type=NodePort \
--port=80
k9s์์ NodePort type์ผ๋ก ์คํ์ด ๋์์์ ํ์ธ ํ ์ ์์ต๋๋ค.
minikube service nginx --url
์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผ๊ฐ๋ฅํ ip๋ฅผ ๋ฐํ ๋ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์๊น์ ๋ค๋ฅด๊ฒ ๋ก์ปฌ์์๋ง ๋์จ๋ค๋ ๋ง์ ์์์ ์ ์ ์์ต๋๋ค. ๋ํ URL์ ๋ฐํ ๋ฐ์์ต๋๋ค.
darwin ์์ Docker ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ํฐ๋ฏธ๋์ ์ด์ด์ผ ์คํํ ์ ์์ต๋๋ค
-> ํด๋น ๋ง์ VM ๋๋ผ์ด๋ฒ๋ฅผ ์ฐ๋ฉด minikube service ~ ๋ช ๋ น์ด ์๋์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ด ํด๋น ์๋น์ค URL์ ์ด์ด์ฃผ์ง๋ง, Docker ๋๋ผ์ด๋ฒ๋ฅผ ์ฐ๋ macOS(Darwin) ํ๊ฒฝ์์๋ ๋ธ๋ผ์ฐ์ ์๋ ์คํ ๊ธฐ๋ฅ์ด ์ง์๋์ง ์์์, ์ง์ minikube service ~ ๋ช ๋ น์ด๋ฅผ ์ณ์ ๋์ค๋ url์ ์ง์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ ฅํด์ ์๋น์ค์ ์ ๊ทผํด์ผํ๋ค๋ ์๋ฏธ์ด๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ฐํ ๋ฐ์ URL์ ์ ๋ ฅํ๋ฉด,
์ ์์ ์ผ๋ก ์ ๊ทผํ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
4. Ingress ํ ์คํธ
๋ชฉํ: Ingress Controller๋ฅผ ํตํด ๋๋ฉ์ธ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด ๋์ํ๋์ง ํ์ธ
1. Ingress ์ ๋์จ ํ์ฑํ
minikube addons enable ingress
2. ๊ฐ๋จํ Ingress ๋งค๋ํ์คํธ ์์ฑ (ingress.yaml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ing
spec:
rules:
- host: hello.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
์ดํ,
kubectl apply -f ingress.yaml
์์ ๋ช ๋ น์ผ๋ก Kubernetes API์๋ฒ์ Ingress ์ค๋ธ์ ํธ๊ฐ ๋ฑ๋ก๋๊ณ , ํด๋ฌ์คํฐ ๋ด Ingress Controller๊ฐ ์ด๋ฅผ ๊ฐ์งํ์ฌ ์ค์ ์ ๋ก๋ํฉ๋๋ค.
echo "127.0.0.1 hello.local" | sudo tee -a /etc/hosts
๊ทธ ๋ค์ /etc/hosts ์ ๋งคํํฉ๋๋ค.
3. ํฐ๋ ๋ฐ์ธ๋ฉ
1. DNS -> ํฐ๋ ๋ฐ์ธ๋ฉ
minikube tunnel
- ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด 127.0.0.1:80 ์ ๋ฆฌ์จ(listen)
2. ํฐ๋ -> LoadBalacner/NodePort ์๋น์ค
- ๊ทธ๋ฌ๋ฉด ํฐ๋์ด ๋ฐ์ TCP ํจํท์ ํด๋ฌ์คํธ ๋ด "ingress-nginx-controller" ์๋น์ค์ "port:80"์ผ๋ก ์ ๋ฌ
3. Service -> Ingress Controller Pod
- kube-proxy ๊ฐ ๋ผ์ฐํ ํ์ฌ Ingress-nginx ์ปจํธ๋กค๋ฌ ํ๋๋ก ์ฐ๊ฒฐ
4. Ingress Controller(Nginx) -> ๋ฐฑ์๋ ์๋น์ค
- Nginx Ingress Controller Pod๊ฐ HTTP ์์ฒญ์ ์์ → ํค๋์ Host: hello.local ๊ณผ path: / ๋ฅผ ํ์ธ
- ingress-ng ๋ฆฌ์์ค์ ๋ฃฐ์ ๋ฐ๋ผ backend.service.name: nginx, backend.service.port.number: 80 ์ผ๋ก ์์ฒญ ํ๋ก์
5. ๋ฐฑ์๋(nginx Service) -> ์ค์ ํ๋
- nginx ์๋น์ค์ targetPort(containerPort) ๋ก ํธ๋ํฝ ์ ๋ฌ → ์ค์ Nginx ์ปจํ ์ด๋ ์๋ต
6. ์๋ต ๋ฐํ
- ์๋ต์ด ์ญ์์ผ๋ก ingress-controller → ํฐ๋ → ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก
4. ์ ๊ทผ
http:hello.local๋ก ์ ๊ทผ ์ ์ ์์ ์ผ๋ก ์ ๊ทผ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
5. DNS ํ ์คํธ
๋ชฉํ : ํด๋ฌ์คํฐ DNS๊ฐ Service FQDN(Fully Qualified Domain Name)์ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ํ๋์ง ํ์ธ
1. ๋๋ฒ๊ทธ์ฉ ํ๋ ์คํ
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ busybox๋ DNS ๋๊ตฌ๊ฐ ํฌํจ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐ๋ ์์ ํ๋๋ฅผ ๋์ด์ ๊ทธ ์์์ ์ง์ ์กฐํํด ๋ณด๋ ๊ฒ์ ๋๋ค.
kubectl run -i --tty dns-test \
--image=busybox --restart=Never --rm /bin/sh
2. nslookup/host ์ฌ์ฉ
์์ ์ง์ ํ ๋ค, Service FQDN์ ์กฐํ
# ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค์ nginx๋ผ๋ ์๋น์ค๊ฐ ์์ ๋
nslookup nginx.default.svc.cluster.local
# ๋๋ host ๋ช
๋ น
host nginx.default.svc.cluster.local
3. ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋ ์ปค์คํ ๋๋ฉ์ธ๋ ํ์ธ ๊ฐ๋ฅ
- ๋ค์์คํ์ด์ค๊ฐ ๋ค๋ฅด๋ค๋ฉด nginx.my-namespace.svc.cluster.local ์ฒ๋ผ ์ ์ฒด FQDN์ ์ ๋ ฅ
- ์งง๊ฒ nginx๋ง ์ณ๋, ๊ฐ์ ๋ค์์คํ์ด์ค ๋ด๋ผ๋ฉด nginx.default.svc.cluster.local ๋ก ์๋ ๋ณด์ํด ์ค๋๋ค.
4. ๊ธฐ์กด ํ๋์์ ํ์ธํ๊ธฐ
์ด๋ฏธ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ Ingress Controller ํ๋ ์์์๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก exec ํด์ ํ์ธํ ์ ์์ต๋๋ค.
# ์: ingress-nginx-controller ํ๋ ์ด๋ฆ์ด ingress-nginx-abcde ๋ผ๋ฉด
kubectl exec -it ingress-nginx-abcde -n ingress-nginx -- nslookup nginx.default.svc.cluster.local
์ด ๊ณผ์ ์ ํตํด "Service ์ด๋ฆ -> ClusterIP"๋ก์ DNS ํด์์ด ์ ์ ๋์ํ๋์ง ์์ฝ๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ํด๋ฌ์คํฐ ๋ด๋ถ ๋ชจ๋ Pod์์ ๋์ผํ FQDN ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
'DevSecOps > ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes) ์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Minikube & K9s (๋ชจ๋ํฐ๋ง ๋ฐ ๋ฆฌ์์ค ๋ณด๊ธฐ) (0) | 2025.06.08 |
---|---|
Minikube & K9s (K9s ๊ตฌ์ถ, ๋ฆฌ์์ค ์์ฑ ๋ฐ ๊ด๋ฆฌ ์ค์ต, ์ ๊ทผ์ ์ด ์ค์ต) (0) | 2025.06.06 |
Minikube ์ค์นํ๊ธฐ (1) | 2025.06.06 |
๋๊ธ