자동 Envoy 배포를 사용한 Compute Engine VM 설정

이 가이드의 안내를 따르기 전에 Traffic Director 설정 준비를 검토하고 문서에 설명된 기본 요건을 완료했는지 확인하세요. 이 문서는 이전 API에 적용됩니다. 미리보기 상태인 새 서비스 라우팅 API를 사용하여 배포하는 경우에는 HTTP 서비스를 사용하여 Envoy 프록시의 Traffic Director 설정을 참조하세요.

이 가이드에서는 Envoy 사이드카 프록시로 구성된 데이터 영역을 자동으로 배포하고, Traffic Director를 사용하여 이를 구성하고, 설정이 올바르게 작동하는지 확인하는 방법을 보여줍니다. 프로세스에는 다음이 포함됩니다.

  1. Cloud OS Config API 사용 설정
  2. 테스트 서비스 만들기
  3. Envoy 프록시(xDS v3만 지원하는 Envoy 버전 1.18.4)를 사용하여 Compute Engine에 간단한 데이터 영역 배포
  4. Traffic Director가 Envoy 사이드카 프록시를 구성할 수 있도록 Compute Engine API를 사용하여 Traffic Director 설정
  5. Envoy 프록시를 실행하는 VM에 로그인하고 Envoy 프록시를 통해 부하 분산된 백엔드로 요청 전송

이 문서의 구성 예시는 데모용입니다. 프로덕션 환경의 경우 환경 및 요구사항에 따라 추가 구성요소를 배포해야 할 수 있습니다.

Cloud OS Config API 사용 설정

Cloud OS Config API를 사용 설정했는지 확인합니다. 그렇게 하지 않으면 VM에 필수 구성요소를 설치할 수 없습니다.

방법은 다음과 같습니다.

콘솔

  1. Google Cloud 콘솔에서 API 및 서비스로 이동합니다.
    API 라이브러리 페이지로 이동
  2. 올바른 프로젝트를 선택합니다.
  3. 검색창에 Cloud OS Config API를 입력하고 Enter 키를 누릅니다.
  4. Cloud OS Config API를 선택합니다.
  5. 사용 설정을 클릭합니다.

gcloud

gcloud services enable osconfig.googleapis.com

Hello World 테스트 서비스 만들기

이 섹션에서는 클라이언트에서 요청한 VM의 호스트 이름을 반환하는 간단한 테스트 서비스를 만드는 방법을 보여줍니다. 테스트 서비스는 복잡하지 않습니다. Compute Engine 관리형 인스턴스 그룹 전체에 배포되는 웹 서버입니다.

Hello World 테스트 서비스의 인스턴스 템플릿 만들기

만든 인스턴스 템플릿은 startup-script 매개변수를 사용하여 샘플 apache2 웹 서버를 구성합니다.

Console

  1. Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿으로 이동

  2. 인스턴스 템플릿 만들기를 클릭합니다.
  3. 필드에 다음 정보를 입력합니다.
    • 이름: td-demo-hello-world-template
    • 부팅 디스크: 운영체제 및 버전 선택
    • 서비스 계정: Compute Engine 기본 서비스 계정
    • 액세스 범위: 모든 Cloud API에 대한 전체 액세스 허용
  4. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭합니다. 1 네트워킹 탭의 네트워크 태그 필드에 td-http-server 태그를 추가합니다.
  5. 관리 탭에서 시작 스크립트 필드에 다음 스크립트를 복사합니다.

    #!/bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
    
  6. 만들기를 클릭합니다.

gcloud

여러 운영체제 버전 중에서 선택할 수 있습니다. 이 예시에서는 기본값 Debian 10을 사용합니다.

인스턴스 템플릿을 만들려면 다음 안내를 따르세요.

gcloud compute instance-templates create td-demo-hello-world-template \
  --machine-type=n1-standard-1 \
  --boot-disk-size=20GB \
  --image-family=debian-10  \
  --image-project=debian-cloud \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=td-http-server \
  --metadata=startup-script="#! /bin/bash
