본문 바로가기
기술, 개발/DevOps

Rocky Linux에서 Kubernetes 설치하기 Part 4: 서비스 배포와 온프레미스 환경의 한계

by Jaejin Sim 2025. 9. 18.
반응형

지금까지 Kubernetes 클러스터를 성공적으로 구축하고 워커 노드를 추가했습니다. 하지만 이 상태로는 클러스터 외부에서 우리가 배포한 애플리케이션에 접근할 방법이 없습니다. 이번 파트에서는 **Kubernetes 서비스(Service)**의 개념을 이해하고, VM/온프레미스 환경에서 LoadBalancer를 사용할 때 마주하는 한계점에 대해 알아보겠습니다.

1. 왜 '서비스(Service)'가 필요한가요? 🤔

Kubernetes에서 실행되는 애플리케이션의 단위인 파드(Pod)는 임시적입니다. 파드가 다시 시작되거나 업데이트되면 IP 주소가 계속 변경됩니다. 만약 여러 파드들이 서로 통신해야 할 때, 이 변경되는 IP를 계속 추적하는 것은 거의 불가능합니다.

이 문제를 해결하기 위해 Kubernetes는 서비스(Service) 라는 개념을 제공합니다.

  • 서비스는 여러 파드 그룹에 대한 **고정된 단일 진입점(Single Point of Entry)**을 만들어 줍니다.
  • 서비스는 자신만의 **고유하고 변하지 않는 IP 주소(Cluster IP)**를 가집니다.
  • 파드의 IP가 변경되더라도, 서비스의 IP는 그대로이므로 우리는 서비스의 주소만 바라보면 안정적으로 통신할 수 있습니다.

2. 클러스터 내부 통신: ClusterIP 서비스

ClusterIP는 서비스의 가장 기본적인 유형으로, 클러스터 내부에서만 접근 가능한 고유 IP를 할당합니다. 클러스터 내의 파드끼리 통신할 때 주로 사용됩니다.

아래는 app: sleep-2 라는 레이블(label)을 가진 모든 파드를 찾아 80번 포트로 연결해주는 서비스 예시입니다.

# service-clusterip-example.yaml
apiVersion: v1
kind: Service
metadata:
  name: sleep-2 # 이 서비스의 이름이 클러스터 내에서 DNS 이름처럼 사용됩니다.
spec:
  selector:
    app: sleep-2 # 'app' 레이블의 값이 'sleep-2'인 모든 파드를 대상으로 합니다.
  ports:
    - port: 80       # 서비스가 받을 포트
      targetPort: 80 # 트래픽을 전달할 파드의 포트

3. 외부 트래픽 연결과 그 한계: LoadBalancer 서비스

그렇다면 클러스터 외부의 사용자가 애플리케이션에 접근하게 하려면 어떻게 해야 할까요? 이때 사용하는 것이 바로 LoadBalancer 타입의 서비스입니다.

# service-loadbalancer-example.yaml
apiVersion: v1
kind: Service
metadata:
  name: numbers-web
spec:
  ports:
    - port: 8080      # 서비스가 외부에 노출할 포트
      targetPort: 80  # 트래픽이 전달될 파드의 포트
  selector:
    app: numbers-web
  type: LoadBalancer # 외부 트래픽을 받을 수 있는 서비스로 지정

하지만 이 서비스를 VirtualBox 같은 VM/온프레미스 환경에서 생성하고 확인해보면, EXTERNAL-IP가 할당되지 않고 계속 <pending> 상태에 머물러 있는 것을 볼 수 있습니다.

[vagrant@k8s-master ~]$ kubectl get svc numbers-web

NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)
numbers-web   LoadBalancer   10.99.95.44   <pending>     8080:31732/TCP

4. 왜 EXTERNAL-IP는 <pending>일까?

이처럼 VM/온프레미스 환경에서는 LoadBalancer 타입의 서비스를 만들어도 외부 IP가 할당되지 않습니다. 이는 AWS, GCP와 같은 클라우드 플랫폼과 달리, 외부 IP를 자동으로 할당하고 연결해주는 로드 밸런서 인프라가 없기 때문입니다.

많은 온라인 강의에서는 이 시점부터 로드 밸런서 기능이 자동으로 제공되는 클라우드 환경(예: AWS EKS)으로 전환하여 실습을 이어갑니다.

만약 현재의 개인 PC 환경에서 이 LoadBalancer 기능을 직접 구현하고 싶다면, MetalLB와 같은 베어메탈(Bare-metal) 로드 밸런서 솔루션을 별도로 설치하고 설정하는 과정이 필요합니다.

반응형