로드밸런서 생성/삭제하기

페이지 이동경로

로드밸런서 생성 및 삭제하기

로드밸런서(Load Balancer)는 시스템으로 유입되는 대량의 트래픽을 다수의 서버로 분산시켜 안정적인 서비스 운영을 지원합니다. Kubernetes Engine 서비스에서 로드밸런서 타입의 서비스를 생성하면, OSI 4계층인 네트워크 계층에서 트래픽을 처리하는 Network Load Balancer(NLB)가 기본적으로 생성됩니다. Network Load Balancer(NLB)에 대한 자세한 내용은 Load balancing을 참고하시기 바랍니다.

안내
Kubernetes Engine의 로드밸런서는 현재 Network Load Balancer(NLB)만 지원하며, Ingress로 애플리케이션 트래픽을 로드밸런싱하는 Application Load Balancer(ALB)는 준비 중입니다.

로드밸런서 생성하기

Kubernetes Engine 서비스에서 로드밸런서를 생성하는 방법은 다음과 같습니다.

Step 1. kubectl 설치 및 제어 설정하기

Kubernetes에서 Service 객체를 생성하기 위해서는 kubectl를 설치하고, 클러스터에 대한 kubectl 제어를 설정해야 합니다. kubectl 설치 및 제어 설정에 대한 자세한 설명은 kubectl 제어 설정하기를 참고하시기 바랍니다.

Step 2. 로드밸런서 타입 서비스 명세 확인하기

로드밸런서 타입 서비스의 명세를 확인합니다. app: nginx와 연동된 로드밸런서 타입 서비스 YAML 파일 예시에서 아래의 2개 항목을 확인합니다.

YAML 파일 확인할 항목

항목 설정값 및 설명
spec.type 설정값:LoadBalancer
  ㄴ 로드밸런서 생성을 위한 서비스 타입 설정
metadata.annotations 하위의 annotations <로드밸런서 타입 설정>
설정값:
loadbalancer.ike.kakaoicloud.com/load-balancer-type
  ㄴ NLB (기본값) : Network Load Balancer 생성
  ㄴ annotation 미설정 시, Network Load Balancer로 기본 생성됩니다.

<공인 IP 사용 설정>
설정값:
service.beta.kubernetes.io/openstack-internal-load-balancer
  ㄴ true(기본값): 사설 IP를 사용
  ㄴ false: 사설 IP를 사용하지 않음

Step 3. 로드밸런서 공인 IP 설정하기

로드밸런서 생성 시, 공인 IP 사용 여부를 설정할 수 있습니다.
metadata.annotations 하위의 service.beta.kubernetes.io/openstack-internal-load-balancer 값을 설정하여 로드밸런서의 공인 IP 사용을 설정합니다.

  • 사설 IP를 갖는 로드밸런서를 생성하려면 값을 true 로 설정 (기본값)
  • 공인 IP를 갖는 로드밸런서를 생성하려면 값을 false로 설정

주의
- service.beta.kubernetes.io/openstack-internal-load-balancer 설정값에 따라, 로드밸런서의 공인 IP가 새로운 공인 IP를 생성하여 연결 또는 연결 해제됩니다. false로 설정하여 로드밸런서에 사용한 공인 IP가 있었다면, 이후 true로 설정 값을 변경하여도 공인 IP 연결 해제 상태가 되어 공인 IP 과금 대상에 포함되니 유의해 주세요.
- Kubernetes engine 로드밸런서에 사용한 공인 IP 삭제는 카카오 i 클라우드 콘솔의 VPC 메뉴의 [Public IP탭]에서 가능합니다. 자세한 설명은 VPC > Public IP 생성 및 관리하기를 참고하시기 바랍니다.

코드 예제 로드밸런서 타입 서비스 명세 확인

kind: Service
apiVersion: v1
metadata:
  name: default-http-nginx-service
  annotations:
    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
    loadbalancer.ike.kakaoicloud.com/load-balancer-type: "NLB"
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80

부록. 로드밸런서 상세 옵션 설정하기