sudo apt-get update -y
sudo apt-get install apache2 -y
sudo service apache2 restart
sudo mkdir -p /var/www/html/
echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"

Hello World 서비스의 관리형 인스턴스 그룹 만들기

이 섹션에서는 관리형 인스턴스 그룹에 항상 테스트 서비스의 인스턴스 두 개가 있도록 지정합니다. 이는 데모용입니다. Traffic Director는 자동 확장되는 관리형 인스턴스 그룹을 지원합니다.

Console

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

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

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
  4. 관리형 인스턴스 그룹의 이름으로 td-demo-hello-world-mig를 입력하고 us-central1-a 영역을 선택합니다.
  5. 인스턴스 템플릿에서 사용자가 만든 인스턴스 템플릿인 td-demo-hello-world-template을 선택합니다.
  6. 자동 확장 모드에서 Off:do not autoscale을 선택합니다.
  7. 인스턴스 최대 수에서 그룹에 만들려는 인스턴스의 수로 두 개 이상을 지정합니다.
  8. 만들기를 클릭합니다.

gcloud

gcloud CLI를 사용하여 이전에 만든 인스턴스 템플릿으로 관리형 인스턴스 그룹을 만듭니다.

gcloud compute instance-groups managed create td-demo-hello-world-mig \
  --zone us-central1-a \
  --size=2 \
  --template=td-demo-hello-world-template

Envoy가 배포된 인스턴스 템플릿 및 관리형 인스턴스 그룹 만들기

이 섹션의 안내에 따라 Envoy 프록시가 자동으로 배포된 Traffic Director용 인스턴스 템플릿 및 관리형 인스턴스 그룹을 만듭니다. 관리형 인스턴스 그룹은 자동 확장을 사용하여 새 백엔드 VM을 만듭니다.

VM에서 실행되는 소프트웨어 구성요소

다음 구성요소는 --service-proxy=enabled를 사용하여 인스턴스 템플릿을 만들 때 VM에 설치됩니다.

  • Traffic Director에서 구성한 Envoy 프록시가 전용 Cloud Storage 버킷에서 다운로드됩니다. 버킷에는 Google에서 제공하는 Envoy 프록시 빌드가 포함됩니다.
  • Envoy 프록시 및 프록시의 구성요소를 초기화하는 서비스 프록시 에이전트입니다. 서비스 프록시 에이전트는 트래픽 가로채기를 설정하고, VM이 실행될 때 Envoy 프록시의 상태를 모니터링합니다. 서비스 프록시 에이전트도 Cloud Storage 버킷에서 다운로드됩니다.

사용 가능한 Envoy 버전은 전용 Cloud Storage 위치에서 호스팅되는 최신 Envoy 바이너리 뿐입니다. 이 Envoy 버전은 Compute Engine Debian, CentOS 7/8, RHEL 7/8에서 지원됩니다. 자동 복구 및 수직 확장 중에 관리형 인스턴스 그룹은 VM에 최신 버전의 Envoy를 설치합니다. 경우에 따라 이 버전이 이전에 생성된 VM 인스턴스에 배포된 Envoy보다 최신 버전일 수 있습니다. 이로 인해 관리형 인스턴스 그룹의 VM 전반에 설치된 버전이 일치하지 않을 수 있습니다. 일치하지 않는 버전 역시 올바르게 작동합니다. Envoy에 보안 업데이트가 있는 경우 순차적 교체를 사용하여 관리형 인스턴스 그룹을 업그레이드하는 것이 좋습니다.

인스턴스 템플릿 만들기

인스턴스 템플릿은 관리형 인스턴스 그룹에서 생성된 VM 인스턴스의 구성을 지정합니다. 인스턴스 템플릿에 전달하는 플래그는 Envoy를 설치하고 VM 인스턴스를 Traffic Director에 사용할 수 있도록 구성합니다.

인스턴스 템플릿에서 부팅 디스크 이미지로 Debian 10/11, CentOS 7/8, RHEL 7/8을 사용할 수 있습니다.

