7. 컨ν μ΄λ Service
μ΄μ μ λ°°μ΄ λ΄μ©
- Application Pod μμ± (Deployment)
- Podμ Controller κΈ°λ₯μ μΆκ°νμ¬, μ°λ¦¬κ° μνλ κ°μκ° λ³΄μ₯λλ©΄μ μ€νλλλ‘ μ§μνλ μ¬λ¬κ°μ§ λ°©λ²μ λ°°μ γγγγγγγγγγ
μ΄λ²μ λ°°μΈ λ΄μ©μ?
- Service
- Service κ°λ
- Serviceμ 4κ°μ§ νμ
- Service μ€μ΅
- Headless Serviceμ Kube Proxy γγγγγγγγγγ
Service
- API μλΉμ€
- βμΏ λ²μΌ nginx μΉμλ² 3κ° webuiμ΄λ¦μΌλ‘ μ€νν΄μ€!β
- λ°λΌμ μ€νμ€μΈ podμκ² μμ μ κ· λ±νκ² λΆμ°μμΌ μ£Όλ κ²μ΄ νμ
Service κ°λ
- λμΌν μλΉμ€λ₯Ό μ 곡νλ pod κ·Έλ£Ήμ λ¨μΌ μ§μ μ μ μ 곡
- cluster ip (=virtual ip) μμ±
- μμ±λ cluster ipλ 3κ°μ podλ‘ κ· λ±νκ² λΆμ°μμΌ μ°κ²°
- λ€μ λ§ν΄, λμΌν podλ₯Ό λ¬Άμ΄ νλμ λ¨μΌ μ§μ μ μΈ virtual ipλ₯Ό μμ± μν€λ κ²
Service νμ
- νμ¬λ 4κ°μ§ νμ
μ§μ
- 1) Cluster IP (Default)
- 2) NodePort
- 3) LoadBalancer
- 4) ExternalName
1. Cluster IP (Default)
- serviceμ κ°μ₯ κΈ°λ³Έμ μΈ μν μν
- pod κ·Έλ£Ήμ λ¨μΌ μ§μ μ (virtual ip)μμ±
2. NodePort
- Nodeμ μΈλΆμμ μ μ κ°λ₯ν ν¬νΈ μ§μ
- μ¦ Node μ€ν
- client μ¬μ©μκ° node:portλ‘ connection μμ² κ°λ₯
- external μ±λ μ€ν
- μΈλΆμμ μ κ·Ό κ°λ₯
3. LoadBalancer
- ν΄λΌμ°λ μΈνλΌ μ€νΈλμ³(AWS, Azure, GCP λ±)λ μ€νμ€ν ν΄λΌμ°λμ μ μ©
- Loadbalancerλ₯Ό μλμΌλ‘ νλ‘λΉμ Ό νλ κΈ°λ₯ μ§μ
4. ExternalName
- cluster μμμ μΈλΆμμ μ μ μ μ¬μ©ν λλ©μΈμ λ±λ‘ν΄μ μ¬μ©
- cluster λλ©μΈμ΄ μ€μ μΈλΆ λλ©μΈμΌλ‘ μΉνλμ΄ λμ
- μ¦ domain naming service
Service μ΄μ 리
- Service APIλ λμΌ λͺ©μ μ μ ν리μΌμ΄μ μ λ¨μΌ μ§μ μ μ λ§λ€μ΄ μ£Όλ κΈ°λ₯μ΄λ€.
- 4κ°μ§ νμ
μ΄ μ§μλλ€.
- 1) clusterip : κ°μ₯ κΈ°λ³Έμ΄ λλ pod λ¨μΌ μ§μ μ μΈ cluster ip
- 2) nodeport : μ΄κ² nodeλ‘ νμ₯
- 3) loadbalancer : μ΄κ²μ ν΄λ¬μ€ν° μΈλΆ loadbalancerλ‘ νμ₯
- 4) externalname : dns μλΉμ€
Service μ€μ΅
1. Cluster IP
- master nodeμμ deploy μ€ν
cat deply-nginx.yaml
- master nodeμμ deploy μ€ν
kubectl create -f deploy-nginx.yaml
- μ€ν μ€μΈ pod νμΈ
kubectl get pod -o wide
- master nodeμμ service μ€ν
cat clusterip-nginx.yaml
- master nodeμμ service μ€ν
kubectl create -f clusterip-nginx.yaml
- μ€ν μ€μΈ service νμΈ
kubectl get service
- μ€νμ€μΈ service μμΈ νμΈ
kubectl descrive svc clusterip-service
- curl λͺ
λ Ήμ΄λ‘ νμΈ
curl 10.100.100.100
- podμ μ μνμ¬ /usr/share/html/index.html λ³κ²½
kubectl exec <POD NAME> -it -- /bin/bash
2. Nodeport
- μ΄μ μ€νν service μμ
kubectl delete service --al
- master nodeμμ service μ€ν
cat nodeport-nginx.yaml
- master nodeμμ service μ€ν
kubectl create -f nodeport-nginx.yaml
- μ€ν μ€μΈ service νμΈ
kubectl get svc
- node 1μ μ μ
ssh node1
- μ΄λ € μλ port νμΈ
netstat -napt | grep 30200
- stationμ μλ client μ¬μ©μκ° μλ¬΄λ° nodeμ μ μ μλ
curl 10.100.0.102:30200
3. Loadbalance
-
nodeportμ λΉκ΅
-
μ€μ μΈλΆ μ₯λΉμ IP Addressκ° μ κΈ°μ μ λ€μ΄κ°
4. ExternalName
- dns μλΉμ€
curl externalname-svs.default.svc.cluster.local
Headless Service μ Kube Proxy
Headless Service
- clusterip = NoneμΈ κ²½μ°
- podλ€μ endpointλ₯Ό dns reserving service λ°μ μ μλλ‘ μ§μν΄ μ£Όλ κ²
Kube Proxy
- μλΉμ€ μμ± μ ip table rule μμ± λ° κ΄λ¦¬
- μλΉμ€ νμ μ€ nodeport κ²½μ°, nodeportλ₯Ό litsen λκΈ°, ν΄λΌμ΄μΈνΈκ° μ μνκ² λλ©΄ connection μμΌ μ€
γγγγγγγγγγ γγγγγγγγγγ γγγγγγγγγγ γγγγγγγγγγ γγγγγγγγγγ γγγγγγγγγγ κ°μ¬ν©λλ€.