์ด์ ํฌ์คํ ์์ ์ฟ ๋ฒ๋คํฐ์ค ๋ด์ ๊ฐ ํ๋๋ค์ ๋ค๋ฅธ IP์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์คํ๋๋ ๊ฒ์ ๋ณด์๋ค.
๊ฐ ํ๋๋ค์ ํต์ ์ TCP, UDP๋ฅผ ์ง์ํ๋ค. ํ์ง๋ง, ๊ฐ ํ๋๋ค์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์๋ ๋ฆฌ์์ค๋ค์ด๋ค.
ํ์ ์์๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ํ๋๋ฅผ ๊ต์ฒดํ๊ฑฐ๋, ์ฌ์คํํ๊ฑฐ๋ ๋ฑ๋ฑ.. ํ๋๊ฐ ๊ต์ฒด๋ ๋ ๋ง๋ค IP์ฃผ์๊ฐ ๋ฐ๋์ด๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ ํต์ ํด์ผํ๋ ํ๋๋ค์ ์ด๋ป๊ฒ ๋ค๋ฅธ ํ๋์ IP๋ฅผ ์ถ์ ํ ๊น?
1. Traffic Routing
์ฐ๋ฆฌ๊ฐ ํ์์ DNS์๋ฒ๋ฅผ ํตํด IP๋ฅผ ๋ฐ๋ฏ์ด, ์ฟ ๋ฒ๋คํฐ์ค ๋ด์๋ ์ ์ฉ DNS ์๋ฒ๊ฐ ์๋ค.
์ด DNS์๋ฒ๊ฐ ์๋น์ค ์ด๋ฆ๊ณผ IP ์ฃผ์๋ฅผ ๋์์์ผ ์ค๋ค.
์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ ์๋น์ค ์ด๋ฆ์ ์์๋ณด๊ธฐ ์ํด, YAMLํ์ผ์ ์ดํด๋ณด๊ฒ ๋ค.
- service.yaml
apiVersion: v1
kind: Service
metadata:
name: sleep-2
spec:
selector:
app: sleep-2
ports:
- port: 80
์ ์๋น์ค๋ ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ด์ฉํด์ sleep-2๋ผ๋ ํ๋์ ์ฐ๊ฒฐ์ ๊ฐ๋๋ค.
ํด๋น ์๋น์ค๋ ํด๋ฌ์คํฐ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ IP์ฃผ์๋ฅผ ๊ฐ๊ณ ์๋ค.
ํต์ ์ ์ํ IP๋ฅผ ์ฐ๊ฒฐํด์ฃผ์๋ค.
2. ํด๋ฌ์คํฐ IP Cluster IP
์ง์ ์ ์คํํ๋ ์๋น์ค๋ฅผ ์กฐํํด๋ณด๊ฒ ๋ค.
$ kubectl get svc {ํ๋์ด๋ฆ}
์ฌ๊ธฐ์ CLUSTER-IP๋ผ๊ณ ๋ณด์ด๋ ์ฃผ์๊ฐ ๋ณด์ด๋๋ฐ, ์ด ํด๋ฌ์คํฐ IP๋
์๋น์ค์ ์ ํ (kind : Service)์ด ๊ฐ์ง๋ ๊ธฐ๋ณธ์ ์ธ IP์ด๋ค.
์ด ํด๋ฌ์คํฐ IP๋ ํด๋ฌ์คํฐ ๋ด์์๋ง ์ ํจํ๋ฉฐ, ๋ค๋ฅธ ํด๋ฌ์คํฐ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
apiVersion: v1
kind: Service
metadata:
name: numbers-api
spec:
ports:
- port: 80
selector:
app: numbers-api
type: ClusterIP
3. ๋ก๋๋ฐธ๋ฐ์
์ฟ ๋ฒ๋คํฐ์ค ๋ด์๋ ๋ก๋๋ฐธ๋ฐ์๊ฐ ์กด์ฌํ๋ค.
๋ก๋๋ฐธ๋ฐ์๋ ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ ๋ด์ ํธ๋ํฝ์ ์ ๋ฌํ๋ค.
apiVersion: v1
kind: Service
metadata:
name: numbers-web
spec:
ports:
- port: 8080 # Listen
targetPort: 80 # Delivery
selector:
app: numbers-web
type: LoadBalancer # ๋ก๋๋ฐธ๋ฐ์
์์ ๊ฐ์ด ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ค์ ํ๋ฉด 8080ํฌํธ์ ํธ๋ํฝ์ 80ํฌํธ์ ํ๋๋ก ์ ๋ฌํ๋ค.
๋ฐ๋ผ์ ๋ฐ๋ก ํฌํธํฌ์๋ฉ์ ์ค์ ํ์ง ์์๋ ์น์ฑ์ ์ ๊ทผํ ์ ์๊ฒ๋๋ค.
์๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ ์ฉํ ๋ชจ์ต์ด๋ค.
4. ๋ก์ปฌ ๋๋ฉ์ธ
์ต์คํฐ๋ ๋ค์(External Name) ์๋น์ค๋ ํน์ ํ๋๋ฅผ ์ธ๋ถ ๋๋ฉ์ธ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์๋น์ค์ด๋ค.
apiVersion: v1
kind: Service
metadata:
name: numbers-api
spec:
type: ExternalName
externalName: raw.githubusercontent.com
์ต์คํฐ๋ ๋ค์ ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด, ํด๋น api๋ฅผ ์กฐํํ์ ๋ ์ฟ ๋ฒ๋คํฐ์ค DNS ์๋ฒ๊ฐ ์ต์คํฐ๋ ๋ค์์ ๋ฐํํ๊ฒ ๋๋ค.
ํ์ง๋ง, ์ปดํฌ๋ํธ๊ฐ HTTP ํ๋กํ ์ฝ์ ์์ฒญํ๋ค๋ฉด ๋๋ฉ์ธ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ CORS์ค๋ฅ๊ฐ ๋๋ ๋ฏ ํ๋ค.
5. ๋ค์์คํ์ด์ค (Name Space)
๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค๋ ๋ค์์คํ์ด์ค ์์ ์กด์ฌํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค์๋ default ๋ค์์คํ์ด์ค๊ฐ ์กด์ฌํ๋ฉฐ, ์ปค์คํ ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ์ฌ ์ฌ๋ฌ ๋ฆฌ์์ค๋ค์ ๋ฌถ์ ์ ์๋ค.
# ๋ค์์คํ์ด์ค ๋ฆฌ์์ค ์กฐํ
$ kubectl get svc --namespace {๋ค์์คํ์ด์ค ์ด๋ฆ}
# default ๋ค์์คํ์ด์ค ๋ฆฌ์์ค ์กฐํ
$ kubectl get svc --namespace default
๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด ๋ณด์์ ํด์น์ง ์์ผ๋ฉด์ ํด๋ฌ์คํฐ๋ฅผ ๋ถํ ํ ์ ์๋ค.
์ด ํฌ์คํ ์์ ์ค์ํ ์ ์, ๊ฐ ํ๋๋ค์ ๊ฐ์์ IP๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ(๊ฐ์), ์ด IP ์ฃผ์๋ฅผ ํตํด TCP/UDP ํ๋กํ ์ฝ์ ํตํด ํต์ ํ๋ค. ์ด IP๋ ์๋น์ค๊ฐ DNS๋ก ์ ๊ณตํ์ฌ ๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ ์ ์๋ค๋ ์ ์ด๋ค.
'DevOps > Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes] 2. Pod, Deployment, YAML (0) | 2023.09.23 |
---|---|
[Kubernetes] 1-1. Docker๋ก ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (0) | 2023.09.23 |
[Kubernetes] 1. ์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ์ด ๊ฐ๋ (0) | 2023.09.23 |