외부 HTTP(S) 부하 분산기에 대한 커스텀 헤더 및 쿼리 매개변수 기반 라우팅 설정

쿼리 매개변수 기반 라우팅 설정

이 예시는 쿼리 매개변수를 사용하여 쿼리 문자열을 일치시켜 A/B 테스트를 수행하는 방법을 보여줍니다.

두 개의 백엔드 인스턴스 그룹 추가

라우팅이 유용하려면 여러 백엔드가 있어야 합니다.

두 개의 백엔드를 설정하려면 VM이 두 인스턴스 그룹에 있어야 합니다. 이 가이드에서는 Apache가 실행 중인 Linux VM을 사용하여 관리형 인스턴스 그룹을 만들고 부하 분산을 설정하는 방법을 설명합니다.

관리형 인스턴스 그룹은 외부 HTTP 부하 분산기의 백엔드 서버를 실행하는 VM을 제공합니다. 여기에서는 백엔드에서 데모용으로 자체 호스트 이름을 제공합니다.

편의상 백엔드는 동일한 리전에 있습니다. 멀티 리전 설정을 원하는 경우 두 번째 리전의 인스턴스 템플릿을 설정해야 합니다.

Console

  1. Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 왼쪽에서 새 관리형 인스턴스 그룹을 선택합니다.
  4. 이름first-example-ig을 입력합니다.
  5. 위치에서 단일 영역을 선택합니다.
  6. 리전으로 원하는 리전을 선택합니다. 다음 예시에서는 us-east1을 사용합니다.
  7. 영역으로 us-east1-b를 선택합니다.
  8. 인스턴스 템플릿에서 새 인스턴스 템플릿 만들기를 선택합니다.
  9. 이름lb-backend-template을 입력합니다.
  10. 부팅 디스크가 Debian GNU/Linux 9 (stretch) 같은 Debian 이미지로 설정되었는지 확인합니다. 이 안내에서는 apt-get 같이 Debian에서만 사용할 수 있는 명령어를 사용합니다.
  11. 관리 탭의 관리, 보안, 디스크, 네트워킹, 단독 테넌시에서 시작 스크립트 필드에 다음 스크립트를 삽입합니다

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    # See https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  12. 네트워킹 아래에서 네트워크 태그 allow-health-check를 추가합니다.

  13. 저장 후 계속을 클릭합니다.

  14. 인스턴스 수2를 입력합니다.

  15. 자동 확장 모드에서 자동 확장 안함을 선택합니다.

  16. 만들기를 클릭하여 새 인스턴스 그룹을 만듭니다.

이와 같은 다른 관리형 인스턴스 그룹을 만듭니다. 두 번째 이름을 second-example-ig로 지정하고 lb-backend-template 템플릿을 기반으로 합니다.

gcloud

  1. 템플릿을 만듭니다.

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         # See https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying
         http://169.254.169.254/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. 템플릿을 기반으로 첫 번째 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. 템플릿을 기반으로 두 번째 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

방화벽 규칙 구성

이 예시에서는 fw-allow-health-check 방화벽 규칙을 만듭니다. Google Cloud 상태 확인 시스템(130.211.0.0/2235.191.0.0/16)의 트래픽을 허용하는 인그레스 규칙입니다. 이 예시에서는 대상 태그 allow-health-check를 사용하여 VM을 식별합니다.

Console

  1. Google Cloud Console의 방화벽 페이지로 이동합니다.
    방화벽 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭하여 두 번째 방화벽 규칙을 만듭니다.
  3. fw-allow-health-check이름을 입력합니다.
  4. 네트워크에서 Default를 선택합니다.
  5. 대상에서 지정된 대상 태그를 선택합니다.
  6. allow-health-check대상 태그 필드를 채웁니다.
  7. 소스 필터IP ranges로 설정합니다.
  8. 소스 IP 범위130.211.0.0/2235.191.0.0/16으로 설정합니다.
  9. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택합니다.
  10. tcp 옆의 체크박스를 선택하고 포트 번호로 80을 입력합니다.
  11. 만들기를 클릭합니다.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

외부 IP 주소 예약

인스턴스가 준비되어 실행 중이므로 고객이 부하 분산기에 연결하는 데 사용하는 전역 고정 외부 IP 주소를 설정합니다.

