1. ๊ฐ์
Pod ๋ ์ผํ์ฉ์ด๋ผ ์ฃฝ๊ณ ๋ค์ ๋ฐ ๋๋ง๋ค IP ๊ฐ ๋ฐ๋๋ค. ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ํ๋ฉด ์ ๋ถ ๋ฐ๋๋ค. ๋ค๋ฅธ ์ฑ์ด Pod IP ๋ฅผ ์ง์ ์ ์ด ๋๋ฉด ๊ธ๋ฐฉ ๊นจ์ง๋ค. Service ๋ ์ด ๋ฌธ์ ์ ๋ต์ด๋ค. ๋ฐ๋๋ Pod ๋ค ์์ ๊ณ ์ ๋ ์ฃผ์ ํ๋๋ฅผ ๋๊ณ , ์์ฒญ์ ์ง๊ธ ์ด์ ์๋ Pod ๋ก ๋๋ ์ค๋ค.
2. ํต์ฌ ๋ด์ฉ
2-1. ๋ผ๋ฒจ ์ ๋ ํฐ๋ก Pod ๋ฅผ ์ฐพ๋๋ค
Service ๋ Pod ์ ์ด๋ฆ์ด ์๋๋ผ ๋ผ๋ฒจ๋ก ๋์์ ๊ณ ๋ฅธ๋ค.
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web # app=web ๋ผ๋ฒจ์ด ๋ถ์ Pod ๊ฐ ๋์
ports:
- port: 80 # Service ๊ฐ ๋ฐ๋ ํฌํธ
targetPort: 8080 # Pod ์ปจํ
์ด๋์ ํฌํธDeployment ๊ฐ Pod ๋ฅผ ์๋ก ๋ง๋ค์ด๋ ๊ฐ์ ๋ผ๋ฒจ์ด ๋ถ์ด ์์ผ๋ Service ๋ ์๋์ผ๋ก ์ Pod ๋ฅผ ๋์์ ๋ฃ๋๋ค. ๋ฐ๋๋ก ์ ๋ ํฐ ๋ผ๋ฒจ์ด Pod ์ ๋ผ๋ฒจ๊ณผ ํ ๊ธ์๋ผ๋ ๋ค๋ฅด๋ฉด ๋์์ด 0๊ฐ๊ฐ ๋๋ค. Service ๋ ๋ง๋ค์ด์ง๊ณ ์๋ฌด ์๋ฌ๋ ์๋๋ฐ ์ฐ๊ฒฐ๋ง ์ ๋๋ค.
2-2. EndpointSlice
์ ๋ ํฐ์ ๋ง๋ Pod ๋ค์ ์ค์ ์ฃผ์ ๋ชฉ๋ก์ EndpointSlice ๋ผ๋ ์ค๋ธ์ ํธ์ ๊ธฐ๋ก๋๋ค. ์ปจํธ๋กค๋ฌ๊ฐ ์ด ๋ชฉ๋ก์ ๊ณ์ ๊ฐฑ์ ํ๋ค.
kubectl get endpointslices -l kubernetes.io/service-name=web์ฌ๊ธฐ์ ๋ค์ด๊ฐ๋ ์กฐ๊ฑด์ด ์ค์ํ๋ค. readiness ๋ฅผ ํต๊ณผํ Pod ๋ง ํธ๋ํฝ ๋์์ด ๋๋ค. 2ํธ์์ readiness ์คํจ๊ฐ โService ๋์์์ ๋น ์ง๋คโ ์๋ ๊ฒ ์ด ๋ชฉ๋ก์์ ์ฃผ์๊ฐ ๋น ์ง๋ค๋ ๋ป์ด๋ค. Service ๋ก ์ฐ๊ฒฐ์ด ์ ๋ ๋ endpoints ๊ฐ ๋น์ด ์๋์ง๋ถํฐ ๋ณด๋ฉด ์์ธ์ด ๋ผ๋ฒจ์ธ์ง readiness ์ธ์ง ๊ฐ๋ฆฐ๋ค.
2-3. ํ์ ์ธ ๊ฐ์ง
| ํ์ | ์ ๊ทผ ๋ฒ์ | ์ฉ๋ |
|---|---|---|
| ClusterIP (๊ธฐ๋ณธ) | ํด๋ฌ์คํฐ ์์์๋ง | ์๋น์ค ๊ฐ ๋ด๋ถ ํต์ |
| NodePort | ๋ชจ๋ ๋ ธ๋์ ํน์ ํฌํธ(๊ธฐ๋ณธ 30000-32767) | ๊ฐ๋จํ ์ธ๋ถ ๋ ธ์ถ, ํ ์คํธ |
| LoadBalancer | ํด๋ผ์ฐ๋๋ ๋ณ๋ ๊ตฌํ์ฒด๊ฐ ์ธ๋ถ IP ๋ฅผ ํ ๋น | ์ธ๋ถ ํธ๋ํฝ ์ง์ ์ |
์ ์ ์๋ก ํฌํจ ๊ด๊ณ๋ค. LoadBalancer ๋ NodePort ๋ฅผ ๋ง๋ค๊ณ , NodePort ๋ ClusterIP ๋ฅผ ๋ง๋ ๋ค. ์จํ๋ ๋ฏธ์ค๋ ํ๋ฉ์์๋ LoadBalancer ๋ฅผ ๊ตฌํํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ์์ด์ผ ์ธ๋ถ IP ๊ฐ ๋ถ๋๋ค. HTTP ์์ฒญ์ ํธ์คํธ๋ ๊ฒฝ๋ก๋ก ๋๋ ๋ฐ๋ ๋ฌธ์ ๋ Service ๊ฐ ์๋๋ผ ๋ค์ ํธ์ Ingress ์ Gateway ๊ฐ ๋งก๋๋ค.
2-4. ํด๋ฌ์คํฐ DNS
Service ๋ฅผ ๋ง๋ค๋ฉด DNS ์ด๋ฆ์ด ์๊ธด๋ค. ํ์์ ์ด๋ ๋ค.
<์๋น์ค>.<๋ค์์คํ์ด์ค>.svc.cluster.local
๊ฐ์ ๋ค์์คํ์ด์ค ์์์๋ web ๋ง ์จ๋ ๋๋ค. ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ db ์๋น์ค๋ db.data ๋ ์ ์ฒด ์ด๋ฆ์ผ๋ก ๋ถ๋ฅธ๋ค. Pod ์ /etc/resolv.conf ์ ๊ฒ์ ๋๋ฉ์ธ์ด ๋ค์ด ์์ด์ ์งง์ ์ด๋ฆ์ด ํ๋ฆฌ๋ ๊ฒ์ด๋ค. ์ ๋ฏธ์ฌ cluster.local ์ ๊ธฐ๋ณธ๊ฐ์ด๊ณ ํด๋ฌ์คํฐ๋ง๋ค ๋ฐ๊ฟ ์ ์๋ค.
# ์์ Pod ์์ ์ด๋ฆ์ด ํ๋ฆฌ๋์ง ํ์ธ
kubectl run tmp --rm -it --image=busybox:1.36 --restart=Never -- nslookup web2-5. ์ด๋์ ์ค์ํ๋
- ์
๋ ํฐ ๋ผ๋ฒจ๊ณผ Pod ๋ผ๋ฒจ ๋ถ์ผ์น.
kubectl get endpointslices๊ฐ ๋น์ด ์๋ค. port์targetPort๋ฅผ ํผ๋ํ๋ค. targetPort ๋ ์ปจํ ์ด๋๊ฐ ์ค์ ๋ก ๋ฃ๋ ํฌํธ๋ค.- ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์๋น์ค๋ฅผ ์งง์ ์ด๋ฆ์ผ๋ก ๋ถ๋ฅธ๋ค. ์ ํ๋ฆฐ๋ค.
- ์ Pod ๊ฐ ๋ฌ ์งํ ๋ช ์ด๊ฐ ์ฐ๊ฒฐ์ด ๊ฑฐ๋ถ๋๋ ๊ฒ์ Service ๋ฌธ์ ๊ฐ ์๋ ์ ์๋ค. ๋คํธ์ํฌ ์ ์ฑ ์ด ๋ฐ์๋๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๋ด์ฉ์ NetworkPolicy default-deny ์ ์ ํํ ์๋ฏธ๋ก ์์ ๋ค๋ค๋ค.
3. ๋ง๋ฌด๋ฆฌ
์์ฝ
- Service ๋ ๋ฐ๋๋ Pod IP ์์ ๊ณ ์ ์ฃผ์์ด๊ณ , ๋ผ๋ฒจ ์ ๋ ํฐ๋ก ๋์์ ๊ณ ๋ฅธ๋ค.
- ๋์ ์ฃผ์ ๋ชฉ๋ก์ EndpointSlice ์ ์๊ณ , readiness ๋ฅผ ํต๊ณผํ Pod ๋ง ๋ค์ด๊ฐ๋ค.
- ClusterIP ๋ ๋ด๋ถ์ฉ, NodePort ๋ ๋ ธ๋ ํฌํธ ๋ ธ์ถ, LoadBalancer ๋ ์ธ๋ถ IP ํ ๋น์ด๋ค.
- ์ด๋ฆ์ ์๋น์ค.๋ค์์คํ์ด์ค.svc.cluster.local ์ด๊ณ ๊ฐ์ ๋ค์์คํ์ด์ค์์๋ ์๋น์ค ์ด๋ฆ๋ง์ผ๋ก ํ๋ฆฐ๋ค.
๋ค์์ Kubernetes ๊ธฐ์ด 5 - Ingress ์ Gateway API์ด๋ค.