이러한 인스턴스 템플릿을 만들려면 다음 안내를 따르세요.

  gcloud compute instance-templates create td-vm-template-auto \
    --image-family=[ debian-10 | centos-7 | centos-8 | rhel-7 | rhel-8 ]  \
    --image-project=[ debian-cloud | centos-cloud |rhel-cloud ] \
    --service-proxy=enabled
 

Envoy 배포를 맞춤설정하려면 자동 Envoy 배포 참조 가이드를 참조하세요.

관리형 인스턴스 그룹 만들기

Console

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

    인스턴스 그룹으로 이동

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 관리형 인스턴스 그룹의 이름으로 td-vm-mig-us-central1를 입력하고 us-central1-a 영역을 선택합니다.
  4. 그룹 유형에서 관리형 인스턴스 그룹을 선택합니다.
  5. 인스턴스 템플릿에서 자신이 만든 인스턴스 템플릿인 td-vm-template-auto을 선택합니다.
  6. 2를 그룹에 만들 인스턴스의 수로 지정합니다.
  7. 만들기를 클릭하여 새 그룹을 만듭니다.

gcloud

gcloud CLI를 사용하여 이전에 만든 인스턴스 템플릿으로 관리형 인스턴스 그룹을 만듭니다.

 gcloud compute instance-groups managed create td-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template-auto

Google Cloud 부하 분산 구성요소로 Traffic Director 구성

이 섹션의 안내에서는 Envoy 프록시가 2개의 백엔드 인스턴스 간에 아웃바운드 트래픽의 부하를 분산하도록 Traffic Director를 구성하는 방법을 보여줍니다. 다음 구성요소를 구성합니다.

상태 확인 만들기

상태 확인을 만들려면 다음 안내를 따르세요. 자세한 내용은 상태 확인 만들기를 참조하세요.

Console

  1. Google Cloud 콘솔의 상태 점검 페이지로 이동합니다.
    상태 확인 페이지로 이동
  2. 상태 확인 생성을 클릭합니다.
  3. 이름에 td-vm-health-check를 입력합니다.
  4. 프로토콜에서 HTTP를 선택합니다.
  5. 만들기를 클릭합니다.

gcloud

  1. 상태 확인을 만듭니다.

    gcloud compute health-checks create http td-vm-health-check
    

방화벽 규칙 만들기

다음 안내에 따라 상태 점검 프로브에 필요한 방화벽 규칙을 만듭니다. 자세한 내용은 상태 확인을 위한 방화벽 규칙을 참조하세요.

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
    방화벽 정책 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭합니다.
  3. 방화벽 규칙 만들기 페이지에서 다음 정보를 입력합니다.
    • 이름: fw-allow-health-checks
    • 네트워크: VPC 네트워크를 선택합니다.
    • 우선순위: 우선순위의 번호를 입력하거나 기본값 1,000을 사용합니다.
    • 트래픽 방향: 인그레스를 선택합니다.
    • 일치 시 작업: 허용을 선택합니다.
    • 대상: 지정된 대상 태그를 선택한 다음 대상 태그 텍스트 상자에 td-http-server를 입력합니다.
    • 소스 필터: 올바른 IP 범위 유형을 선택합니다.
    • 소스 IP 범위: 35.191.0.0/16,130.211.0.0/22
    • 대상 필터: IP 유형을 선택합니다.
    • 프로토콜 및 포트: 지정된 포트 및 프로토콜을 클릭한 후 포트 80에서 tcp 유형을 확인합니다.

gcloud

  1. 상태 확인의 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags td-http-server \
      --rules tcp:80
    

백엔드 서비스 만들기

백엔드 서비스를 만듭니다. Google Cloud CLI를 사용하는 경우 INTERNAL_SELF_MANAGED의 부하 분산 스킴을 사용해서 전역 백엔드 서비스로 지정해야 합니다. 백엔드 서비스에 상태 확인과 관리형 또는 비관리형 인스턴스 그룹을 추가합니다. 이 예시에서는 관리형 인스턴스 그룹 만들기에서 만든 샘플 HTTP 서비스를 실행하는 Compute Engine VM 템플릿과 함께 관리형 인스턴스 그룹을 사용합니다.