Console

  1. Google Cloud Console의 외부 IP 주소 페이지로 이동합니다.
    외부 IP 주소 페이지로 이동
  2. 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
  3. lb-ipv4-1이름을 할당합니다.
  4. 네트워크 등급을 표준으로 설정합니다.
  5. IP 버전IPv4로 설정합니다.
  6. 유형전역으로 설정합니다.
  7. 예약을 클릭합니다.
  8. 유형전역으로 설정되어 있는지 확인합니다.
  9. 예약을 클릭합니다.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

예약된 IPv4 주소를 확인합니다.

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

부하 분산기 백엔드 설정

Console

Cloud Console은 현재 헤더 기반 및 매개변수 기반 라우팅 설정에 지원되지 않습니다. 대신 gcloud 또는 API를 사용하세요.

gcloud

  1. 상태 확인을 만듭니다.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. 첫 번째 백엔드 서비스를 만듭니다.
        gcloud compute backend-services create service-a \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. 두 번째 백엔드 서비스를 만듭니다.
        gcloud compute backend-services create service-b \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. 첫 번째 인스턴스 그룹을 첫 번째 백엔드 서비스의 백엔드로 추가합니다.
        gcloud compute backend-services add-backend service-a \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=first-example-ig \
            --instance-group-zone=us-east1-b \
            --global
        
  5. 두 번째 인스턴스 그룹을 두 번째 백엔드 서비스의 백엔드로 추가합니다.
        gcloud compute backend-services add-backend service-b \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=second-example-ig \
            --instance-group-zone=us-east1-c \
            --global
        

URL 맵 만들기

Console

Cloud Console은 현재 헤더 기반 및 매개변수 기반 라우팅 설정에 지원되지 않습니다. 대신 gcloud 또는 API를 사용하세요.

gcloud

  1. [project-id]를 프로젝트 ID로 바꿔 YAML 파일 /tmp/web-map-http.yaml을 만듭니다.

    defaultService: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-a
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: web-map-http
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-b
    selfLink: https://www.googleapis.com/compute/v1/projects/[project-id]/global/urlMaps/web-map-http
    
  2. URL 맵을 업데이트합니다.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

대상 프록시 및 전달 규칙 만들기

Console

Cloud Console은 현재 헤더 기반 및 매개변수 기반 라우팅 설정에 지원되지 않습니다. 대신 gcloud 또는 API를 사용하세요.

gcloud

  1. 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅합니다.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. 들어오는 요청을 프록시로 라우팅하는 전역 전달 규칙을 만듭니다.
        gcloud compute forwarding-rules create http-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

테스트

예약된 IPv4 주소를 확인합니다.

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

다음을 실행하여 이 설정을 테스트합니다.

curl http://[IP_ADDRESS]?ABTest=A
curl http://[IP_ADDRESS]?ABTest=B

브라우저에서 http://[IP_ADDRESS]?ABTest=Ahttp://[IP_ADDRESS]?ABTest=B를 엽니다.

커스텀 HTTP 헤더 기반 라우팅 설정

이 예시에서는 지능형 라우팅을 수행하기 위해 커스텀 HTTP 헤더를 추가 및 삭제하는 방법을 보여줍니다.

시작하기 전에

기존 외부 HTTP(S) 부하 분산기를 사용하거나 새 부하 분산기를 만들 수 있습니다.

이 기능은 모든 지원되는 백엔드 유형에 사용할 수 있습니다. 이 예시에서는 인스턴스 그룹에서 VM을 사용한다고 가정합니다.

간단한 부하 분산기를 설정하려면 위의 쿼리 매개변수 기반 예시를 참조하세요.

URL 맵 업데이트

Console

Cloud Console은 현재 헤더 기반 및 매개변수 기반 라우팅 설정에 지원되지 않습니다. 대신 gcloud 또는 API를 사용하세요.

gcloud

  1. YAML 파일 /tmp/web-map-http.yaml을 만듭니다.

    이 예시는 HTTP 요청 헤더를 사용하여 요청의 HTTP 헤더 값을 일치시켜 A/B 테스트를 수행하는 방법을 보여줍니다.

    defaultService: $[DEFAULT_SERVICE_URL]
    kind: compute#urlMap
    name: web-map-http
    hostRules:
    - hosts:
      - '*'
      pathMatcher: matcher1
    pathMatchers:
    - defaultService: $[DEFAULT_SERVICE_URL]
      name: matcher1
      routeRules:
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/[project-id]/global/backendServices/service-b
    
  2. URL 맵을 업데이트합니다.

    gcloud compute url-maps import web-map-http \
       --source /tmp/http-lb.yaml \
       --global