HTTP 서비스로 Envoy 프록시용 Traffic Director 설정

이 가이드에서는 Envoy 프록시 기반 서비스 메시, HTTP 서비스, MeshHTTPRoute 리소스로 Traffic Director를 구성하는 방법을 보여줍니다.

HTTPRoute 및 Mesh 리소스가 있는 Envoy 프록시
Envoy 프록시HTTPRouteMesh 리소스 (확대하려면 클릭)

다음 가이드의 기본 요건을 따르세요.

Mesh 리소스 구성

사이드카로 실행되는 Envoy 프록시는 Traffic Director의 서비스 라우팅 구성을 수신합니다. Mesh 이름은 사이드카 프록시가 Mesh 리소스와 연결된 구성을 요청하는 데 사용하는 키입니다. Traffic Director는 프록시에 라우팅 구성을 제공합니다. 그러면 사이드카 프록시는 Route 리소스에 구성된 호스트 이름, 헤더 등과 같은 요청 매개변수를 사용하여 트래픽을 올바른 백엔드 서비스로 전달합니다.

  1. Mesh 리소스 사양을 만들고 mesh.yaml이라는 파일에 저장합니다.

    name: sidecar-mesh
    interception_port: 15001
    

mesh.yaml 파일에 지정하지 않으면 가로채기 포트의 기본값은 15001입니다.

  1. Mesh.yaml 사양을 사용하여 Mesh 리소스를 만듭니다.

    gcloud alpha network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

Mesh 리소스가 생성되면 Traffic Director가 구성을 제공할 수 있지만 아직 정의된 서비스가 없으므로 구성이 비어 있습니다. 다음 단계는 서비스와 첨부파일을 정의하는 것입니다.

HTTP 서버 구성

여기에서는 관리형 인스턴스 그룹을 백엔드로 사용하여 자동 확장된 VM을 사용하는 백엔드 서비스를 만듭니다. VM은 포트 80에서 HTTP 프로토콜을 사용하여 hello world 구문을 제공합니다.

  1. 포트 80에서 helloworld HTTP 서비스로 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create td-httpd-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-td-server \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype <html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
  2. 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create http-td-mig-us-east1 \
      --zone=${ZONE} \
      --size=2 \
      --template=td-httpd-vm-template
    
  3. 상태 점검을 만듭니다.

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. 네트워크 인스턴스에 들어오는 상태 확인 연결을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create http-vm-allow-health-checks \
      --network=default \
      --action=ALLOW \
      --direction=INGRESS \
      --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
      --target-tags=http-td-server \
      --rules=tcp:80
    
  5. 부하 분산 스키마가 INTERNAL_SELF_MANAGED전역 백엔드 서비스를 만들고 상태 확인을 추가합니다.

    gcloud compute backend-services create http-helloworld-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --protocol=HTTP \
      --health-checks http-helloworld-health-check
    
  6. 관리형 인스턴스 그룹을 백엔드 서비스에 추가합니다. 다음 예시에서는 이전에 만든 관리형 인스턴스 그룹을 사용합니다. 관리형 인스턴스 그룹의 VM은 사용자가 만든 샘플 HTTP 서비스를 실행합니다.

    gcloud compute backend-services add-backend http-helloworld-service \
      --instance-group=http-td-mig-us-east1 \
      --instance-group-zone=${ZONE} \
      --global
    

HTTPRoute로 라우팅 설정

Mesh 리소스와 서비스가 구성되었습니다. 호스트 이름을 백엔드 서비스와 연결하는 HTTPRoute 리소스와 연결합니다.

  1. HTTPRoute 사양을 만들어 http_route.yaml라는 파일에 저장합니다.

    name: helloworld-http-route
    hostnames:
    - helloworld-gce
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
       destinations:
       - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
    
  2. http_route.yaml 파일의 사양을 사용하여 HTTPRoute 리소스를 만듭니다.

    gcloud alpha network-services http-routes import helloworld-http-route \
      --source=http_route.yaml \
      --location=global
    

이제 Traffic Director가 관리형 인스턴스 그룹의 VM에서 HTTPRoute 리소스에 지정된 서비스의 트래픽을 부하 분산하도록 구성되었습니다.

Envoy 사이드카가 있는 HTTP 클라이언트 만들기

앞에서 만든 Traffic Director 구성을 요청하는 Envoy 사이드카 프록시로 클라이언트 VM을 만들어 배포를 확인할 수 있습니다. gcloud 명령어의 mesh 매개변수는 이미 만든 Mesh 리소스를 나타냅니다.

  1. 인스턴스 템플릿을 만듭니다.

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh
    
  2. Traffic Director에 연결된 Envoy 프록시가 있는 VM을 만듭니다.

    gcloud compute instances create td-vm-client \
      --zone=${ZONE} \
      --source-instance-template td-vm-client-template
    
  3. VM에 로그인합니다.

    gcloud compute ssh td-vm-client
    
  4. curl 명령어를 실행하여 테스트 서비스에 대한 HTTP 연결을 확인합니다.

    curl -H "Host: helloworld-gce" http://10.0.0.1/
    

이 명령어는 관리형 인스턴스 그룹에 있는 VM 중 하나에서 응답을 반환하고 호스트 이름이 콘솔에 출력되어야 합니다.