자동 Envoy 배포를 사용한 Compute Engine VM 설정
이 문서는 이전 API에 적용됩니다. 현재 미리보기 상태인 새 서비스 라우팅 API를 사용하여 배포하는 경우에는 HTTP 서비스로 Envoy 프록시에 대한 Cloud Service Mesh 설정을 참조하세요.
이 가이드의 안내를 따르기 전에 Envoy 및 프록시리스 워크로드로 서비스 라우팅 API 설정 준비에 설명된 필수 작업을 완료하세요.
이 가이드에서는 Envoy 사이드카 프록시로 구성된 데이터 영역을 자동으로 배포하고, Cloud Service Mesh를 사용하여 이를 구성하고, 설정이 올바르게 작동하는지 확인하는 방법을 보여줍니다. 프로세스에는 다음이 포함됩니다.
- Cloud OS Config API 사용 설정
- 테스트 서비스 만들기
- Envoy 프록시(xDS v3만 지원하는 Envoy 버전 1.18.4)를 사용하여 Compute Engine에 간단한 데이터 영역 배포
- Cloud Service Mesh가 Envoy 사이드카 프록시를 구성할 수 있도록 Compute Engine API를 사용하여 Cloud Service Mesh 설정
- Envoy 프록시를 실행하는 VM에 로그인하고 Envoy 프록시를 통해 부하 분산된 백엔드로 요청 전송
이 문서의 구성 예시는 데모용입니다. 프로덕션 환경의 경우 환경 및 요구사항에 따라 추가 구성요소를 배포해야 할 수 있습니다.
Cloud OS Config API 사용 설정
Cloud OS Config API를 사용 설정했는지 확인합니다. 그렇게 하지 않으면 VM에 필수 구성요소를 설치할 수 없습니다.
방법은 다음과 같습니다.
콘솔
- Google Cloud 콘솔에서 API 및 서비스로 이동합니다.
API 라이브러리 페이지로 이동 - 올바른 프로젝트를 선택합니다.
- 검색창에 Cloud OS Config API를 입력하고 Enter 키를 누릅니다.
- Cloud OS Config API를 선택합니다.
- 사용 설정을 클릭합니다.
gcloud
gcloud services enable osconfig.googleapis.com
Hello World
테스트 서비스 만들기
이 섹션에서는 클라이언트에서 요청한 VM의 호스트 이름을 반환하는 간단한 테스트 서비스를 만드는 방법을 보여줍니다. 테스트 서비스는 복잡하지 않습니다. Compute Engine 관리형 인스턴스 그룹 전체에 배포되는 웹 서버입니다.
Hello World
테스트 서비스의 인스턴스 템플릿 만들기
만든 인스턴스 템플릿은 startup-script
매개변수를 사용하여 샘플 apache2 웹 서버를 구성합니다.
콘솔
- Google Cloud 콘솔에서 인스턴스 템플릿 페이지로 이동합니다.
- 인스턴스 템플릿 만들기를 클릭합니다.
- 필드에 다음 정보를 입력합니다.
- 이름:
td-demo-hello-world-template
- 부팅 디스크: 운영체제 및 버전 선택
- 서비스 계정: Compute Engine 기본 서비스 계정
- 액세스 범위: 모든 Cloud API에 대한 전체 액세스 허용
- 이름:
- 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭합니다.
1 네트워킹 탭의 네트워크 태그 필드에
td-http-server
태그를 추가합니다. 관리 탭에서 시작 스크립트 필드에 다음 스크립트를 복사합니다.
#!/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
만들기를 클릭합니다.
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
서비스의 관리형 인스턴스 그룹 만들기
이 섹션에서는 관리형 인스턴스 그룹에 항상 테스트 서비스의 인스턴스 두 개가 있도록 지정합니다. 이는 데모용입니다. Cloud Service Mesh는 자동 확장되는 관리형 인스턴스 그룹을 지원합니다.
콘솔
- Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
- 인스턴스 그룹 만들기를 클릭합니다.
- 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다. 자세한 내용은 스테이트리스(Stateless) 또는 스테이트풀(Stateful) MIG를 참조하세요.
- 관리형 인스턴스 그룹의 이름으로
td-demo-hello-world-mig
를 입력하고us-central1-a
영역을 선택합니다. - 인스턴스 템플릿에서 사용자가 만든 인스턴스 템플릿인
td-demo-hello-world-template
을 선택합니다. - 자동 확장 모드에서
Off:do not autoscale
을 선택합니다. - 인스턴스 최대 수에서 그룹에 만들려는 인스턴스의 수로 두 개 이상을 지정합니다.
- 만들기를 클릭합니다.
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 프록시를 사용하여 Cloud Service Mesh의 인스턴스 템플릿 및 관리형 인스턴스 그룹을 만듭니다. 관리형 인스턴스 그룹은 자동 확장을 사용하여 새 백엔드 VM을 만듭니다.
VM에서 실행되는 소프트웨어 구성요소
다음 구성요소는 --service-proxy=enabled
를 사용하여 인스턴스 템플릿을 만들 때 VM에 설치됩니다.
- Cloud Service Mesh에서 구성한 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 인스턴스를 Cloud Service Mesh에 사용할 수 있도록 구성합니다.
인스턴스 템플릿에서 부팅 디스크 이미지로 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 배포 참조 가이드를 참조하세요.
관리형 인스턴스 그룹 만들기
콘솔
- Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
- 인스턴스 그룹 만들기를 클릭합니다.
- 관리형 인스턴스 그룹의 이름으로
td-vm-mig-us-central1
를 입력하고us-central1-a
영역을 선택합니다. - 그룹 유형에서 관리형 인스턴스 그룹을 선택합니다.
- 인스턴스 템플릿에서 자신이 만든 인스턴스 템플릿인
td-vm-template-auto
을 선택합니다. 2
를 그룹에 만들 인스턴스의 수로 지정합니다.- 만들기를 클릭하여 새 그룹을 만듭니다.
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 부하 분산 구성요소로 Cloud Service Mesh 구성
이 섹션의 안내에서는 Envoy 프록시가 2개의 백엔드 인스턴스 간에 아웃바운드 트래픽의 부하를 분산하도록 Cloud Service Mesh를 구성하는 방법을 보여줍니다. 다음 구성요소를 구성합니다.
- 상태 확인. 상태 확인에 대한 자세한 내용은 상태 확인 개념 및 상태 확인 만들기를 참조하세요.
- 상태 확인 프로브가 백엔드에 도달하도록 사용 설정하는 방화벽 규칙입니다. 자세한 내용은 상태 확인 개념을 참조하세요.
- 백엔드 서비스. 백엔드 서비스에 대한 자세한 내용은 백엔드 서비스를 참조하세요.
- 라우팅 규칙 맵. 여기에는 전달 규칙 및 URL 맵 만들기가 포함됩니다. 자세한 내용은 전달 규칙 사용 및 URL 맵 사용을 참조하세요.
상태 확인 만들기
상태 확인을 만들려면 다음 안내를 따르세요. 자세한 내용은 상태 확인 만들기를 참조하세요.
콘솔
- Google Cloud 콘솔의 상태 점검 페이지로 이동합니다.
상태 확인 페이지로 이동 - 상태 확인 생성을 클릭합니다.
- 이름에
td-vm-health-check
를 입력합니다. - 프로토콜에서 HTTP를 선택합니다.
- 만들기를 클릭합니다.
gcloud
상태 확인을 만듭니다.
gcloud compute health-checks create http td-vm-health-check
방화벽 규칙 만들기
다음 안내에 따라 상태 점검 프로브에 필요한 방화벽 규칙을 만듭니다. 자세한 내용은 상태 확인을 위한 방화벽 규칙을 참조하세요.
콘솔
- Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 정책 페이지로 이동 - 방화벽 규칙 만들기를 클릭합니다.
- 방화벽 규칙 만들기 페이지에서 다음 정보를 입력합니다.
- 이름:
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
상태 확인의 방화벽 규칙을 만듭니다.
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 템플릿과 함께 관리형 인스턴스 그룹을 사용합니다.
콘솔
Google Cloud 콘솔에서 Cloud Service Mesh 페이지로 이동합니다.
서비스 탭에서 서비스 만들기를 클릭합니다.
계속을 클릭합니다.
서비스 이름으로
td-vm-service
를 입력합니다.올바른 VPC 네트워크를 선택합니다.
백엔드 유형이 인스턴스 그룹인지 확인합니다.
Hello World
테스트 서비스의 백엔드가 포함된 생성한 관리형 인스턴스 그룹인td-demo-hello-world-mig
를 선택합니다.올바른 포트 번호를 입력합니다.
사용률 또는 전송률을 분산 모드로 선택합니다. 기본값은 전송률입니다.
완료를 클릭합니다.
생성된 상태 확인을 선택하거나 다른 상태 확인 생성을 클릭하고 프로토콜로 HTTP를 선택합니다.
연결 드레이닝 제한 시간에서 값을
30
초 이상으로 설정합니다.계속을 클릭합니다.
만들기를 클릭합니다.
gcloud
백엔드 서비스를 만듭니다.
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
백엔드 서비스에 백엔드를 추가합니다.
gcloud compute backend-services add-backend td-vm-service \ --instance-group td-demo-hello-world-mig \ --instance-group-zone us-central1-a \ --global
라우팅 규칙 맵 만들기
라우팅 규칙 맵은 Cloud Service Mesh가 메시의 트래픽을 라우팅하는 방법을 정의합니다. 라우팅 규칙 맵의 일부로 가상 IP(VIP) 주소와 호스트 기반 라우팅과 같은 연결된 트래픽 관리 규칙 집합을 구성합니다. 애플리케이션이 VIP에 요청을 전송하면 Envoy 프록시가 다음을 수행합니다.
- 요청을 가로챕니다.
- URL 맵의 트래픽 관리 규칙에 따라 요청을 평가합니다.
- 요청의 호스트 이름을 기반으로 백엔드 서비스를 선택합니다.
- 선택한 백엔드 서비스와 연결된 백엔드 또는 엔드포인트를 선택합니다.
- 이 백엔드 또는 엔드포인트로 트래픽을 전송합니다.
트래픽 관리에 대한 자세한 내용은 고급 트래픽 관리를 참조하세요.
콘솔
Google Cloud 콘솔에서 대상 프록시 생성이 전달 규칙 생성과 결합됩니다. 전달 규칙을 만들면 Google Cloud가 자동으로 대상 HTTP 프록시를 만들어 URL 맵에 연결합니다.
Google Cloud 콘솔에서 Cloud Service Mesh 페이지로 이동합니다.
라우팅 규칙 맵 탭에서 라우팅 규칙 맵 만들기를 클릭합니다.
이름을 입력합니다.
전달 규칙 추가를 클릭합니다.
전달 규칙 이름으로
td-vm-forwarding-rule
을 입력합니다.네트워크를 선택합니다.
내부 IP를 선택합니다. 내부 IP 주소로 전송된 트래픽은 Envoy 프록시가 가로채서 호스트 및 경로 규칙에 따라 적절한 서비스로 전송합니다.
전달 규칙은
load-balancing-scheme
가INTERNAL_SELF_MANAGED
로 설정된 글로벌 전달 규칙으로 생성됩니다.커스텀 IP 필드에
10.0.0.1
을 입력합니다. VM이 해당 IP 주소로 전송하면 Envoy 프록시는 이를 가로채고 URL 맵에 정의된 트래픽 관리 규칙에 따라 적절한 백엔드 서비스의 엔드포인트로 전송합니다.VPC 네트워크의 각 전달 규칙은 VPC 네트워크마다 고유한 IP 주소와 포트가 있어야 합니다. 특정 VPC 네트워크에서 동일한 IP 주소와 포트를 사용하여 전달 규칙을 2개 이상 만들면 첫 번째 전달 규칙만 유효합니다. 나머지는 무시됩니다. 네트워크에서
10.0.0.1
을 사용할 수 없는 경우 다른 IP 주소를 선택하세요.포트가
80
으로 설정되었는지 확인합니다.저장을 클릭합니다.
라우팅 규칙 섹션에서 단순한 호스트 및 경로 규칙을 선택합니다.
호스트 및 경로 규칙 섹션에서
td-vm-service
를 서비스로 선택합니다.호스트 및 경로 규칙 추가를 클릭합니다.
호스트에
hello-world
를 입력합니다.서비스에서
td-vm-service
를 선택합니다.저장을 클릭합니다.
gcloud
백엔드 서비스
td-vm-service
를 기본값으로 사용하는 URL 맵을 만듭니다.gcloud compute url-maps create td-vm-url-map \ --default-service td-vm-service
경로 일치자 및 호스트 규칙을 만들어 호스트 이름 및 경로를 기반으로 서비스 트래픽을 라우팅합니다. 이 예시에서는
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
대상 HTTP 프록시를 만듭니다.
gcloud compute target-http-proxies create td-vm-proxy \ --url-map=td-vm-url-map
전달 규칙을 만듭니다.
전달 규칙은 글로벌이어야 하며
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
이 시점에서 Cloud Service Mesh는 관리형 인스턴스 그룹의 백엔드에서 URL 맵에 지정된 서비스의 트래픽 부하를 분산하도록 구성됩니다.
구성 확인
Compute Engine VM용 Cloud Service Mesh 설정 가이드의 마지막 부분에서는 클라이언트 VM에서 전달 규칙 VIP로 전송된 트래픽이 가로채기를 당하고 Envoy 프록시로 리디렉션되는지 테스트합니다. 그런 다음 Envoy 프록시는 Hello World
서비스를 호스팅하는 VM으로 해당 요청을 라우팅합니다.
이렇게 하려면 트래픽을 가로채서 Envoy로 리디렉션하도록 구성된 클라이언트 VM에 로그인합니다. 라우팅 규칙 맵과 연결된 VIP에 curl
요청을 보냅니다. Envoy가 curl
요청을 검사하고, 해결할 서비스가 무엇인지 결정하며, 서비스와 연결된 백엔드로 요청을 전송합니다.
- Google Cloud 콘솔에서 인스턴스 그룹 페이지로 이동합니다.
td-vm-mig-us-central1
인스턴스 그룹을 선택합니다.- VM 요약 섹션의 연결에서 SSH를 클릭합니다.
- 클라이언트 VM에 로그인한 후
curl
도구를 사용하여 Envoy를 통해Hello World
서비스에 요청을 보냅니다.
curl -H "Host: hello-world" http://10.0.0.1/
이 명령어를 반복해서 실행하면 Hello World
관리형 인스턴스 그룹에 백엔드의 호스트 이름이 포함된 다른 HTML 응답이 표시됩니다.
이는 Hello World
서비스의 백엔드로 트래픽을 전송할 때 Envoy가 기본 부하 분산 알고리즘인 라운드 로빈 부하 분산을 사용하기 때문입니다.
다음 단계
- 고급 트래픽 관리 알아보기
- Envoy로 관측 가능성 설정 방법 알아보기
- Cloud Service Mesh 배포 문제 해결 방법 알아보기
- 자동 Envoy 배포 옵션 가이드에서 고급 배포 옵션 알아보기