Load Balancer 인스턴스 연동
    • PDF

    Load Balancer 인스턴스 연동

    • PDF

    기사 요약

    VPC 환경에서 이용 가능합니다.

    Ncloud Kubernetes Service를 이용하기 위해 서비스를 생성할 때, 해당 서비스와 연동되는 Load Balancer 인스턴스를 자동으로 생성할 수 있습니다.

    주의

    Kubernetes에서 생성한 네이버 클라우드 플랫폼의 로드밸런서를 Kubernetes의 Service 리소스가 아닌 콘솔 및 API를 통해 직접 제어하시는 경우, 상태 동기화에 문제가 발생합니다. 생성된 로드밸런서에 대한 설정 변경은 Kubernetes에서 생성된 Service 리소스 수정을 통해서 수행되어야 합니다.

    Kubernetes에 연동되는 Load Balancer 인스턴스 관리

    인스턴스 생성하기

    Ncloud Kubernetes Service와 연동되는 Load Balancer 인스턴스를 생성하려면 서비스 매니페스트의 타입을 LoadBalancer 로 지정한 후, service.beta.kubernetes.io/ncloud-load-balancer-layer-type 어노테이션을 nplb 또는 nlb로 설정해 주십시오.

    • nplb: 네트워크 프록시 로드 밸런서(NPLB) 인스턴스가 생성됩니다.
    • nlb: 네트워크 로드 밸런서(NLB) 인스턴스가 생성됩니다.

    인스턴스 속성 설정하기

    서비스 매니페스트의 어노테이션을 통해 생성되는 인스턴스의 속성을 설정할 수 있습니다. 인스턴스의 속성을 설정하려면 인스턴스를 생성할 때 아래의 표를 참조하여 metadata.annotations 값을 입력해 주십시오.

    • 네트워크 프록시 로드 밸런서(NPLB)
    어노테이션설명비고
    service.beta.kubernetes.io/ncloud-load-balancer-layer-type로드 밸런서 네트워크 레이어 타입 설정
    다음 값 중 하나를 선택 : nplb, nlb
    기본값 nplb
    service.beta.kubernetes.io/ncloud-load-balancer-size로드 밸런서 부하 처리 성능
    다음 값 중 하나를 선택 : SMALL, MEDIUM, LARGE
    기본값 SMALL
    service.beta.kubernetes.io/ncloud-load-balancer-internal사설 네트워크 타입의 로드 밸런서 생성 설정
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination로드밸런서 제거 시 할당된 공인 IP를 보존하는 설정. 공인 아이피가 할당된 로드밸런서에만 적용.
    다음 값 중 하나를 선택: "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-description생성될 로드 밸런서 인스턴스에 대한 메모 입력-
    service.beta.kubernetes.io/ncloud-load-balancer-termination-protection타입이 LoadBalancer로 지정된 Service 제거 시 로드 밸런서 자동 제거 방지 옵션
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-subnet-id로드 밸런서 생성을 위한 로드 밸런서 전용 서브넷의 ID 값기본값으로 kube-system내의 ncloud-config 이름의 configmaplbSubnetNo 사용
    service.beta.kubernetes.io/ncloud-load-balancer-ssl-certificate-no프로토콜이 TLS인 리스너에 적용할 Certificate Manager의 인증서 번호 - 인증서 번호는 Resource Manager의 nrn에서 확인할 수 있습니다. (예: nrn:PUB:CertificateManager::000:Certificate/External/${certificateNo})-
    service.beta.kubernetes.io/ncloud-load-balancer-tls-portsTLS를 적용할 포트 목록. e.g. "443,6443"기본값 "443", 콤마를 사용하여 구분된 값 사용 가능
    service.beta.kubernetes.io/ncloud-load-balancer-tls-min-versionTLS 최소 지원 버전 유형 코드
    다음의 값 중 하나 선택 : TLSV10, TLSV11, TLSV12
    기본값 TLSV10
    service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol프록시 프로토콜 활성화 여부.
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-codeAlgorithm 타입으로 Round Robin(RR), Source Ip Hash(SIPHS), Least Connection(LC) 중 하나를 설정 가능. 다음의 값 중 하나 선택 : RR, SIPHS, LC기본값 RR
    service.beta.kubernetes.io/ncloud-load-balancer-enable-skip-acg-updateACG를 업데이트 설정 유무.
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-idle-timeout로드 밸런서의 Idle Timeout 설정 (1~3600)기본값 60
    service.beta.kubernetes.io/ncloud-load-balancer-cipher-suite-list리스너에서 지원하는 Cipher Suite 목록, (예: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)기본값 리스너에서 지원하는 모든 cipher suite
    • 네트워크 로드 밸런서(NLB)
    어노테이션설명비고
    service.beta.kubernetes.io/ncloud-load-balancer-layer-type로드 밸런서 네트워크 레이어 타입 설정
    다음 값 중 하나 선택 : nplb, nlb
    기본값 nplb
    네트워크 로드 밸런서를 생성하기 위해서는 nlb를 입력
    service.beta.kubernetes.io/ncloud-load-balancer-size로드 밸런서 부하 처리 성능
    다음 값 중 하나 선택 : SMALL, MEDIUM, LARGE, DYMANIC
    기본값 DYNAMIC. 신규 생성 시 DYNAMIC만 설정 가능. DYNAMIC 타입이 아닐 경우, 일부 로드밸런서에 한해 DYNAMIC 어노테이션 적용 시 DYNAMIC 타입으로 변경 가능. DYNAMIC 타입에서 다른 타입으로 변경 불가능.
    service.beta.kubernetes.io/ncloud-load-balancer-internal사설 네트워크 타입의 로드 밸런서 생성 설정
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-retain-public-ip-on-termination로드밸런서 제거 시 할당된 공인 IP를 보존하는 설정. 공인 아이피가 할당된 로드밸런서에만 적용.
    다음 값 중 하나를 선택: "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-description생성될 로드 밸런서 인스턴스에 대한 메모 입력-
    service.beta.kubernetes.io/ncloud-load-balancer-termination-protection타입이 LoadBalancer로 지정된 Service 제거 시 로드 밸런서 자동 제거 방지 옵션
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-inbound-sourceACG 규칙의 Inbound 접근 소스로 사용할 값
    예시) 119.194.195.143/32,143.248.12.77/32
    기본값 0.0.0.0/0
    service.beta.kubernetes.io/ncloud-load-balancer-subnet-id로드 밸런서 생성을 위한 로드밸런서 전용 서브넷의 ID 값기본값으로 kube-system 내의 ncloud-config 이름의 configmap 내 lbSubnetNo 사용
    service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type-codeAlgorithm 타입으로 Hash(MH), Round Robin(RR) 중 하나를 설정 가능. 다음의 값 중 하나 선택 : MH, RR기본값 MH
    service.beta.kubernetes.io/ncloud-load-balancer-enable-skip-acg-updateACG를 업데이트 설정 유무.
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"
    service.beta.kubernetes.io/ncloud-load-balancer-sticky-sessionSticky Session 설정 유무.
    다음 값 중 하나를 선택 : "true", "false"
    기본값 "false"

    로드 밸런서의 Subnet 유형에 따른 공인 및 사설 아이피 할당 방식

    로드 밸런서 Subnet은 Public Subnet와 Private Subnet의 두 가지 유형이 있습니다. 각 타입은 공인 및 사설 아이피가 부여된 로드 밸런서를 생성하기 위해 요구됩니다. 로드 밸런서를 생성할 때, kube-system 네임스페이스 내의 ncloud-config ConfigMap에서 정의된 lbPublicSubnetNo와 lbSubnetNo 필드에 있는 Subnet ID를 사용합니다. 이 Subnet ID는 로드 밸런서를 생성할 때, service.beta.kubernetes.io/ncloud-load-balancer-subnet-id annotation을 이용하여 다른 Subnet ID를 사용하도록 지정할 수 있습니다.

    1. Public Subnet(Internet Gateway 전용)
    공인 아이피가 부여된 로드밸런서를 생성 하기 위해서는 Public Subnet이 요구됩니다. 네이버 클라우드 플랫폼 콘솔의 VPC > Public IP 메뉴에서 공인 아이피를 신청하고, 이를 로드밸런서에 할당할 수 있습니다. 공인 아이피를 지정하지 않으면 신규 공인 아이피가 신청됩니다.

    2. Private Subnet
    VPC 내에서 로드 밸런서를 사설 아이피가 할당된 Private Subnet에 생성하려면 해당 서브넷이 필요합니다.

    인스턴스 속성 설정 예제

    인스턴스 속성 설정에 대한 자세한 예제는 Load Balancer 속성 설정 예제를 참조해 주십시오.

    네트워크 프록시 로드 밸런서(NPLB) 인스턴스 생성 예제

    Kubernetes에 연동되는 NPLB 인스턴스를 생성하는 예제는 다음과 같습니다.

    1. 아래의 코드 예시를 nks-lb.yml 파일로 저장해 주십시오.
    • 아래 코드 예시에서 사설 네트워크 프록시 타입의 로드 밸런서 인스턴스를 생성하기 위한 어노테이션을 확인할 수 있습니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: my-nginx
      template:
        metadata:
          labels:
            run: my-nginx
        spec:
          containers:
          - name: my-nginx
            image: nginx
            ports:
            - containerPort: 80
    ---
    
    kind: Service
    apiVersion: v1
    metadata:
      name: my-nginx
      annotations:
        service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nplb"
        service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"    
        service.beta.kubernetes.io/ncloud-load-balancer-size: "SMALL"
    spec:
      ports:
      - port: 80
        targetPort: 80
      selector:
        run: my-nginx
      type: LoadBalancer
    
    1. kubectl apply -f nks-lb.yml 명령어를 실행하여 배포해 주십시오.

    네트워크 로드 밸런서(NLB) 인스턴스 생성 예제

    1. 아래의 코드 예시를 nks-lb.yml 파일로 저장해 주십시오.
    • 아래 코드 예시에서 사설 네트워크 프록시 타입의 로드 밸런서 인스턴스를 생성하기 위한 어노테이션을 확인할 수 있습니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: my-nginx
      template:
        metadata:
          labels:
            run: my-nginx
        spec:
          containers:
          - name: my-nginx
            image: nginx
            ports:
            - containerPort: 80
    ---
    
    kind: Service
    apiVersion: v1
    metadata:
      name: my-nginx
      annotations:
        service.beta.kubernetes.io/ncloud-load-balancer-layer-type: "nlb"
        service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"    
        service.beta.kubernetes.io/ncloud-load-balancer-size: "SMALL"
    spec:
      ports:
      - port: 80
        targetPort: 80
      selector:
        run: my-nginx
      type: LoadBalancer
    
    1. kubectl apply -f nks-lb.yml 명령어를 실행하여 배포해 주십시오.

    생성된 로드밸런서 인스턴스의 External IP확인

    생성된 인스턴스의 external IP를 확인하려면 아래 명령어를 실행해 주십시오.

    $ kubectl --kubeconfig $KUBE_CONFIG get svc example-service
    

    EXTERNAL-IP 열에 해당 인스턴스의 external 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
    

    인스턴스 삭제하기

    LoadBalancer 타입으로 생성된 Kubernetes 서비스를 삭제하면 연동된 Load Balancer 인스턴스가 자동으로 함께 삭제됩니다.

    LoadBalancer 타입으로 생성된 Kubernetes 서비스를 확인한 후 삭제하는 방법은 다음과 같습니다.

    1. 아래 명령어를 실행하여 생성된 Kubernetes 서비스를 확인해 주십시오.
    • 결과 값의 TYPE 열에서 각 서비스의 타입을 확인할 수 있습니다.
    $ kubectl --kubeconfig $KUBE_CONFIG get service
    
    1. 아래 명령어를 실행하여 LoadBalancer 타입의 서비스를 삭제해 주십시오.
    $ kubectl --kubeconfig $KUBE_CONFIG delete service my-nginx
    

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.