Kubernetes Engine 서비스에서 로드밸런서를 생성할 때 추가 옵션을 설정할 수 있습니다. 로드밸런서 타입 서비스 YAML 파일 예시의 annotations 항목을 확인하여 설정합니다.

옵션 설정값

옵션 설정 항목 설정값 및 설명
metadata.annotations 하위의 annotations <공인 IP 삭제 설정>
설정값:
- loadbalancer.ike.kakaoicloud.com/delete-floatingip
  ㄴ true: 로드밸런서 삭제 시, 해당 로드밸런서에 연결되어 있던 공인 IP를 삭제함
  ㄴ false(기본값): 로드밸런서 삭제 시, 해당 로드밸런서에 연결되어 있던 공인 IP를 연결 해제함

<Health Check (상태 확인) 조건 설정>
설정값:
- loadbalancer.openstack.org/health-monitor-timeout
  ㄴ 로드밸런서 헬스 체크 최대 응답시간을 설정
  ㄴ (기본값): 상세 옵션 미지정 시 30 적용됨
  ㄴ 조건: 초 단위로 설정하며, 설정값은 제한 없음
- loadbalancer.openstack.org/health-monitor-delay
  ㄴ 로드밸런서 헬스 체크 주기를 설정
  ㄴ (기본값): 상세 옵션 미지정 시 60 적용됨
  ㄴ 조건: 초 단위로 설정하며, timeout 값보다 큰 값이 설정되어야 함
- loadbalancer.openstack.org/health-monitor-max-retries
  ㄴ 설명: 로드밸런서 헬스 체크 최대 재시도 횟수를 설정
  ㄴ (기본값): 상세 옵션 미지정 시 5 적용됨
  ㄴ 조건: 1~10 범위 이내의 값으로 설정되어야 함

부록. 로드밸런서 타입 서비스 생성 예제

예제를 통해 간단한 Nginx 애플리케이션을 로드밸런서 타입 서비스로 생성하는 방법을 설명합니다.

코드 예제 로드밸런서 타입 서비스 생성 예제

apiVersion: apps/v1
kind: Deployment
metadata:
  name: internal-http-nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: default-http-nginx-service
  annotations:
    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
    loadbalancer.ike.kakaoicloud.com/load-balancer-type: "NLB"
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: 80
  1. 다음의 명령어를 통해 배포를 진행합니다.
    • 실행 시 카카오 i 클라우드의 로드밸런서가 자동으로 생성됩니다. 로드밸런스 생성까지 약 5분 정도 소요될 수 있습니다.

      코드 예제 배포 진행 명령어

      kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/kakaoicloud-guide/kubernetes-engine/main/guide-samples/createLB/lb-nginx.yml
      
  2. 생성된 로드밸런서의 사설 IP 주소를 확인하기 위해 다음의 명령어를 실행하여 EXTERNAL-IP 열을 확인합니다. 생성 전까지 Pending 상태가 지속될 수 있습니다.

    코드 예제 로드밸런서 사설 IP 주소 확인

    kubectl --kubeconfig=$KUBE_CONFIG get svc default-http-nginx-service
    

    코드 예제 주소 확인 실행 결과

    NAME                         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    default-http-nginx-service   LoadBalancer   {CLUSTER-IP}   {EXTERNAL-IP}   80:32245/TCP   7h15m
    
  3. 다음 명령어를 통해 EXTERNAL-IP로 트래픽이 정상적으로 수신되는지 확인할 수 있습니다.

    코드 예제 EXTERNAL-IP로 트래픽 수신 확인

    curl {EXTERNAL-IP}
    

    코드 예제 트래픽 수신 확인 실행 결과

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
       
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
       
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    

로드밸런서 삭제하기

더 이상 사용하지 않는 로드밸런서를 삭제할 수 있습니다. 로드밸런서 타입으로 생성된 Service 객체는 자동으로 생성된 카카오 i 클라우드 로드밸런서와 연동됩니다. 해당 Service를 삭제하는 경우 연동된 로드밸런서도 함께 삭제됩니다.

코드 예제 Service 삭제

kubectl --kubeconfig=$KUBE_CONFIG delete svc default-http-nginx-service