Console

  1. Google Cloud Console에서 Traffic Director 페이지로 이동합니다.

    Traffic Director 페이지로 이동

  2. 서비스 탭에서 서비스 만들기를 클릭합니다.

  3. 계속을 클릭합니다.

  4. 서비스 이름으로 td-vm-service를 입력합니다.

  5. 올바른 VPC 네트워크를 선택합니다.

  6. 백엔드 유형인스턴스 그룹인지 확인합니다.

  7. Hello World 테스트 서비스의 백엔드가 포함된 생성한 관리형 인스턴스 그룹인 td-demo-hello-world-mig를 선택합니다.

  8. 올바른 포트 번호를 입력합니다.

  9. 사용률 또는 전송률분산 모드로 선택합니다. 기본값은 전송률입니다.

  10. 완료를 클릭합니다.

  11. 생성된 상태 확인을 선택하거나 다른 상태 확인 생성을 클릭하고 프로토콜로 HTTP를 선택합니다.

  12. 연결 드레이닝 제한 시간에서 값을 30초 이상으로 설정합니다.

  13. 계속을 클릭합니다.

  14. 만들기를 클릭합니다.

gcloud

  1. 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --connection-draining-timeout=30s \
     --health-checks td-vm-health-check
    
  2. 백엔드 서비스에 백엔드를 추가합니다.

    gcloud compute backend-services add-backend td-vm-service \
      --instance-group td-demo-hello-world-mig \
      --instance-group-zone us-central1-a \
      --global
    

라우팅 규칙 맵 만들기

라우팅 규칙 맵은 Traffic Director가 메시의 트래픽을 라우팅하는 방법을 정의합니다. 라우팅 규칙 맵의 일부로 가상 IP(VIP) 주소와 호스트 기반 라우팅과 같은 연결된 트래픽 관리 규칙 집합을 구성합니다. 애플리케이션이 VIP에 요청을 전송하면 Envoy 프록시가 다음을 수행합니다.

  1. 요청을 가로챕니다.
  2. URL 맵의 트래픽 관리 규칙에 따라 요청을 평가합니다.
  3. 요청의 호스트 이름을 기반으로 백엔드 서비스를 선택합니다.
  4. 선택한 백엔드 서비스와 연결된 백엔드 또는 엔드포인트를 선택합니다.
  5. 이 백엔드 또는 엔드포인트로 트래픽을 전송합니다.

트래픽 관리에 대한 자세한 내용은 고급 트래픽 관리를 참조하세요.

Console

Google Cloud 콘솔에서 대상 프록시 생성이 전달 규칙 생성과 결합됩니다. 전달 규칙을 만들면 Google Cloud가 자동으로 대상 HTTP 프록시를 만들어 URL 맵에 연결합니다.

  1. Google Cloud 콘솔에서 Traffic Director 페이지로 이동합니다.

    Traffic Director 페이지로 이동

  2. 라우팅 규칙 맵 탭에서 라우팅 규칙 맵 만들기를 클릭합니다.

  3. 이름을 입력합니다.

  4. 전달 규칙 추가를 클릭합니다.

  5. 전달 규칙 이름으로 td-vm-forwarding-rule을 입력합니다.

  6. 네트워크를 선택합니다.

  7. 내부 IP를 선택합니다. 내부 IP 주소로 전송된 트래픽은 Envoy 프록시가 가로채서 호스트 및 경로 규칙에 따라 적절한 서비스로 전송합니다.

    전달 규칙은 load-balancing-schemeINTERNAL_SELF_MANAGED로 설정된 글로벌 전달 규칙으로 생성됩니다.

  8. 커스텀 IP 필드에 10.0.0.1을 입력합니다. VM이 해당 IP 주소로 전송하면 Envoy 프록시는 이를 가로채고 URL 맵에 정의된 트래픽 관리 규칙에 따라 적절한 백엔드 서비스의 엔드포인트로 전송합니다.

    VPC 네트워크의 각 전달 규칙은 VPC 네트워크마다 고유한 IP 주소와 포트가 있어야 합니다. 특정 VPC 네트워크에서 동일한 IP 주소와 포트를 사용하여 전달 규칙을 2개 이상 만들면 첫 번째 전달 규칙만 유효합니다. 나머지는 무시됩니다. 네트워크에서 10.0.0.1을 사용할 수 없는 경우 다른 IP 주소를 선택하세요.

  9. 포트80으로 설정되었는지 확인합니다.

  10. 저장을 클릭합니다.

  11. 라우팅 규칙 섹션에서 단순한 호스트 및 경로 규칙을 선택합니다.

  12. 호스트 및 경로 규칙 섹션에서 td-vm-service를 서비스로 선택합니다.

  13. 호스트 및 경로 규칙 추가를 클릭합니다.

  14. 호스트hello-world를 입력합니다.

  15. 서비스에서 td-vm-service를 선택합니다.

  16. 저장을 클릭합니다.

