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 μ‹œμΌœ 쀌


γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€γ€€ κ°μ‚¬ν•©λ‹ˆλ‹€.