๋ชฉ์ฐจ
Services
Service๋ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํจ
(Users - Frontend - Backend - ์ธ๋ถ DB Source)
ย External Networking
์๋์ ๊ฐ์ ์
์
์ผ ๋ ์ธ๋ถ ์ฌ์ฉ์๊ฐ ์นํ์ด์ง์ ์ ์ํ๋ ๋ฐฉ๋ฒ
Client IP | 192.168.1.10 |
Node IP | 192.168.1.2 |
Internal Pod Network | 10.244.0.0 |
Pod IP | 10.244.0.2 |
1.
ssh๋ฅผ ํตํด Node ์ ๊ทผ ํ curl์ ์ค curl http://10.244.0.2
Node์ GUI๊ฐ ์๋ค๋ฉด ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ก ์ ๊ทผ
2.
Kubernetes Service๋ฅผ ์ฌ์ฉ โ Node IP๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ curl http://192.168.1.2:30008
ย Service Types
โข
NodePort: ๋ด๋ถ ํฌํธ๋ฅผ ๋
ธ๋์ ํฌํธ์ ์ ๊ทผํ ์ ์๊ฒ ํจ (Node Port๋ฅผ Listenํ๊ณ ํด๋น ํฌํธ์ ์์ฒญ์ ์ฐ๊ฒฐ๋ Pod์ Port๋ก ์ ๋ฌํจ)
โข
ClusterIP: ํด๋ฌ์คํฐ ๋ด์ ๊ฐ์ IP๋ฅผ ๋ง๋ค์ด ๋ค๋ฅธ ์๋น์ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํจ (ํ๋ก ํธ์๋ ์๋ฒ-๋ฐฑ์๋ ์๋ฒ)
โข
LoadBalancer: ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๋ ๋ฐธ๋ฐ์์ ํ๋ก๋น์ ํจ
ย NodePort
์๋น์ค๊ฐ ๋
ธ๋์ ํฌํธ๋ก๋ถํฐ Pod์ ๋งคํํด ์ค. NodePort๋ 30,000~32,767์ ์ ํจํ ๋ฒ์ ๋ด์ ์กด์ฌ
ํฌํธ ์ฉ์ด๋ค์ ์๋น์ค์ ๊ด์ ์ผ๋ก ์๊ฐ
โข
TargetPort: Pod์ ํฌํธ
โข
Port: Servicedml ํฌํธ
โข
NodePort: ๋
ธ๋ ์์ฒด์ ํฌํธ (์ธ๋ถ์์ Pod์ ์ก์ธ์คํ๋๋ฐ ์ฌ์ฉํ๋ ํฌํธ)
# service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- targetPort: 80 # ์ ์ํ์ง ์์ ์ port์ ๊ฐ๋ค๊ณ ์ฌ๊ฒจ์ง
port: 80 # ํ์ ํ๋
nodePort: 30008 # ์ ์ํ์ง ์์ ์ ๋๋ค ํ ๋น
selector: # 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ์ฑ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค Pod์ ์ฐ๊ฒฐํ๋์ง ๊ธฐ์
app: myapp
type: front-end
YAML
๋ณต์ฌ
ย NodePort - Multi-Pod in One Node
๊ณ ๊ฐ์ฉ์ฑ๊ณผ ๋ถํ ๋ถ์ฐ์ ๋ชฉ์ ์ผ๋ก Pod๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฐ์ Label์ ๊ฐ์ง
์ด ๊ฒฝ์ฐ ์๋น์ค๊ฐ ์์ฑ๋๋ฉด Label์ด ์๋ ๋ชจ๋ Pod๋ฅผ Endpoint๋ก ์ ํํด ์ธ๋ถ ์์ฒญ์ ์ ๋ฌํจ
์ด ๋ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์์์
โข
Algorithm: Random
โข
SessonAffinity: Yes
ย NodePort - Multi-Pod in Multi-Node
ํด๋ฌ์คํฐ ๋ด ๋ถ๋ฆฌ๋ ๋
ธ๋์ Pod๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ๋
ธ๋์ ๊ฑธ์ณ Service๋ฅผ ์์ฑํ๊ณ TargetPort๋ฅผ ๊ฐ์ NodePort๋ก ๋งคํํจ
ํด๋ฌ์คํฐ ๋ด ๋
ธ๋์ IP์ ๋์ผํ Port๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ก์ธ์ค ๊ฐ๋ฅ
curl http://192.168.1.2:30008
curl http://192.168.1.3:30008
curl http://192.168.1.4:30008
ย ClusterIP
์ ํ๋ฆฌ์ผ์ด์
์ ์๋น์ค๋ ๊ณ์ธต ๊ฐ์ ์ฐ๊ฒฐ์ ํ๋ฆฝ
โข
Pod๋ ๋ชจ๋ ํ ๋น๋ IP address๊ฐ ์์ง๋ง ์ ์ ์ ์๋๊ธฐ ๋๋ฌธ์ ์ฑ ๊ฐ ๋ด๋ถ ํต์ ์์ ์ด IP ์ฃผ์๋ง ์์กดํ ์ ์์
โข
๊ฐ์ Pod๋ฅผ ํ๋๋ก ๋ฌถ์ด ๋ค๋ฅธ Pod๊ฐ ํด๋น ์๋น์ค๋ก ์ก์ธ์คํ ์ ์๋ ๋จ์ผ ์ธํฐํ์ด์ค ์ ๊ณต
์์ฒญ์ ๋ฌด์์๋ก ํ๋์ Pod๋ก ์ ๋ฌ
โข
๋ค๋ฅธ ์๋น์ค ๊ฐ์ ํต์ ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ, ๊ฐ ๊ณ์ธต์ ํ์ํ๋๋ก ํ์ฅ ๋๋ ์ด๋์ด ๊ฐ๋ฅ
โข
๊ฐ๊ฐ์ ์๋น์ค๋ ํด๋ฌ์คํฐ ๋ด๋ถ์์ IP์ ๊ทธ์ ํ ๋น๋ ์ด๋ฆ์ ๊ฐ์ง๋ฉฐ, Pod๋ ์๋น์ค์ ์ ๊ทผํ ๋ ๊ทธ ์ด๋ฆ์ ์ฌ์ฉํจ
# service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: back-end
spec:
type: ClusterIP # ์ ์ํ์ง ์์ ์ ์๋์ผ๋ก ClusterIP๋ก ์ค์ ๋จ
ports:
- targetPort: 80 # ์ ์ํ์ง ์์ ์ port์ ๊ฐ๋ค๊ณ ์ฌ๊ฒจ์ง
port: 80 # ํ์ ํ๋
selector: # 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ์ฑ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค Pod์ ์ฐ๊ฒฐํ๋์ง ๊ธฐ์
app: myapp
type: back-end
YAML
๋ณต์ฌ
ย LoadBalancer
NodePort๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถ์์ Pod๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง ๋จ์ผํ๋ ๋๋ฉ์ธ์ผ๋ก ์ ๊ทผ์ ์ํ ๊ฒฝ์ฐ, LoadBalancer๋ฅผ ์ฌ์ฉํจ
โข
LoadBalancer Type์ AWS, GCP, Azure์ ๊ฐ์ ํด๋ผ์ฐ๋ ์ ๊ณต์
์ฒด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅ
โข
VirtualBox ๊ฐ์ ํ๊ฒฝ์์๋ LoadBalancer๋ก ํ์
์ง์ ์ ํ๋๋ผ๋ NodePort์ ๊ธฐ๋ฅ์ ํจ (๋ถํ๋ถ์ฐ์ด ์ด๋ค์ง์ง ์์)
# service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: LoadBalancer
ports:
- targetPort: 80 # ์ ์ํ์ง ์์ ์ port์ ๊ฐ๋ค๊ณ ์ฌ๊ฒจ์ง
port: 80 # ํ์ ํ๋
nodePort: 30008 # (Optional) LoadBalancer๊ฐ ์ง์๋์ง ์๋ ํ๋ซํผ์ ๊ฒฝ์ฐ NodePort๋ก ๋์ฒด๋จ
YAML
๋ณต์ฌ
(์ฐธ๊ณ ) LoadBalance Without LoadBalancer
LoadBalancer ํ์
์ ์ฌ์ฉํ์ง ์๊ณ ๋ถํ๋ถ์ฐ์ ํ๊ธฐ ์ํด์๋ ์ถ๊ฐ VM์ ์์ฑํ๊ณ HA Proxy๋ Nginx ๋ฑ์ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ค์น ๋ฐ ๊ตฌ์ฑํ์ฌ ํธ๋ํฝ์ ๋ผ์ฐํ
ํ๋ค.