Skip to content

Kubernetes LoadBalancer Service

Kubernetes에서 LoadBalancer Service는 외부 트래픽을 클러스터 내의 애플리케이션으로 분산시키는 데 사용됩니다. 이 Service 타입은 특히 클라우드 환경에서 유용하며, 클라우드 제공자가 제공하는 외부 로드 밸런서를 자동으로 프로비저닝하고 구성합니다.

LoadBalancer Service의 주요 특징

  • 외부에서 클러스터 내부의 특정 애플리케이션으로 직접 트래픽을 전송할 수 있게 합니다.
  • 클라우드 제공자의 로드 밸런서와 통합되어, 고가용성과 분산 처리를 제공합니다.
  • 클러스터 외부에 공개된 단일 진입점을 제공하여, 애플리케이션에 쉽게 접근할 수 있게 합니다.

LoadBalancer Service 사용 사례

웹 애플리케이션을 Kubernetes 클러스터에 배포했을 때, 인터넷에서 이 애플리케이션에 접근할 수 있도록 하려면 LoadBalancer Service를 사용할 수 있습니다. 이 Service는 외부 로드 밸런서를 생성하고, 이 로드 밸런서를 통해 외부 트래픽을 클러스터 내의 포드로 안정적으로 분산시킵니다.

YAML 파일 예시

LoadBalancer Service를 생성하기 위한 YAML 파일의 예시입니다.

yaml
apiVersion: v1
kind: Service
metadata:
  name: my-webapp-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: my-webapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

이 YAML 정의는 app=my-webapp 레이블을 가진 포드로 트래픽을 전달하는 LoadBalancer Service를 생성합니다. 이 Service는 포트 80에서 수신 대기하고, 수신된 트래픽을 포드의 80 포트로 전달합니다.

CLI 명령어 예시

YAML 파일을 생성하지 않고 직접 LoadBalancer Service를 생성하기 위한 kubectl CLI 명령어 예시입니다.

bash
kubectl create service loadbalancer my-webapp-loadbalancer --tcp=80:80 --dry-run=client -o yaml > my-webapp-loadbalancer.yaml

이 명령어는 my-webapp-loadbalancer라는 이름의 LoadBalancer Service를 생성하되, 실제로 생성하는 대신 해당 Service의 YAML 정의를 my-webapp-loadbalancer.yaml 파일로 출력합니다.

AWS에서의 ELB 유형지정

ELB 유형 선택 시 고려사항

  • CLB (Classic Load Balancer): 초기 ELB 유형으로, 기본적인 로드 밸런싱 기능을 제공합니다. Layer 4(TCP)와 Layer 7(HTTP/HTTPS) 트래픽 로드 밸런싱을 지원합니다. 단순한 사용 사례에 적합합니다. 특별히 어노테이션을 추가하지 않아도 기본적으로 CLB가 생성됩니다.
yaml
apiVersion: v1
kind: Service
metadata:
  name: my-clb-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  • ALB (Application Load Balancer): 보다 고급 HTTP/HTTPS 로드 밸런싱 기능을 제공합니다. 요청 수준에서의 라우팅, 호스트 기반 라우팅, 경로 기반 라우팅 등 고급 라우팅 옵션을 지원합니다. 현대적인 애플리케이션 아키텍처에 적합합니다. AWS에서 제공하는 ALB Ingress Controller를 Kubernetes 클러스터에 설치하고 사용해야 합니다.
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-alb-ingress
  annotations:
    kubernetes.io/ingress.class: "alb"
    alb.ingress.kubernetes.io/scheme: internet-facing
spec:
  rules:
    - http:
        paths:
          - path: /*
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
  • NLB (Network Load Balancer): Layer 4에서 TCP 트래픽에 대한 성능과 확장성을 최적화합니다. 초저지연, 높은 처리량의 트래픽을 처리할 수 있으며, 정적 IP 주소 할당이 가능합니다.
yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

요약

  • LoadBalancer Service는 Kubernetes 클러스터 외부의 트래픽을 클러스터 내부의 애플리케이션으로 분산시키는 중요한 방법입니다.
  • 클라우드 환경에서 자동으로 프로비저닝되는 외부 로드 밸런서를 통해 고가용성과 분산 처리를 제공합니다.
  • YAML 파일과 kubectl CLI를 사용하여 Service를 쉽게 생성하고 관리할 수 있습니다.