네트워크 부하 분산기 만들기

이 페이지에서는 AWS Elastic Load Balancer(ELB) 또는 네트워크 부하 분산기(NLB) 엔드포인트로 L4 부하 분산기를 설정하는 방법을 설명합니다.

AWS용 GKE와 함께 사용할 수 있는 다른 유형의 부하 분산기에 대한 자세한 내용은 부하 분산기 개요를 참조하세요.

시작하기 전에

부하 분산기 유형 선택

AWS용 GKE는 서비스 기본 부하 분산기를 AWS 기본 Elastic Load Balancer(기본 ELB) 또는 NLB로 만듭니다. 기본적으로 AWS용 GKE는 클래식 ELB를 만듭니다. NLB를 만들려면 service.beta.kubernetes.io/aws-load-balancer-type 주석을 nlb로 설정합니다. 부하 분산기 유형 간의 차이점에 대한 자세한 내용은 AWS 문서의 부하 분산기 유형을 참조하세요.

인터넷 연결 또는 내부 부하 분산기 선택

서비스 부하 분산기는 인터넷 연결(공개적으로 확인 가능한 DNS 이름 사용) 또는 내부(VPC 내에서만 액세스 가능) 중 하나일 수 있습니다.

기본적으로 새 부하 분산기는 인터넷 연결 방식입니다. 내부 부하 분산기를 만들려면 매니페스트에서 service.beta.kubernetes.io/aws-load-balancer-internal 주석을 "true"로 설정합니다.

aws-load-balancer-internal 주석은 기존 서비스에 적용할 수 없습니다. 인터넷 연결 및 내부 구성을 서로 변경하려면 기존 LoadBalancer를 삭제하고 다시 만들어야 합니다.

서브넷 선택

부하 분산기를 만들려면 이를 배치할 서브넷을 AWS에 지정해야 합니다. 기본적으로 이러한 서브넷은 VPC의 서브넷 중에서 자동으로 검색됩니다. 이를 위해 서브넷에 특정 태그가 있어야 합니다. 서브넷 자동 검색 및 태그 지정에 대한 자세한 내용은 부하 분산기 서브넷을 참조하세요.

또는 서비스에 service.beta.kubernetes.io/aws-load-balancer-subnets 주석을 추가하여 주석으로 부하 분산기 서브넷을 지정할 수 있습니다. 이 주석의 값은 subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef와 같이 서브넷 ID 또는 서브넷 이름이 쉼표로 구분된 목록입니다.

예시 부하 분산기 만들기

배포를 만들고 서비스를 사용해서 이 배포를 노출하는 방식으로 LoadBalancer 유형의 서비스를 만듭니다. 다음 예시에서는 부하 분산기 셈플을 만듭니다.

  1. 배포를 만듭니다. 이 배포의 컨테이너는 포트 50001에서 리슨합니다. 다음 YAML을 my-deployment-50001.yaml 파일에 저장합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. kubectl apply를 사용하여 배포를 만듭니다.

    kubectl apply -f my-deployment-50001.yaml
    
  3. 3개의 포드가 실행 중인지 확인합니다.

    kubectl get pods --selector=app=products
    
  4. 배포에 LoadBalancer 유형의 서비스를 만듭니다.

  5. 필요한 부하 분산기 유형을 결정합니다.

    • 인터넷 연결 클래식 ELB
    • 인터넷 연결 NLB
    • 내부 클래식 ELB
    • 내부 NLB

    요구사항과 일치하는 탭을 선택하고 그 안의 매니페스트를 my-lb-service.yaml이라는 파일에 복사합니다.

    인터넷 연결 클래식

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    인터넷 연결 NLB

    service.beta.kubernetes.io/aws-load-balancer-type 주석을 nlb로 설정하여 NLB를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    내부 클래식

    service.beta.kubernetes.io/aws-load-balancer-internal 주석을 "true"로 설정하여 내부 LoadBalancer를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    내부 NLB

    주석을 설정하여 내부 NLB를 만듭니다.

    • service.beta.kubernetes.io/aws-load-balancer-internal~"true"
    • service.beta.kubernetes.io/aws-load-balancer-typenlb로 설정

    다음 YAML에는 두 주석이 모두 포함됩니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    
  6. kubectl apply를 사용하여 서비스를 만듭니다.

    kubectl apply -f my-lb-service.yaml
    
  7. kubectl get service를 사용하여 서비스의 주소를 봅니다.

    kubectl get service my-lb-service
    

    출력에는 부하 분산기의 주소와 함께 EXTERNAL-IP 열이 포함됩니다(부하 분산기의 생성 방법에 따라 공개 또는 비공개).

  8. 인터넷 연결 부하 분산기를 만든 경우 다음 명령어를 사용해서 curl로 부하 분산기에 연결할 수 있습니다.

    curl http://EXTERNAL_IP:60000
    

    EXTERNAL_IP를 이전 단계의 EXTERNAL-IP 열에 있는 주소로 바꿉니다.

다음과 유사한 결과가 출력됩니다.

```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```

삭제

서비스 및 배포를 삭제하려면 kubectl delete 명령어를 사용합니다.

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml

다음 단계