로드밸런서 상품 연동 가이드

Kubernetes의 서비스를 통한 로드밸런서 상품 연동

네이버 클라우드 플랫폼의 Kubernetes Service는 Kubernetes 서비스 생성 시 타입을 LoadBalancer로 지정한 경우, 로드밸런서 인스턴스를 자동으로 생성합니다. 로드밸런서의 설정은 서비스 매니페스트(Manifest)의 어노테이션(Annotation)을 통해 지원합니다.

다음의 로드밸런서 설정을 위한 어노테이션들을 제공합니다.

설정 값 설명 비고
service.beta.kubernetes.io/ncloud-load-balancer-backend-protocol 로드밸런서 프로토콜.
다음의 값 중 하나 선택 : tcp, http, https, ssl
기본값 tcp
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol 프록시 프로토콜 활성화 여부.
다음의 값 중 하나 선택 : true/false
로드밸런서 프로토콜의 값이 ssl 혹은 tcp로 선택되어 있을 때 유효함.
service.beta.kubernetes.io/ncloud-load-balancer-internal 사설 네트워크 타입의 로드밸런서 생성 설정.
다음의 값 중 하나 선택 : true/false
기본값 false
service.beta.kubernetes.io/ncloud-load-balancer-ssl-cert 로드밸런서 프로토콜이 https 혹은 ssl일 때 listener 구성을 위한 SSL Certificate 이름 Certificate Manager 상품에 등록되어 있는 인증서 이름을 입력
service.beta.kubernetes.io/ncloud-load-balancer-ssl-ports 로드밸런서 인스턴스가 https 혹은 ssl 프로토콜일 때, 추가적으로 인스턴스에 할당될 포트 입력.
','로 구분하여 입력
입력 예: "443,6443"
service.beta.kubernetes.io/ncloud-load-balancer-l7-healthcheck-path 로드밸런서 프로토콜이 http 혹은 https일 때, L7 Healthcheck를 위한 Path 기본값 "/"
service.beta.kubernetes.io/ncloud-load-balancer-description 생성될 로드밸런서 인스턴스에 대한 메모 입력
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type 로드밸런싱 알고리즘.
다음의 값 중 하나 선택 : RR(ROUND ROBIN), LC(LEAST_CONNECTION), SIPHS(Source IP Hash)
기본값 RR
service.beta.kubernetes.io/ncloud-load-balancer-termination-protection 타입이 LoadBalancer로 지정된 Service 제거 시, 로드밸런서 자동 제거 방지 옵션 기본값 false

Client의 IP를 확인하고자 하는 경우에는 service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol의 값을 true로 선언합니다. 자세한 내용은 [Ingress 튜토리얼]의 참고사항을 참조하세요.

로드밸런서 인스턴스 생성

Kubernetes의 서비스를 통해 로드밸런서 인스턴스를 생성하려면, 서비스 매니페스트의 타입을 다음과 같이 지정합니다.

"type": "LoadBalancer"

아래는 해당 타입이 적용된 yaml 설정 파일 예제입니다. 사설 네트워크 타입의 로드밸런서 인스턴스를 생성하기 위한 어노테이션이 추가되었음을 확인합니다.

kind: Service
apiVersion: v1
metadata:
  name: example-service
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

위의 내용을 nks-lb.yml로 만들고, kubectl apply -f nks-lb.yml을 통해 배포하면, 네이버 클라우드 플랫폼의 로드밸런서 인스턴스가 자동으로 생성됩니다. 생성에는 수 분이 소요될 수 있습니다.

생성된 로드밸런서 인스턴스의 사설 IP 주소를 확인하기 위해서는 아래의 명령어를 이용합니다. IP 주소는 EXTERNAL-IP 열에서 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get svc example-service
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
example-service   LoadBalancer   172.16.101.104   10.39.10.118   8765:30365/TCP   2m11s

kubectl expose 명령을 이용한 로드밸런서 인스턴스 생성

앞서 언급한 방법 외에도, kubectl expose 명령어와 --type=LoadBalancer 플래그를 이용하여 로드밸런서 인스턴스를 생성할 수 있습니다.

로드밸런서 인스턴스 생성 예제를 위해 아래와 같은 명령어를 이용하여, my-nginx 이름을 가지는 Deployment를 배포합니다. 해당 배포를 통해 Nginx 파드를 구동할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG create deployment --image nginx my-nginx

아래의 명령어를 이용하여 로드밸런서 인스턴스를 생성할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG expose deployment my-nginx --port=80 --type=LoadBalancer

로드밸런서 인스턴스 삭제하기

로드밸런서 타입으로 생성된 kubernetes 서비스 리소스는 자동으로 생성된 네이버 클라우드 플랫폼의 로드밸런서(Load Balancer) 인스턴스와 연동됩니다. kerbernetes에서 해당 타입의 서비스를 삭제하는 경우, 자동으로 로드밸런서 인스턴스 또한 제거됩니다.

아래의 명령어들을 통해 생성된 서비스를 확인할 수 있습니다. 서비스들에 대한 타입은 TYPE 열에서 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
my-nginx     LoadBalancer   172.16.188.167   slb-904582.ncloudslb.com     80:32681/TCP   21s

로드밸런서 타입의 kubernetes 서비스 리소스를 삭제하기 위해 다음의 명령어를 이용합니다.

$ kubectl --kubeconfig=$KUBE_CONFIG delete service my-nginx
service "my-nginx" deleted

kubernetes 서비스 리소스가 삭제됨과 동시에 로드밸런서 인스턴스 또한 삭제됩니다. 해당 작업에는 수 분이 소요될 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...