03B. Nginx ์น์๋ฒ ์คํํ๊ธฐ
03B. Nginx ์น์๋ฒ ์คํํ๊ธฐ ๊ด๋ จ

MiniKube ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ์ผ๋ ์ด์ ๊ฐ๋จํ ๋ช ๋ น์ผ๋ก Nginx ์น ์๋ฒ๋ฅผ ์คํํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ Nginx ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํฉ๋๋ค.
kubectl create deployment hello-nginx --image=nginx:latest
#
# deployment.apps/hello-nginx created
kubectl create deployment <DEPLOYMENT_NAME> --image=<IMAGE_NAME>:<TAG>
ํ์์
๋๋ค. ์ด๋ฏธ์ง๋ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.kubectl get all
๋ช
๋ น์ ์คํํด๋ด
๋๋ค.kubectl get all
#
# NAME READY STATUS RESTARTS AGE
# pod/hello-nginx-59b74ddd97-qf88t 1/1 Running 0 2m8s
#
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
#
# NAME READY UP-TO-DATE AVAILABLE AGE
# deployment.apps/hello-nginx 1/1 1 1 2m8s
#
# NAME DESIRED CURRENT READY AGE
# replicaset.apps/hello-nginx-59b74ddd97 1 1 1 2m8s
๋ํ๋ก์ด๋จผํธ deployment.apps/hello-nginx
์ ์ด ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑํ ๋ ํ๋ฆฌ์นด์
replicaset.apps/hello-nginx-59b74ddd97
๊ทธ๋ฆฌ๊ณ ์ด ๋ ํ๋ฆฌ์นด์
์ด ์์ฑํ ํ๋ pod/hello-nginx-59b74ddd97-qf88t
๊ฐ ํ์๋ฉ๋๋ค. ์ฆ, ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ฉด ๋ํ๋ก์ด๋จผํธ, ๋ ํ๋ฆฌ์นด์
, ํ๋ ์ด๋ ๊ฒ 3๊ฐ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ๋ํ๋ก์ด๋จผํธ: ํ๋๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ๋๋ค. ์ํ๊ฐ ์๋ ๋ฐฐํฌ ๋จ์์ด๋ฉฐ ๋ ํ๋ฆฌ์นด์ ์ ํฌํจํ๊ณ ์์ต๋๋ค.
- ๋ ํ๋ฆฌ์นด์ : ํ๋๋ฅผ ๋ช ๊ฐ ์์ฑ(๋ณต์ )ํ์ฌ ์ ์งํ ์ง ๊ฒฐ์ ํ๋ ๋ฆฌ์์ค์ ๋๋ค.
- ํ๋: ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๋ฆฌ์์ค์ ๋๋ค. ํ๋ ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋ค์ด๊ฐ ์๋ ์์ต๋๋ค.

