네트워크 부하 분산

이 주제에서는 Azure용 GKE를 사용하여 Azure 표준 부하 분산기로 지원되는 L4 부하 분산기를 설정하는 방법을 보여줍니다.

LoadBalancer 유형의 서비스를 만들면 Azure용 GKE 컨트롤러가 Azure 부하 분산기를 구성합니다.

시작하기 전에

공개 또는 비공개 부하 분산기 선택

서비스 부하 분산기는 공개(공개 프런트엔드 IP 포함) 또는 내부(비공개 IP를 통해서만 액세스 가능)일 수 있습니다.

기본적으로 새 서비스는 공개입니다. 내부 부하 분산기를 만들려면 매니페스트에서 service.beta.kubernetes.io/azure-load-balancer-internal 주석을 "true"로 설정합니다.

내부 부하 분산기의 서브넷 선택

내부 부하 분산기를 만들 때 Azure용 GKE는 부하 분산기를 배치할 서브넷을 선택해야 합니다. 이 기본 서비스 부하 분산기 서브넷은 클러스터의 만들기 매개변수에서 다음과 같이 선택됩니다.

  1. 지정되었고 비어 있지 않으면 cluster.networking.serviceLoadBalancerSubnetId입니다.
  2. 그 외의 경우에는 cluster.controlPlane.subnetId입니다.

또는 service.beta.kubernetes.io/azure-load-balancer-internal-subnet 주석을 서비스에 추가하여 지정된 부하 분산기에 사용할 서브넷을 지정할 수 있습니다. 이 주석의 값은 서브넷의 이름입니다.

예시 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 유형의 서비스를 만듭니다. 공개 또는 내부인 Azure 표준 부하 분산기를 만들 수 있습니다. 다음 옵션 중 하나를 선택합니다.

    다음 매니페스트 중 하나를 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
    

    내부

    service.beta.kubernetes.io/azure-load-balancer-internal 주석을 "true"로 설정하여 내부 LoadBalancer를 만듭니다. 다음 YAML에는 이 주석이 포함되어 있습니다. yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. kubectl apply를 사용하여 서비스를 만듭니다.

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

    kubectl get service my-lb-service
    

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

  7. 공개 부하 분산기를 만든 경우 curl로 부하 분산기에 연결할 수 있습니다. external-ip를 이전 단계의 kubectl get service 출력의 주소로 바꿉니다.

    curl http://external-ip:60000
    

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

    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