ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes scale-out 중 pod port에 대한 고민
    Kubernetes 2023. 3. 29. 16:28

    개요

    이번 프로젝트에서 서버를 kubernetes 환경에 배포하여 구축하고 있었다.

    부하가 많을 것을 예상하고 scale-out을 고려하고 있었는데

    spring boot의 jar 파일로 배포되는 서버는 포트가 기본적으로 8080이고

    포트 번호 8080으로 서버가 scale-out되면 포트가 중복되는 것이 아닌지 고민하게 되었다.

     

    다른 사람들과 고민했을 때는 포트가 중복될 수 있기 때문에 랜덤 포트가 지정되도록 설정을 해야된다고 하기도 했다.

    하지만 kubernetes 환경에서는 그럴 필요가 없었다.

     

    Kubernetes 네트워크

    service

     

    pod는 kubernetes에 올라갈 때 IP가 랜덤하게 지정되고 리스타트 때마다 또 변하기 때문에 엔드포인트를 고정하기 어렵다.

    게다가 여러 pod가 같은 애플리케이션으로써 작동할때 이 pod 간의 로드밸런싱도 필요하다.

    이때 Service가 이러한 문제점을 해결해준다.

    client나 다른 애플리케이션에서 특정 애플리케이션에 접근할 때, 서비스의 주소에 접근하면 로드밸런싱을 통해 하나의 pod로 할당된다.

     

    service type

    서비스는 IP 주소 할당 방식 과 연동 서비스 등에 따라 크게 4가지로 구분된다.

    • cluster IP
      • 디폴트 설정으로 서비스에 클러스터 IP (내부 IP)를 할당한다
      • 외부 IP를 할당한 것은 아니기 때문에 외부에서 접근이 불가능하다
    • Load Balancer
      • 클라우드 벤더에서 제공하는 방식
      • 외부 IP가 있는 로드 밸러서를 할당한다.
      • 외부에서도 접근 가능하다.
    • NodePort
      • 클러스터 IP로만 접근이 가능한 것이 아니라, 모든 노드의 IP와 port를 통해 접근 가능하다.
      • 예를 들어 nodePort를 30036으로 설정하면 모든 노드의 30036 포트로 서비스에 접근할 수 있다.
    • External name
      • 외부 서비스를 쿠버네티스 내부에서 호출하고자할 때 사용할 수 있다.

    Scale-out은 어떻게 이루어지는가?

    • 처음에는 pod 내에 여러 컨테이너가 동적으로 생겨서 같은 ip에 다른 port의 컨테이너가 여러개 생기는 줄 알았음
    • 찾아보니 하나의 service에 연결된 pod가 동적으로 생성되는 구조였고, pod의 ip가 service 내부 ip처럼 살짝 바뀜

    • 따라서 서버의 port는 고정시켜도 괜찮음
JackCokebb dev blog