๋ฆฌ์์ค์ ์ค๋ธ์ ํธ
์ฟ ๋ฒ๋คํฐ์ค์๋ ๋ฆฌ์์ค์ ์ค๋ธ์ ํธ๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋น์ ํ์๋ฉด ๋ฆฌ์์ค๋ ํด๋์ค, ์ค๋ธ์ ํธ๋ ์ธ์คํด์ค์ ํก์ฌํฉ๋๋ค.
๊ทธ๋ค์์๋ ํ๋๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ์ ๋ ธ์ถํ ์ ์๋๋ก ์๋น์ค๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
kubectl create service clusterip hello-nginx --tcp=80:80
#
# service/hello-nginx created
kubectl create service <SERVICE_TYPE> <SERVICE_NAME> --tcp=<PORT>:<TARGET_PORT>
ํ์์
๋๋ค. ์๋น์ค ์ข
๋ฅ(type)๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง ์ฌ๊ธฐ์๋ clusterip
๋ก ์ค์ ํ์ต๋๋ค.๋ค์ kubectl get all
๋ช
๋ น์ ์คํํด๋ด
๋๋ค.
kubectl get all
#
# NAME READY STATUS RESTARTS AGE
# pod/hello-nginx-59b74ddd97-qf88t 1/1 Running 0 14m
#
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# service/hello-nginx ClusterIP 10.109.191.40 <none> 80:31206/TCP 2m14s
# service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
#
# NAME READY UP-TO-DATE AVAILABLE AGE
# deployment.apps/hello-nginx 1/1 1 1 14m
#
# NAME DESIRED CURRENT READY AGE
# replicaset.apps/hello-nginx-59b74ddd97 1 1 1 14m
์๋น์ค์ service/hello-nginx
๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ์๋น์ค: ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ด๋ถ์ ์๋ ํ๋ ๋ฑ์ ์ค๋ธ์ ํธ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ๋ ์ธ๋ถ์ ๋ ธ์ถ์ํฌ ๋ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ๋๋ค.
ํ์ง๋ง ์์ง ๋ก์ปฌํธ์คํธ์์๋ MiniKube์ ์๋น์ค์ ์ ๊ทผํ ์๋ ์์ต๋๋ค. ์์ ํ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฌ์ฉ๋ฒ์ ์ข๋ ๋ณต์กํ๋ฏ๋ก ์ฌ๊ธฐ์๋ kubectl
์ port-forward
๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ์ ๊ทผํด๋ณด๊ฒ ์ต๋๋ค. ์์ ํ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฌ์ฉ๋ฒ์ ๋ค์์ ๋ค์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
kubectl port-forward service/hello-nginx 8000:80
#
# Forwarding from 127.0.0.1:8000 -> 80
# Forwarding from [::1]:8000 -> 80
kubectl port-forward <RESOURCE_TYPE/RESOURCE_NAME> <LOCAL_PORT>:<REMOTE_PORT>
ํ์์
๋๋ค. ์ฆ, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์์ ์๋น์ค ํฌํธ๋ฅผ ๋ก์ปฌ ํฌํธ๋ก ํฌ์๋ฉ ํ๋ ๊ธฐ๋ฅ์
๋๋ค.
kubectl port-forward
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ http://127.0.0.1:8000
์ ์ ์ํ๋ฉด Welcome to nginx! ๊ฐ ํ์๋ ๊ฒ์
๋๋ค.
ํ๋ ํฌํธ ํฌ์๋ฉ
์์์๋ ์๋น์ค์ ํฌํธ 80๋ฒ์ ํฌํธ ํฌ์๋ฉํ์ง๋ง ํ๋๋ฅผ ๊ทธ๋๋ก ํฌํธ ํฌ์๋ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด pod/<POD_NAME>
์ ์ง์ ํด์ฃผ๋ฉด ํ๋์ ํฌํธ๋ฅผ ํฌ์๋ฉํ ์ ์์ต๋๋ค.
kubectl port-forward pod/hello-nginx-59b74ddd97-qf88t 8000:80
#
# Forwarding from 127.0.0.1:8000 -> 80
# Forwarding from [::1]:8000 -> 80
๋ง์ฐฌ๊ฐ์ง๋ก ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ http://127.0.0.1:8000
์ ์ ์ํ๋ฉด Welcome to nginx! ๊ฐ ํ์๋ ๊ฒ์
๋๋ค.
port-forward๋ฅผ ์ฐ๋ ์ด์
์ฟ ๋ฒ๋คํฐ์ค์ ํ๋์ ์๋น์ค๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ด๋ถ ๋คํธ์ํฌ์ IP ์ฃผ์๋ฅผ ํ ๋น๋ฐ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด IP ์ฃผ์๋ ํด๋ฌ์คํฐ ๋ฐ๊นฅ์์ ์ ๊ทผํ ์ ์๋๋ก ๋์ด ์์ต๋๋ค. ์ค์ ์๋น์ค์์๋ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํด๋ผ์ฐ๋์ ๋ก๋๋ฐธ๋ฐ์(์: AWS์ ELB)๋ฅผ ํตํด EXTERNAL-IP
๋ฅผ ํ ๋น๋ฐ์ต๋๋ค. ํ์ง๋ง, ์ง๊ธ์ฒ๋ผ Minikube๋ฅผ ์ฌ์ฉํ๋ ์ค์ต์์๋ ํด๋ผ์ฐ๋์ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก kubectl port-forward
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์์๋ก ์๋น์ค์ ์ ๊ทผํ๋ ๊ฒ์
๋๋ค. port-forward๋ ํ
์คํธ์ฉ์ด๋ฉฐ ์ค์ ์๋น์ค์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด EXTERNAL-IP
๋ฅผ ๋ฐ๊ณ ์ธ๋ถ์์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ค์์ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
๋ํ๋ก์ด๋จผํธ์ ์๋น์ค ์ญ์
์์์ ์์ฑํ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค๋ฅผ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
kubectl delete service hello-nginx
#
# service "hello-nginx" deleted
kubectl delete deployment hello-nginx
#
# deployment.apps "hello-nginx" deleted
kubectl delete <RESOURCE_NAME> <OBJECT_NAME>
ํ์์
๋๋ค. ์ฐธ๊ณ ๋ก ํ๋๋ ์ญ์ ํ๋ฉด ๋ ํ๋ฆฌ์นด์
์ ์ํด ๊ณ์ ๋ณต๊ตฌ๋๊ณ , ๋ ํ๋ฆฌ์นด์
์ ์ญ์ ํ๋ฉด ๋ํ๋ก์ด๋จผํธ์ ์ํด ๊ณ์ ๋ณต๊ตฌ๋ฉ๋๋ค. ํ๋, ๋ ํ๋ฆฌ์นด์
, ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ชจ๋ ์ญ์ ํ๋ ค๋ฉด ๋ํ๋ก์ด๋จผํธ๋ง ์ญ์ ํ๋ฉด ๋ฉ๋๋ค.