์ฟ ๋ฒ๋คํฐ์ค์์ ํ๋์ ์ง์ ์ ๊ทผํ๋ ค๋ฉด kubectl describe๋ก ํ๋ IP๋ฅผ ํ์ธํ ๋ค ๊ทธ IP๋ก ์ ์ํ๋ฉด ๋๋ค. ์ด ๋ฐฉ์์ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋์ ์ฌ๋ถ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ ๋๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํ๋ IP๋ ์์์ ์ด์ง ์๋ค. ํ๋๊ฐ ์ฌ์์๋๊ฑฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ก ์ฌ์ค์ผ์ค๋ง๋๋ ์๊ฐ ์ IP๋ฅผ ํ ๋น๋ฐ์ผ๋ฏ๋ก, ํ ๋ฒ ํ์ธํ IP๊ฐ ๋ฌดํจ๊ฐ ๋ ์ ์๋ค.
๋ํ ์ฌ๋ฌ ๋ํ๋ก์ด๋จผํธ๋ฅผ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์ฎ์ ๋ ์๋ก์ ํ๋ IP๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ฐฉ๋ฒ์ด ์๋ค. ์๋ฅผ ๋ค์ด ํ๋ก ํธ ํ๋์์ ๋ฐฑ์๋ ํ๋๋ฅผ ํธ์ถํ๋ ค๋ฉด ๊ทธ๋๊ทธ๋ ๋ฐ๋๋ IP๋ฅผ ์ถ์ ํ๋ ๊ฒ ์๋๋ผ ๋ณํ์ง ์๋ ์๋ณ์๋ก ์๋ก๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ด์ผ ํ๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ฟ ๋ฒ๋คํฐ์ค๋ ํ๋ IP๋ฅผ ํต์ ๊ฒฝ๋ก๋ก ์ง์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ์ง ์๊ณ , ๋ณ๋์ ์๋ณ ๊ณ์ธต์ธ ์๋น์ค(Service) ์ค๋ธ์ ํธ๋ฅผ ๋๋ค.
๋์ปค์์๋ ์ปจํ
์ด๋ ์์ฑ๊ณผ ์ธ๋ถ ๋
ธ์ถ์ด ํ ๋ช
๋ น์ ๋ฌถ์ฌ ์๋ค. docker run -p 8080:80์ ์คํํ๋ฉด ์ปจํ
์ด๋๊ฐ ๋ง๋ค์ด์ง๋ ๊ทธ ์๊ฐ ํธ์คํธ ํฌํธ๊ฐ ์ปจํ
์ด๋ ํฌํธ๋ก ์ฐ๊ฒฐ๋๋ค.
์ปจํ
์ด๋ ์ฌ์ด์ ๋ด๋ถ ํต์ ๋ ๋น์ทํ๋ค. ์ฌ์ฉ์ ์ ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ๊ฐ์ด ์ฌ๋ฆฌ๋ฉด ๋์ปค์ ๋ด์ฅ DNS๊ฐ ์ปจํ
์ด๋ ์ด๋ฆ์ IP๋ก ํ์ด์ค๋ค. ์ฆ, ๋
ธ์ถ๊ณผ ๋ฐ๊ฒฌ ๋ชจ๋ ์ปจํ
์ด๋ ์์ฒด์ ์คํ ์ต์
์ผ๋ก ๋ค๋ฃฌ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์ด ๋์ ์๋์ ์ผ๋ก ๋ถ๋ฆฌํ๋ค. ๋ํ๋ก์ด๋จผํธ YAML์ ์ ๋ containerPort๋ ํ๋์ ์ปจํ
์ด๋๊ฐ ์ด๋ค ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ๋ณด ํ๊ธฐ์ ๊ฐ๊น๊ณ , ๊ทธ ์์ฒด๋ก๋ ์ธ๋ถ์ ํฌํธ๋ฅผ ์ด์ง๋, ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋ค๋ฅธ ํ๋๊ฐ ๋ถ๋ฅผ ์์ ๋ ์ด๋ฆ์ ๋ง๋ค์ด ์ฃผ์ง๋ ์๋๋ค.
์ธ๋ถ๋ก ๋
ธ์ถํ๊ฑฐ๋ ๋ค๋ฅธ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ผ๊ด๋ ์ด๋ฆ์ผ๋ก ํธ์ถํ๊ฒ ํ๋ ค๋ฉด, ํ๋์๋ ๋ณ๊ฐ์ ์ค๋ธ์ ํธ์ธ ์๋น์ค(Service)๋ฅผ ๋ฐ๋ก ์ ์ํด์ผ ํ๋ค. ๋
ธ์ถ๊ณผ ๋ฐ๊ฒฌ์ ํ๋ ์ ์์์ ๋ผ์ด๋ธ ๊ตฌ์กฐ ๋๋ถ์, ๊ฐ์ ํ๋๋ฅผ ํ๊ฒฝ๋ง๋ค ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋
ธ์ถํ๊ฑฐ๋ ๋
ธ์ถ ๋ฐฉ์๋ง ๋จ๋
์ผ๋ก ๊ต์ฒดํ๋ ์ด์์ด ๊ฐ๋ฅํด์ง๋ค.
์๋น์ค๋ ํ๋ ์งํฉ ์์ ์นํ๋ ์๋ณ/๋ผ์ฐํ
๊ณ์ธต์ด๋ค. ํ๋ ์์ฒด๋ ๊ณ์ ๋ฐ๋์ง๋ง, ๊ทธ ์์์ ์๋น์ค๊ฐ ์ธ ๊ฐ์ง ์ผ์ ๋งก๋๋ค.
๋จผ์ ์์ ๋ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ถ์ฌํ๋ค. ํด๋ฌ์คํฐ DNS๊ฐ ์๋น์ค ์ด๋ฆ์ ๊ฐ์ IP(ClusterIP)๋ก ํด์ํด ์ฃผ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํ๋๋ ๋ณํ๋ ํ๋ IP๊ฐ ์๋ <service>.<namespace> ํํ์ ์ด๋ฆ์ผ๋ก ์๋น์ค๋ฅผ ํธ์ถํ๋ค.
๋ํ ์์ฒญ์ ์ฌ๋ฌ ํ๋์ ๋ถ์ฐํ๋ ๋ก๋ ๋ฐธ๋ฐ์ ์ญํ ๋ ํ๋ค. ๊ฐ์ ๋ผ๋ฒจ์ ๊ณต์ ํ๋ ํ๋ ์ฌ๋ฌ ๊ฐ๊ฐ ํ ์๋น์ค ๋ค์ ๋ฌถ์ด๋ฉด, ์๋น์ค๋ก ๋ค์ด์จ ํธ๋ํฝ์ด ๊ทธ์ค ํ๋์ ํ๋๋ก ๋ผ์ฐํ
๋๋ค.
ํ๋์ ๋
ธ์ถ ๋ฒ์๋ ์ง์ ํ๋๋ฐ, ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ์ด์ง, ํน์ ๋ชจ๋ ๋
ธ๋์ ํน์ ํฌํธ๋ก ์ด์ง, ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๊ณต์ธ IP๋ก ์ด์ง๋ฅผ ์๋น์ค ์ ์ ์์์ ์ ํํ๋ค.
์๋น์ค๋ ํ๋๋ฅผ ์ด๋๊น์ง ๋
ธ์ถํ ์ง์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ํ์
์ผ๋ก ๋๋๋ค.
ClusterIP๋ ๊ธฐ๋ณธ ํ์
์ด๋ฉฐ ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ IP๋ฅผ ๋ถ์ฌํ๋ค. ์ธ๋ถ์์๋ ์ด IP๋ก ๋๋ฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํด๋ฌ์คํฐ ์์ ๋ค๋ฅธ ํ๋๋ผ๋ฆฌ๋ง ํธ์ถํ๋ ๋ด๋ถ ์๋น์ค์ ์ ํฉํ๋ค.
NodePort๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ๋์ผํ ํฌํธ๋ฅผ ์ด๊ณ , ๊ทธ ํฌํธ๋ก ๋ค์ด์จ ํธ๋ํฝ์ ์๋น์ค์ ClusterIP๋ก ์ ๋ฌํ๋ค. ํฌํธ๋ ๊ธฐ๋ณธ 30000~32767 ๋ฒ์์์ ์๋ ํ ๋น๋๋ฉฐ, nodePort ํ๋๋ก ์ง์ ์ง์ ํ ์๋ ์๋ค.
LoadBalancer๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ๋์ ์ผ๋ก ํ๋ก๋น์ ๋ํด ์ธ๋ถ IP๋ก ํธ๋ํฝ์ ๋ฐ๋๋ค. ๋ด๋ถ์ ์ผ๋ก๋ NodePort์ ClusterIP๋ฅผ ํจ๊ป ๋ง๋ค์ด ๋๊ณ ๊ทธ ์์ ํด๋ผ์ฐ๋ LB๋ฅผ ์น๋ ๊ตฌ์กฐ์ด๋ฉฐ, AWS๋ GCP ๊ฐ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋ณ๋ ์ค์ ์์ด ๋์ํ๋ค.
๋ค์์ ๋ผ๋ฒจ์ด app: bluecool์ธ ํ๋๋ค์ ํด๋ฌ์คํฐ ๋ด๋ถ IP๋ก ์ ๊ทผํ๊ฒ ๋ง๋๋ YAML์ด๋ค.
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP
selector:
app: bluecool
ports:
- port: 8080
targetPort: 8080
spec.selector๋ ์ด๋ค ๋ผ๋ฒจ์ ๊ฐ์ง ํ๋๋ฅผ ์ด ์๋น์ค ๋ค์ ๋ฌถ์์ง ๊ฒฐ์ ํ๋ค. ์ ์์์์๋ app: bluecool ๋ผ๋ฒจ์ด ๋ถ์ ํ๋๋ค์ด ๋ผ์ฐํ
๋์์ด ๋๋ค. ๋ผ๋ฒจ์ ๋จ์ํ ํ์์ฉ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋์ด, ์๋น์ค๋ ๋ ํ๋ฆฌ์นด์
์ฒ๋ผ ๋ผ๋ฒจ๋ก ๋ฆฌ์์ค๋ฅผ ๋ฌถ๋ ์ปจํธ๋กค๋ฌ์์๋ ์ผ์น ์ฌ๋ถ ์์ฒด๊ฐ ๋์ ์กฐ๊ฑด์ด ๋๋ค. spec.ports.port๋ ์๋น์ค์ ClusterIP์ ์ ๊ทผํ ๋ ์ฌ์ฉํ ํฌํธ๋ก, spec.ports.targetPort๋ ์
๋ ํฐ๋ก ๋ฌถ์ธ ํ๋๊ฐ ์ค์ ๋ก listenํ๋ ํฌํธ๋ค. ์ YAML์ ์๋น์ค์ ๊ฐ์ IP์ 8080 ํฌํธ๋ก ๋ค์ด์จ ์์ฒญ์ ๋ผ๋ฒจ์ด ๋งค์นญ๋ ํ๋์ 8080 ํฌํธ๋ก ์ ๋ฌํ๋ค๋ ์๋ฏธ์ด๋ค. ๋ ๊ฐ์ด ๊ฐ์ ํ์๋ ์์ผ๋ฉฐ, ์ปจํ
์ด๋๊ฐ ์ค์ ๋ก ๋ฐ๋ ํฌํธ์ targetPort๋ง ์ผ์นํ๋ฉด ๋๋ค. kubectl apply -f๋ก ์ ์ฉํ ๋ค, kubectl get svc๋ฅผ ์คํํ๋ฉด CLUSTER-IP ์ปฌ๋ผ์ ๊ฐ์ IP๊ฐ ํ ๋น๋ ๊ฒ์ด ๋ณด์ธ๋ค. ๊ฐ์ ํด๋ฌ์คํฐ์ ํ๋๋ผ๋ฉด ์ด IP์ 8080 ํฌํธ๋ก ์ง์ ํธ์ถํ ์ ์๊ณ , ๋ ํํ๊ฒ๋ ์๋น์ค ์ด๋ฆ์ผ๋ก ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ฌ์คํฐ DNS(CoreDNS)๋ฅผ ๊ตฌ๋ํ๊ณ ๋ชจ๋ ํ๋๋ฅผ ์๋์ผ๋ก ์ด DNS์ ๋ฌถ๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋ค์์คํ์ด์ค์ ๋ค๋ฅธ ํ๋์์๋ curl clusterip-service:8080 ํ ์ค์ด๋ฉด ์๋ต์ด ๋์์จ๋ค.
kubectl get svc๊ฒฐ๊ณผ๋ฅผ ์ฒ์ ๋ณธ๋ค๋ฉดdefault๋ค์์คํ์ด์ค์kubernetes๋ผ๋ ClusterIP ์๋น์ค๊ฐ ํจ๊ป ๋ณด์ฌ ์์ํ ์ ์๋ค. ์ด๋ ํด๋ฌ์คํฐ ๋ถํธ์คํธ๋ฉ ์์ ์ ์๋์ผ๋ก ์์ฑ๋๋ kube-apiserver ์ง์ ์ฉ ์๋น์ค๋ค. ํ๋ ์์์ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํธ์ถํ ๋ ์ฐ์ธ๋ค.
NodePort๋ ClusterIP์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ๋ฉด์, ์ถ๊ฐ๋ก ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ๊ฐ์ ํฌํธ๋ฅผ ์ด์ด์ค๋ค. YAML๋ ClusterIP์์ type๋ง ๋ฐ๊พธ๋ฉด ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
selector:
app: bluecool
ports:
- port: 8080
targetPort: 8080
kubectl apply -f ํ kubectl get svc๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ ๊ฐ์ง๊ฐ ๋์ ๋๋ค. PORT(S) ์ปฌ๋ผ์ด 8080:31514/TCP ๊ฐ์ ๋ ์ซ์ ํํ๋ก ์ถ๋ ฅ๋๋ค. ์์ 8080์ ClusterIP์ ํฌํธ, ๋ค์ 31514๊ฐ ๋ชจ๋ ๋
ธ๋์ ์ด๋ฆฐ NodePort์ด๋ค.
์ถ๊ฐ๋ก ๋์ฌ๊ฒจ๋ณผ ๋ถ๋ถ์ ํ์
์ด NodePort์ธ๋ฐ๋ CLUSTER-IP ์ปฌ๋ผ์ ๊ฐ์ IP๊ฐ ์ฑ์์ ธ ์๋ค๋ ์ ์ด๋ค. ์ด๋ NodePort ์๋น์ค๊ฐ ClusterIP์ ๋์์ ๊ทธ๋๋ก ํฌํจํ๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋ฌ์คํฐ ์์์๋ ์ฌ์ ํ ์๋น์ค ์ด๋ฆ๊ณผ ๊ฐ์ IP๋ก ํธ์ถํ ์ ์๊ณ , ํด๋ฌ์คํฐ ๋ฐ์์๋ ๋
ธ๋ IP์ 31514 ํฌํธ๋ก ์ถ๊ฐ๋ก ๋๋ฌํ ์ ์๋ค.
์ธ๋ถ์์ ์ ๊ทผํ ๋๋ kubectl get nodes -o wide๋ก ๋
ธ๋ IP๋ฅผ ํ์ธํ ๋ค curl <๋
ธ๋ IP>:31514๋ฅผ ํธ์ถํ๋ค. ์ด๋ ๋
ธ๋์ IP๋ฅผ ๊ณจ๋ผ๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค. ๊ฐ์ NodePort๊ฐ ๋ชจ๋ ๋
ธ๋์ ์ด๋ ค ์๊ณ , ์ด๋ ๋
ธ๋๋ก ๋ค์ด์จ ์์ฒญ์ด๋ kube-proxy๊ฐ ์
๋ ํฐ์ ๋งค์นญ๋ ํ๋ ์ค ํ๋๋ก ๋ผ์ฐํ
ํ๋ค.
NodePort์ ์ฐ์ผ ํฌํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 30000~32767 ๋ฒ์์์ ์๋ ํ ๋น๋์ง๋ง, YAML์ nodePort ํ๋๋ก ์ง์ ์ง์ ํ ์๋ ์๋ค. ๋ฒ์ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด kube-apiserver์ --service-node-port-range ์ต์
์ ์์ ํ๋ค. (๋ค๋ฅธ ์์คํ
์๋น์ค์ ์ถฉ๋ ์ฃผ์)
ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ ๋
ธ๋ ํฌํธ๊ฐ ๊ทธ๋ฅ ์ด๋ฆฌ์ง ์๋๋ค. GKE์์๋ VPC ๋ฐฉํ๋ฒฝ ๊ท์น์, AWS์์๋ ๋
ธ๋์ ๋ณด์ ๊ทธ๋ฃน ์ธ๋ฐ์ด๋ ๊ท์น์ ๋ณ๋๋ก ์ถ๊ฐํด์ผ ์ธ๋ถ์์ NodePort์ ๋๋ฌํ ์ ์๋ค. ๋๋ฝ ์ ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ ๋ฉ์ฉกํ ๋์ํ๋๋ฐ ์ธ๋ถ curl๋ง ํ์์์์ด ๋ฐ์ํ ์ ์๋ค.
์ด์ ํ๊ฒฝ์์ NodePort๋ฅผ ๋จ๋
์ผ๋ก ์ธ๋ถ ๋
ธ์ถ์ ์ฐ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. 80, 443 ๊ฐ์ ํ์ค ํฌํธ๋ฅผ NodePort ๋ฒ์์ ๋งคํํ๊ธฐ๊ฐ ๋ถ์์ฐ์ค๋ฝ๊ณ , TLS ์ข
๋ฃ๋ ํธ์คํธ/๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ
์ ์๋น์ค ๋ฆฌ์์ค ํ ๊ฐ ์์์ ํํํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ถ ๋
ธ์ถ์ ๋ณดํต Ingress๋ LoadBalancer๊ฐ ๋งก๊ณ , NodePort๋ ๊ทธ ์์ชฝ์์ ํธ๋ํฝ์ ๋ฐ์ ๊ฐ์ ์ ์ผ๋ก ์ฐ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ง์ฝ ๊ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋งค๋ฒ ๊ฐ์ ํ๋๋ก ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ์๋น์ค์ spec.sessionAffinity๋ฅผ ClientIP๋ก ๋๋ค. ํด๋ผ์ด์ธํธ์ ์ถ๋ฐ์ง IP๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ํ๋์ ๋ผ์ฐํ
๋๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ ๋ถ์ฐ ๋์ ํ๋ ์ค ์ด๋ ์ชฝ์ผ๋ก๋ ๋ผ์ฐํ
๋ ์ ์๋ None์ด๋ค. ์ด ์ต์
์ NodePort์ ํ์ ๋์ง ์๊ณ ๋ชจ๋ ์๋น์ค ํ์
์ ์ ์ฉ๋๋ค.
NodePort๋ ์ธ๋ถ ๋๋ฌ์ ๊ฐ๋ฅํ๊ฒ ํ์ง๋ง, ํด๋ผ์ด์ธํธ๊ฐ ๋
ธ๋ IP๋ฅผ ์ง์ ์์์ผ ํ๋ค๋ ๋ถ๋ด์ด ๋จ๋๋ค. LoadBalancer๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์๋์ผ๋ก ๋์ฐ๊ณ , ๊ทธ LB์ ์ธ๋ถ IP๋ ๋๋ฉ์ธ์ ํตํด ํธ๋ํฝ์ ๋ฐ๊ฒ ํ๋ค.
YAML์ NodePort์์ type๊ณผ ์ธ๋ถ ๋
ธ์ถ ํฌํธ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
selector:
app: bluecool
ports:
- port: 80
targetPort: 8080
port: 80์ ํด๋ผ์ฐ๋ LB๊ฐ ์ธ๋ถ์ ๋
ธ์ถํ๋ ํฌํธ์ด๊ณ , targetPort: 8080์ ํ๋์ ์ปจํ
์ด๋๊ฐ listen ํ๋ ํฌํธ๋ค. kubectl apply -f ํ kubectl get svc๋ฅผ ํ์ธํด๋ณด๋ฉด ์ธ ๊ฐ์ง ์ ๋ณด๊ฐ ํ ์ค์ ๋ค์ด ์๋ค. CLUSTER-IP์๋ ์ฌ๋ ์๋น์ค์ฒ๋ผ ๊ฐ์ IP๊ฐ ํ ๋น๋ผ ์๊ณ , ํด๋ฌ์คํฐ ์์์๋ ์๋น์ค ์ด๋ฆ์ด๋ ์ด IP๋ก ํธ์ถํ ์ ์๋ค. EXTERNAL-IP์๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ด ์๋ก ๋ง๋ ๋ก๋ ๋ฐธ๋ฐ์์ ์ธ๋ถ IP(๋๋ ๋๋ฉ์ธ ์ด๋ฆ)๊ฐ ์ฑ์์ง๋ค. ์ด ์ฃผ์์ 80 ํฌํธ๋ก ๋ค์ด์ค๋ ์ธ๋ถ ํธ๋ํฝ์ด ์๋น์ค๋ก ๋ค์ด์จ๋ค. PORT(S)์๋ 80:32620/TCP์ฒ๋ผ ๋ ์ซ์๊ฐ ๋ณด์ด๋๋ฐ, ๋ค์ 32620์ LoadBalancer๊ฐ ํจ๊ป ๋ง๋ค์ด ๋ NodePort์ด๋ค. ๋
ธ๋ IP์ 32620 ํฌํธ๋ก ์ ๊ทผํ๋ฉด NodePort ์๋น์ค์ ๋๊ฐ์ด ๋์ํ๋ค.
์ธ ๊ฒฝ๋ก๊ฐ ๋์์ ์ด๋ฆฐ ๊ฒ์ LoadBalancer๊ฐ NodePort์ ClusterIP๋ฅผ ๊ทธ๋๋ก ํฌํจํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ์ธ๋ถ ํธ๋ํฝ์ ํด๋ผ์ฐ๋ LB๊ฐ ๋ฐ์ ์์ปค ๋
ธ๋ ์ค ํ๋์ 32620 ํฌํธ๋ก ์ ๋ฌํ๊ณ , ๋
ธ๋์ ๋ค์ด์จ ์์ฒญ์ kube-proxy๊ฐ ํ๋ ์ค ํ๋๋ก ๋ผ์ฐํ
ํ๋ค.
LoadBalancer๋ ํด๋ผ์ฐ๋ LB๋ฅผ ๋ง๋ค์ด ์ค ์ปจํธ๋กค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ์์ด์ผ ๋์ํ๋ค. AWS, GCP, Azure ๊ฐ์ ๋งค๋์ง๋ ํ๊ฒฝ์์๋ ์๋์ผ๋ก ๋์ํ์ง๋ง, ๋ฒ ์ด๋ฉํ์ด๋ ์ผ๋ฐ VM ํด๋ฌ์คํฐ์์๋ LB๋ฅผ ๋ง๋ค์ด ์ค ์ฃผ์ฒด๊ฐ ์์ด EXTERNAL-IP๊ฐ <pending>์ ๋จธ๋ฌด๋ฅธ๋ค.
์ด๋ฐ ํ๊ฒฝ์์ ๊ฐ์ฅ ํํ ์ฐ๋ ๋ณด์์ฑ
์ด MetalLB์ด๋ค. ๋ฏธ๋ฆฌ ์ ์ํด ๋ IP ํ์์ ์ธ๋ถ IP๋ฅผ ์ง์ ํ ๋นํ๊ณ , ๊ทธ IP๊ฐ ๋
ธ๋๋ก ํฅํ๋๋ก ์ธ๋ถ ๋คํธ์ํฌ์ ์๋ ค ์ฃผ๋ ๋ฐฉ์์ด๋ผ, ํด๋ผ์ฐ๋ LB ์์ด๋ LoadBalancer ํ์
์ ๊ทธ๋๋ก ์ธ ์ ์๋ค.
๊ฐ์ LoadBalancer ํ์
์์์๋ ์ด๋ค ์ข
๋ฅ์ LB๋ฅผ ๋ง๋ค์ง๋ metadata.annotations๋ก ๊ฒฐ์ ํ๋ค. ์๋ฅผ ๋ค์ด AWS ์ธ-ํธ๋ฆฌ ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋ ํ๊ฒฝ์ ๊ธฐ๋ณธ์ ํด๋์ ๋ก๋ ๋ฐธ๋ฐ์(CLB)์ด๊ณ , NLB๋ก ๋ฐ๊พธ๋ ค๋ฉด ์๋น์ค์ service.beta.kubernetes.io/aws-load-balancer-type: nlb ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ค.
์ด๋ ธํ ์ด์ ์ ๋ผ๋ฒจ๊ณผ ๋น์ทํ๊ฒ ํค-๊ฐ ์์ด์ง๋ง ๋ชฉ์ ์ด ๋ค๋ฅด๋ค. ๋ผ๋ฒจ์ด ์ ๋ ํฐ๋ก ๋ฆฌ์์ค๋ฅผ ๋ฌถ๊ธฐ ์ํ ๊ฒ์ด๋ผ๋ฉด, ์ด๋ ธํ ์ด์ ์ ์ปจํธ๋กค๋ฌ๋ ๋๊ตฌ์ ์ ๋ฌํ๋ ๋ฉํ์ ๋ณด๋ค.
NodePort๋ LoadBalancer๋ก ์ธ๋ถ ํธ๋ํฝ์ ๋ฐ์ ๋, ๊ทธ ํธ๋ํฝ์ด ์ด๋ ๋
ธ๋๋ฅผ ๊ฑฐ์ณ ์ด๋ ํ๋์ ๋๋ฌํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์์ฑ์ด spec.externalTrafficPolicy์ด๋ค. ๊ฐ์ ๋ ๊ฐ์ง๋ฟ์ด๊ณ ๊ธฐ๋ณธ์ Cluster๋ค.
์ง์ ๋ง๋ ์๋น์ค๋ฅผ kubectl get svc -o yaml๋ก ํ์ธํด๋ณด๋ฉด ์ด ํ๋๊ฐ ์๋์ผ๋ก ์ฑ์์ ธ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. -o yaml์ ์ฌ์ฉ์๊ฐ ๋ช
์ํ์ง ์์ ํญ๋ชฉ๊น์ง ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ฑ์ด ๋ชจ๋ ์์ฑ์ ๋ณด์ฌ ์ฃผ๋ฏ๋ก, ๊ธฐ๋ณธ๊ฐ์ ํ์ธํ ๋ ์์ฃผ ์ฐ๋ ์ต์
์ด๋ค. Cluster๋ ์ด๋ ๋
ธ๋๋ก ๋ค์ด์จ ํธ๋ํฝ์ด๋ ์
๋ ํฐ์ ๋งค์นญ๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ํ๋ ์ค ์์์ ํ๋๋ก ๋ณด๋ธ๋ค. ํธ๋ํฝ์ ๋ฐ์ ๋
ธ๋์ ํ๋๊ฐ ๋ค๋ฅธ ๋
ธ๋์ ์๋ค๋ฉด ๋
ธ๋ ๊ฐ ํ ํ์ด ์ถ๊ฐ๋๊ณ , ์ด๋ ์ฒซ ๋
ธ๋๋ source IP๋ฅผ ์๊ธฐ IP๋ก ๋ฐ๊ฟ ์๋ต์ด ์๊ธฐ์๊ฒ ๋์์ค๊ฒ ๋ง๋ ๋ค. ์ด SNAT ๋๋ฌธ์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ ํด๋ผ์ด์ธํธ์ IP๋ฅผ ๋ณผ ์ ์๊ฒ ๋๋ค.
๋ฐ๋ฉด Local๋ก ์ค์ ํ๋ฉด ํธ๋ํฝ์ ๋ฐ์ ๋
ธ๋๋ ๊ฐ์ ๋
ธ๋์ ์์นํ ํ๋๋ก๋ง ์์ฒญ์ ๋ผ์ฐํ
ํ๊ณ , ๋ค๋ฅธ ๋
ธ๋๋ก ๋๊ธฐ์ง ์๋๋ค. ๋
ธ๋ ๊ฐ ํ์ด ์ฌ๋ผ์ง๋ฏ๋ก SNAT์ ์ ์ฉํ ์ด์ ๋ ์์ด, ํ๋๋ ํด๋ผ์ด์ธํธ์ ์๋ IP๋ฅผ ๊ทธ๋๋ก ๋ณธ๋ค.
LoadBalancer ํ๊ฒฝ์ด๋ผ๋ฉด ํด๋ผ์ฐ๋ LB์ ํฌ์ค์ฒดํฌ๊ฐ ํ๋ ์๋ ๋
ธ๋๋ฅผ ํ๋ฝ์ํค๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ์ด ์์ฐ์ค๋ฝ๊ฒ ํ๋ ์๋ ๋
ธ๋๋ก๋ง ํ๋ฌ ๋ค์ด๊ฐ๋ค. NodePort ๋จ๋
ํ๊ฒฝ์์๋ ํ๋ ์๋ ๋
ธ๋๋ก ๋ค์ด์จ ํธ๋ํฝ์ด ๊ทธ๋ฅ ๋๋กญ๋๋ฏ๋ก, ํธ์ถ ์ธก์ด ํ๋์ ์์น๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค.
YAML์์๋ ํ ์ค๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
externalTrafficPolicy: Local
selector:
app: bluecool
ports:
- port: 80
targetPort: 8080
๋ค๋ง Local๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ, ํธ๋ํฝ์ด ๋
ธ๋ ์์์๋ง ๋ถ์ฐ๋๋ฏ๋ก ๋
ธ๋๋ณ๋ก ํ๋ ์๊ฐ ๋ค๋ฅด๋ฉด ํ๋ ํ ๊ฐ๋น ๋ฐ๋ ๋ถํ๊ฐ ์ด๊ธ๋๋ค. ๋
ธ๋ A์ ํ๋ 3๊ฐ, ๋
ธ๋ B์ ํ๋ 1๊ฐ๋ผ๋ฉด LB๊ฐ ๋ ๋
ธ๋์ ํธ๋ํฝ์ ๊ท ๋ฑํ๊ฒ ๋ณด๋์ ๋ B์ ํ๋๋ A์ ํ๋ ํ ๊ฐ๋ณด๋ค 3๋ฐฐ ๋ง์ ์์ฒญ์ ๋ฐ๋๋ค.
์ด ๋ถ๊ท ํ์ ์ค์ผ์ค๋ง ๋จ๊ณ์์ ํ๋๋ฅผ ๋
ธ๋์ ๊ณ ๋ฅด๊ฒ ๋ฐฐ์นํด ์ด๋ ์ ๋ ํด์ํ ์ ์๋ค. ๋ํ๋ก์ด๋จผํธ์ topologySpreadConstraints๋ PodAntiAffinity๋ก ๋
ธ๋๋ณ ๋ถํฌ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด๋ค. ๊ทธ๋ ์ง๋ง ์์ ํ ๊ท ๋ฑ์ ์ด๋ ค์ฐ๋ฏ๋ก, ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ด ํด๋ผ์ด์ธํธ IP๋ฅผ ์ ๋ง๋ก ํ์๋ก ํ๋๊ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก Cluster์ Local ์ค ํ๋๋ฅผ ๊ณ ๋ฅด๋ ํธ์ด ์ค์ฉ์ ์ด๋ค.
ExternalName์ ๋ค๋ฅธ ์๋น์ค ํ์
๊ณผ ๊ฒฐ์ด ๋ค๋ฅด๋ค. ์
๋ ํฐ๋ก ๋ฌถ์ ํ๋๋, ํธ๋ํฝ์ ๋ณด๋ผ ClusterIP๋, ๋งคํ์ ๋ณด๊ดํ Endpoints๋ ๋ง๋ค์ง ์๋๋ค. ๋์ ํด๋ฌ์คํฐ DNS์ ์ธ๋ถ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ณ๋ช
์ ๋ฑ๋กํ๋ค.
ํด๋ฌ์คํฐ ์์ ํ๋๊ฐ ์ด ์๋น์ค ์ด๋ฆ์ ํธ์ถํ๋ฉด DNS๊ฐ ์ธ๋ถ ๋๋ฉ์ธ์ ์๋ต์ผ๋ก ๋๋ ค์ฃผ๊ณ , ์ค์ ํต์ ์ ๊ทธ ์ธ๋ถ ๋๋ฉ์ธ์ผ๋ก ์ง์ ์ผ์ด๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ์ ๋ ๊ฑฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ SaaS API์ฒ๋ผ ํด๋ฌ์คํฐ๊ฐ ์ง์ ๊ด๋ฆฌํ์ง ์๋ ์์คํ
์ ํด๋ฌ์คํฐ ์์ ์๋น์ค์ฒ๋ผ ๋ถ๋ฅด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
apiVersion: v1
kind: Service
metadata:
name: externalname-svc
spec:
type: ExternalName
externalName: my.database.com
์์ ๊ฐ์ ๋งค๋ํ์คํธ๋ฅผ ์ ์ฉํ๋ฉด ํด๋ฌ์คํฐ DNS์ externalname-svc.<namespace>.svc.cluster.local์ด my.database.com์ผ๋ก ํฅํ๋ CNAME ๋ ์ฝ๋๊ฐ ๋ฑ๋ก๋๋ค. ๊ฐ์ ๋ค์์คํ์ด์ค์ ํ๋๋ externalname-svc๋ผ๋ ์ด๋ฆ๋ง์ผ๋ก ์ธ๋ถ DB์ ์ ๊ทผํ ์ ์๊ณ , ์ธ๋ถ DB์ ๋๋ฉ์ธ์ด ๋ฐ๋๋ฉด ์ด ๋งค๋ํ์คํธ์ externalName ํ ์ค๋ง ๊ณ ์น๋ฉด ๋๋ค.
CNAME ๋ ์ฝ๋๋ ๋๋ฉ์ธ์ ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ๊ฐ๋ฆฌํค๋ ๋ณ๋ช
์ด๋ค. ๊ฐ์ ์๋ฆฌ์์ ๋๋ฉ์ธ์ IP๋ก ์ง์ ํด์ํด ์ฃผ๋ ๊ฒ์ A ๋ ์ฝ๋์ธ๋ฐ, ExternalName์ด ๋ง๋๋ ๊ฒ์ IP๊ฐ ์๋๋ผ ๋๋ฉ์ธ์ด๋ผ๋ ์ ์์ ํญ์ CNAME์ด๋ค. ๋ฐ๋ผ์ externalName ๊ฐ์๋ IP ์ฃผ์๋ฅผ ๋ฃ์ ์ ์์ผ๋ฉฐ, ๋ฐ๋์ DNS๋ก ํด์ ๊ฐ๋ฅํ ๋๋ฉ์ธ์ด์ด์ผ ํ๋ค.
