Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Create an External Load Balancer
์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ์์ฑํ๊ธฐ
์ด ๋ฌธ์๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ดํ์ฌ ์ค๋ช ํ๋ค.
์๋น์ค๋ฅผ ์์ฑํ ๋, ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ์ ํด๋ฌ์คํฐ ๋ ธ๋์ ์ฌ๋ฐ๋ฅธ ํฌํธ๋ก ํธ๋ํฝ์ ์ ์กํ ์ ์๋๋ก ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ IP ์ฃผ์๋ฅผ ์ ๊ณตํ๋ค. ํด๋ฌ์คํฐ๊ฐ ์ง์๋๋ ํ๊ฒฝ๊ณผ ์ฌ๋ฐ๋ฅธ ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์ ์ ๊ณต์ ํจํค์ง ๊ตฌ์ฑ์ผ๋ก ์คํ๋๋ ๊ฒฝ์ฐ.
๋ํ, ์๋น์ค ๋์ ์ธ๊ทธ๋ ์ค(Ingress) ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ธํ ์ฌํญ์ ์ธ๊ทธ๋ ์ค(Ingress) ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํด๋ฌ์คํฐ๋ ๋ฐ๋์ ํด๋ผ์ฐ๋ ๋๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ๊ตฌ์ฑ์ ์ง์ํ๋ ํ๊ฒฝ์์ ์คํ ์ค์ด์ด์ผ ํ๋ค.
์๋น์ค ์์ฑ
๋งค๋ํ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์์ฑํ๊ธฐ
์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ๊ธฐ ์ํด์, ์๋น์ค ๋งค๋ํ์คํธ์ ๋ค์์ ์ถ๊ฐํ๋ค.
type: LoadBalancer
๋งค๋ํ์คํธ๋ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
type: LoadBalancer
kubectl๋ฅผ ์ด์ฉํ์ฌ ์๋น์ค ์์ฑํ๊ธฐ
๋ํ, kubectl expose
๋ช
๋ น์ด์ --type=LoadBalancer
ํ๋๊ทธ๋ฅผ ์ด์ฉํด
์๋น์ค๋ฅผ ์์ฑํ ์ ์๋ค.
kubectl expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer
์ด ๋ช
๋ น์ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์
๋ ํฐ๋ก ์ฐธ์กฐํ๋ ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค.
(์ ์์์ ๊ฒฝ์ฐ, example
๋ก ๋ช
๋ช
๋
๋ํ๋ก์ด๋จผํธ(Deployment) ).
๋ช
๋ น์ค ์ต์
ํ๋๊ทธ๋ฅผ ํฌํจํ, ๋ ์์ธํ ๋ด์ฉ์
kubectl expose
๋ ํผ๋ฐ์ค ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
IP ์ฃผ์ ์ฐพ๊ธฐ
kubectl
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด ์๋น์ค ์ ๋ณด๋ฅผ ์ป์ด,
์์ฑ๋ ์๋น์ค์ ๊ดํ IP ์ฃผ์๋ฅผ ์ฐพ์ ์ ์๋ค.
kubectl describe services example-service
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
Name: example-service
Namespace: default
Labels: app=example
Annotations: <none>
Selector: app=example
Type: LoadBalancer
IP Families: <none>
IP: 10.3.22.96
IPs: 10.3.22.96
LoadBalancer Ingress: 192.0.2.89
Port: <unset> 8765/TCP
TargetPort: 9376/TCP
NodePort: <unset> 30593/TCP
Endpoints: 172.17.0.3:9376
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
๋ก๋ ๋ฐธ๋ฐ์์ IP ์ฃผ์๋ LoadBalancer Ingress
์์ ๋ํ๋๋ค.
์ฐธ๊ณ :
๋ง์ฝ ์๋น์ค๊ฐ Minikube์์ ์คํ๋๊ณ ์๋ค๋ฉด, ์๋์ ๋ช ๋ น์ ํตํด ํ ๋น๋ IP ์ฃผ์์ ํฌํธ๋ฅผ ์ฐพ์ ์ ์๋ค.
minikube service example-service --url
ํด๋ผ์ด์ธํธ ์์ค IP ๋ณด์กดํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ์ปจํ
์ด๋์ ๋ณด์ด๋ ์์ค IP๋ ํด๋ผ์ด์ธํธ์ ์๋ ์์ค IP๊ฐ ์๋๋ค.
ํด๋ผ์ด์ธํธ์ IP๋ฅผ ๋ณด์กดํ ์ ์๋๋ก ํ๋ ค๋ฉด,
์๋์ ์๋น์ค .spec
ํ๋ ๊ตฌ์ฑ์ ๋ฐ๋ฅธ๋ค.
.spec.externalTrafficPolicy
- ์ด ์๋น์ค๊ฐ ์ธ๋ถ ํธ๋ํฝ์ ๋ ธ๋-๋ก์ปฌ ๋๋ ํด๋ฌ์คํฐ-์ ์ฒด ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค. ๋ ๊ฐ์ง ์ต์ ์ด ์๋ค.Cluster
(๊ธฐ๋ณธ) ๊ทธ๋ฆฌ๊ณLocal
.Cluster
๋ ํด๋ผ์ด์ธํธ ์์ค IP๋ฅผ ๊ฐ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ ธ๋์ ๋ํ ๋ ๋ฒ์งธ ํ(hop)์ ๋ฐ์์ํฌ ์ ์์ง๋ง, ์ ์ฒด์ ์ธ ๋ถํ ๋ถ์ฐ์์ ์ด์ ์ด ์๋ค.Local
์ ํด๋ผ์ด์ธํธ ์์ค IP๋ฅผ ๋ณด์กดํ๊ณLoadBalancer
์NodePort
ํ์ ์ ์๋น์ค์์ ๋ ๋ฒ์งธ ํ(hop) ๋ฐ์์ ํผํ ์ ์์ง๋ง, ํธ๋ํฝ ๋ถ์ฐ์ด ๋ถ๊ท ํ์ ์ธ ์ ์ฌ์ ์ธ ์ํ์ด ์๋ค..spec.healthCheckNodePort
- ์๋น์ค๋ฅผ ์ํ ํฌ์ค ์ฒดํฌ ๋ ธ๋ ํฌํธ(์ ์ ํฌํธ ๋ฒํธ)๋ฅผ ์ง์ ํ๋ค.healthCheckNodePort
๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ์๋น์ค ์ปจํธ๋กค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ๋ ธํธ ํฌํธ ๋ฒ์์์ ํฌํธ๋ฅผ ํ ๋นํ๋ค. API ์๋ฒ ๋ช ๋ น์ค ํ๋๊ทธ--service-node-port-range
๋ฅผ ์ค์ ํ์ฌ ํด๋น ๋ฒ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ์๋น์คtype
์ดLoadBalancer
์ด๊ณexternalTrafficPolicy
๋ฅผLocal
๋ก ์ค์ ํ ๊ฒฝ์ฐ, ์๋น์ค๋healthCheckNodePort
๊ฐ ์ง์ ๋์๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ค์ ์ ์ด์ฉํ๋ค.
์๋น์ค ๋งค๋ํ์คํธ์์ externalTrafficPolicy
๋ฅผ Local
๋ก ์ค์ ํ๋ฉด ์ด ๊ธฐ๋ฅ์ด ์๋ํ๋ค.
์์:
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer
์์ค IP๋ฅผ ๋ณด์กดํ ๋ ์ฃผ์์ฌํญ ๋ฐ ์ ํ ์ฌํญ
์ผ๋ถ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๋น์ค์์๋ ๋์๋ณ๋ก ๋ค๋ฅธ ๊ฐ์ค์น๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ๋์์ ๊ฐ์ค์น๋ ๋ ธ๋๋ก ์ ์กํ๋ ํธ๋ํฝ์ ์ธก๋ฉด์์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ํธ๋ํฝ์ ์๋ก ๋ค๋ฅธ ํ๋ ๊ฐ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ๋์ง ์๋๋ค. ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ ๊ฐ ๋ ธ๋์์ ๋์์ผ๋ก ์ฌ์ฉ๋๋ ํ๋์ ๊ฐ์๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ค.
์๋น์คํ๋๊ฐ์ << ๋
ธ๋๊ฐ์
์ด๊ฑฐ๋ ์๋น์คํ๋๊ฐ์ >> ๋
ธ๋๊ฐ์
์ธ ๊ฒฝ์ฐ์์
๊ฐ์ค์น ์์ด๋ ๊ฑฐ์ ๊ท ๋ฑํ ๋ถํฌ๋ฅผ ๋ณผ ์ ์๋ค.
๋ด๋ถ ํ๋ ๊ฐ ํธ๋ํฝ์ ClusterIP
์๋น์ค์์์ ๋น์ทํ๊ฒ ๋ชจ๋ ํ๋์์ ๋์ผํ ํ๋ฅ ๋ก IP ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ๋น์ง(Garbage) ์์ง ๋ก๋ ๋ฐธ๋ฐ์
Kubernetes v1.17 [stable]
์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๊ด๋ จ ์๋ ๋ก๋๋ฐธ๋ฐ์ ๋ฆฌ์์ค๋ type
์ด LoadBalancer
์ธ
์๋น์ค๊ฐ ์ญ์ ๋ ํ ์ฆ์ ์ ๋ฆฌ๋์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ๊ด๋ จ ์๋น์ค๊ฐ ์ญ์ ๋ ํ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๊ฐ ๊ณ ์๊ฐ ๋๋ ์ฝ๋ ์ผ์ด์ค๊ฐ ๋ค์ํ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์๋น์ค ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ํ Finalizer Protection
์ด ๋์
๋์๋ค.
Finalizer
๋ฅผ ์ฌ์ฉํ๋ฉด, ์๋น์ค ๋ฆฌ์์ค๋ ๋ก๋๋ฐธ๋ฐ์ ๊ด๋ จ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋ ๋๊น์ง ์ญ์ ๋์ง ์๋๋ค.
ํนํ ์๋น์ค์ type
์ด LoadBalancer
์ธ ๊ฒฝ์ฐ
์๋น์ค ์ปจํธ๋กค๋ฌ๋ service.kubernetes.io/load-balancer-cleanup
์ด๋ผ๋ ์ด๋ฆ์ finalizer
๋ฅผ ๋ถ์ธ๋ค.
finalizer
๋ (ํด๋ผ์ฐ๋) ๋ก๋ ๋ฐธ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ ํ์๋ง ์ ๊ฑฐ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค ์ปจํธ๋กค๋ฌ ์ถฉ๋(crash)๊ณผ ๊ฐ์ ์ฝ๋ ์ผ์ด์ค์์๋
๋ก๋ ๋ฐธ๋ฐ์ ๋ฆฌ์์ค๊ฐ ๊ณ ์๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ์ ๊ณต์
์ค์ํ ์ ์ ์ด ๊ธฐ๋ฅ์ ์ํ ๋ฐ์ดํฐ ๊ฒฝ๋ก๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ธ๋ถ์ ๋ก๋ ๋ฐธ๋ฐ์์์ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค.
์๋น์ค์ type
์ด LoadBalancer
๋ก ์ค์ ๋ ๊ฒฝ์ฐ,
์ฟ ๋ฒ๋คํฐ์ค๋ type
์ด ClusterIP
์ธ ๊ฒฝ์ฐ์ฒ๋ผ ๋๋ฑํ ๊ธฐ๋ฅ์ ํด๋ฌ์คํฐ ๋ด์ ํ๋์ ์ ๊ณตํ๊ณ
๊ด๋ จ ์ฟ ๋ฒ๋คํฐ์ค ํ๋๋ฅผ ํธ์คํ
ํ๋ ๋
ธ๋์ ๋ํ ํญ๋ชฉ์ผ๋ก (์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ) ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ํ์ฅํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์, (ํ์ํ ๊ฒฝ์ฐ) ํฌ์ค ์ฒดํฌ ๋ฐ (ํ์ํ ๊ฒฝ์ฐ) ํจํท ํํฐ๋ง ๊ท์น์ ์์ฑ์ ์๋ํํ๋ค.
ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ๋ก๋ ๋ฐธ๋ฐ์์ ๋ํ IP ์ฃผ์๋ฅผ ํ ๋นํ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์ด ํด๋น ์ธ๋ถ IP ์ฃผ์๋ฅผ ์ฐพ์ ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ๊ฐฑ์ ํ๋ค.
๋ค์ ๋ด์ฉ
- ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๊ฒฐํ๊ธฐ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผํ๊ธฐ
- ์๋น์ค์ ๋ํด ์์๋ณด๊ธฐ
- ์ธ๊ทธ๋ ์ค์ ๋ํด ์์๋ณด๊ธฐ