2024년 1월 25일

출처: 쿠버네티스 교과서(길벗)

파드는 쿠버네티스에서 애플리케이션을 구성하는 기본 요소

파드들이 제거되서 다시 대체되면 파드의 IP주소는 변경된다는 문제가 있다. 쿠버네티스는 서비스(service)에 어드레스 디스커버리(address discovery) 기능을 제공하여 이 문제를 해결하였다.

서비스는 파드에서 들고나는 통신 트래픽의 라우팅을 맡는 유연한 리소스다. 이 통신 트래픽은 클러스터 외부에서 파드로 전달도는 것과 ㅍ드에서 클러스터 외부로 전달되는 것 모두를 포함

3.1. 쿠버네티스 내부의 네트워크 트래픽 라우팅

파드는

  1. 쿠버네티스에서 부여한 IP 주소를 가진 가상 환경
  2. 다른 컨트롤러 객체에 의해 생애 주기가 관장되고 ‘쓰고 버리는’ 리소스다.

한 파드가 다른 파드와 통신하는 데는 IP 주소가 필요하다. 이 때 두가지 문제가 발생.

  1. 파드가 새로운 파드로 교체될 때 IP주소가 바뀌는 것
  2. 교체된 파드의 새로운 IP 주소를 찾기 어렵다는 점

새로운 IP를 찾으려면 쿠버네티스 API 통해서만 파악할 수 있다.

실습1

파드가 두 개 있다면 서로 통신할 수 있다. 하지만 먼저 서로의 IP 주소를 알아야한다.

# 각각 파드 하나를 실행하는 두 개의 디플로이먼트를 생성
kubectl apply -f sleep/sleep1.yaml -f sleep/sleep2.yaml

apply 명령으로 한 번에 여러 개의 파일을 전달, 아무 기능 없는 두 개의 파드가 생성

# 두 번째 파드의 IP 주소를 확인
kubectl get pod -l app=sleep-2 --output jsonpath='{.items[0].status.podIP}'

JSONPath 질의는 sleep-2 파드의 IP 주소를 반환

# 같은 주소를 사용하여 두 번 째 파드에서 첫 번째 파드로 ping 호출
kubectl exec deploy/sleep-1 -- ping -c 2 $(kubectl get pod -l app=sleep-2 --output jsonpath='{.items[0].status.podIP}')

exec 명령의 입력에 위 명령어의 리턴값을 전달 결과적으로 ping 명령에 sleep-2 파드의 IP 주소 전달

ping 명령이 정상적으로 동작한 것으로 보면 파드는 IP 주소를 통해 서로 통신