gcloud

  1. 백엔드 서비스 td-vm-service를 기본값으로 사용하는 URL 맵을 만듭니다.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. 경로 일치자 및 호스트 규칙을 만들어 호스트 이름 및 경로를 기반으로 서비스 트래픽을 라우팅합니다. 이 예시에서는 td-vm-service를 서비스 이름으로 사용하고 이 호스트(/*)의 모든 경로 요청과 일치하는 기본 경로 일치자를 사용합니다.

    gcloud compute url-maps add-path-matcher td-vm-url-map \
       --default-service td-vm-service \
       --path-matcher-name td-vm-path-matcher
    
    gcloud compute url-maps add-host-rule td-vm-url-map \
       --path-matcher-name=td-vm-path-matcher \
       --hosts=hello-world
    
  3. 대상 HTTP 프록시를 만듭니다.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map=td-vm-url-map
    
  4. 전달 규칙을 만듭니다.

    전달 규칙은 글로벌이어야 하며 load-balancing-scheme 값을 INTERNAL_SELF_MANAGED로 설정하여 만들어야 합니다.

    gcloud compute forwarding-rules create td-vm-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=10.0.0.1 \
       --target-http-proxy=td-vm-proxy \
       --ports=80 \
       --network=default
    

이 시점에서 Traffic Director는 관리형 인스턴스 그룹의 백엔드에서 URL 맵에 지정된 서비스의 트래픽을 부하 분산하도록 구성됩니다.

구성 확인

Compute Engine VM용 Traffic Director 설정 가이드의 마지막 부분에서는 클라이언트 VM에서 전달 규칙 VIP로 전송된 트래픽이 가로채기를 당하고 Envoy 프록시로 리디렉션되는지 테스트합니다. 그런 다음 Envoy 프록시는 Hello World 서비스를 호스팅하는 VM으로 해당 요청을 라우팅합니다.

이렇게 하려면 트래픽을 가로채서 Envoy로 리디렉션하도록 구성된 클라이언트 VM에 로그인합니다. 라우팅 규칙 맵과 연결된 VIP에 curl 요청을 보냅니다. Envoy가 curl 요청을 검사하고, 해결할 서비스가 무엇인지 결정하며, 서비스와 연결된 백엔드로 요청을 전송합니다.

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

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

  2. td-vm-mig-us-central1 인스턴스 그룹을 선택합니다.
  3. VM 요약 섹션의 연결에서 SSH를 클릭합니다.
  4. 클라이언트 VM에 로그인한 후 curl 도구를 사용하여 Envoy를 통해 Hello World 서비스에 요청을 보냅니다.
curl -H "Host: hello-world" http://10.0.0.1/

이 명령어를 반복해서 실행하면 Hello World 관리형 인스턴스 그룹에 백엔드의 호스트 이름이 포함된 다른 HTML 응답이 표시됩니다. 이는 Hello World 서비스의 백엔드로 트래픽을 전송할 때 Envoy가 기본 부하 분산 알고리즘인 라운드 로빈 부하 분산을 사용하기 때문입니다.

다음 단계