設定 Compute Engine VM 和無 Proxy gRPC 服務
本指南說明如何設定 Cloud Service Mesh 所需的 Compute Engine VM 主機、gRPC 應用程式和負載平衡元件。
在按照本指南中的說明操作之前,請先參閱「準備設定使用無 Proxy gRPC 服務的 Cloud Service Mesh」
總覽
使用 Compute Engine 虛擬機器 (VM) 和無 Proxy gRPC 服務設定 Cloud Service Mesh 的步驟如下:
- 設定代管執行個體群組,用於代管後端。
- 設定後端以執行 gRPC 伺服器,在回應用戶端要求時傳回
hello world
。 - 使用代管執行個體群組和其他 Google Cloud 負載平衡元件設定 Cloud Service Mesh。
- 使用無 Proxy gRPC 用戶端應用程式,將流量傳送至 gRPC 伺服器應用程式,驗證部署作業是否正常運作。
無 Proxy gRPC 用戶端會使用 xDS 連線至 Cloud Service Mesh。當用戶端連線至 Cloud Service Mesh 時,Cloud Service Mesh 會將與 hello world
服務相關聯的後端資訊傳送給用戶端。無 Proxy gRPC 用戶端會利用這項資訊,將要求傳送至 hello world
gRPC 伺服器。
為 Cloud Service Mesh 設定代管執行個體群組
代管執行個體群組會根據部署作業的需要,使用自動調度資源功能建立新的後端 VM。本範例說明如何執行下列操作:
- 使用範例服務建立執行個體範本,該服務會透過 gRPC 通訊協定提供
hello world
服務。 - 使用範本設定代管執行個體群組。
建立執行個體範本
本節將說明如何建立執行個體範本。在本例中,您會部署在 50051 埠公開的 helloworld
gRPC 服務。
主控台
- 前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。
- 點選 [建立執行個體範本]。
按照下方指示填入欄位:
- 名稱:grpc-td-vm-template
- 開機磁碟版本:Debian / Linux 10
- 服務帳戶:Compute Engine 預設服務帳戶
- 存取權範圍:允許所有 Google Cloud API 的完整存取權
在 [Firewall] (防火牆) 下方,勾選 [Allow HTTP traffic] (允許 HTTP 流量) 和 [Allow HTTPS traffic] (允許 HTTPS 流量) 的方塊。
按一下 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用)。
在「Management」分頁中,將下列指令碼複製到「Startup script」欄位。
#! /bin/bash set -e cd /root sudo apt-get update -y sudo apt-get install -y openjdk-11-jdk-headless curl -L https://github.com/grpc/grpc-java/archive/v1.37.0.tar.gz | tar -xz cd grpc-java-1.37.0/examples/example-hostname ../gradlew --no-daemon installDist # Server listens on 50051 sudo systemd-run ./build/install/hostname-server/bin/hostname-server
按一下 [建立]。
gcloud
建立執行個體範本。
gcloud compute instance-templates create grpc-td-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=allow-health-checks \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata-from-file=startup-script=<(echo '#! /bin/bash set -e cd /root sudo apt-get update -y sudo apt-get install -y openjdk-11-jdk-headless curl -L https://github.com/grpc/grpc-java/archive/v1.37.0.tar.gz | tar -xz cd grpc-java-1.37.0/examples/example-hostname ../gradlew --no-daemon installDist # Server listens on 50051 sudo systemd-run ./build/install/hostname-server/bin/hostname-server')
建立代管執行個體群組
在本節中,您將使用先前建立的執行個體範本,建立代管執行個體群組。
主控台
- 前往 Google Cloud 控制台的「Instance Groups」(執行個體群組) 頁面。
- 按一下「建立執行個體群組」。根據預設,您會看到建立代管執行個體群組的頁面。
- 輸入
grpc-td-mig-us-central1
做為代管執行個體群組的名稱,然後選取us-central1-a
區域。 - 在「Instance template」(執行個體範本) 下方,選取
grpc-td-vm-template
,也就是您建立的執行個體範本。 - 指定要在群組中建立的執行個體數量下限和上限為 2。
- 按一下 [建立]。
gcloud
建立代管執行個體群組。
gcloud compute instance-groups managed create grpc-td-mig-us-central1 \ --zone us-central1-a \ --size=2 \ --template=grpc-td-vm-template
設定具名通訊埠
在本節中,您將為 gRPC 服務設定命名通訊埠。命名的通訊埠是 gRPC 服務用來監聽要求的通訊埠。在這個範例中,已命名通訊埠為 50051。
主控台
- 前往 Google Cloud 控制台的「Instance Groups」(執行個體群組) 頁面。
- 按一下您建立的執行個體群組
grpc-td-mig-us-central1
名稱。 - 按一下「編輯群組」。
- 在「Port name」欄位中輸入
grpc-helloworld-port
。 - 在「Port number」(通訊埠編號) 欄位中輸入
50051
。 - 按一下 [儲存]。
gcloud
設定命名通訊埠。
gcloud compute instance-groups set-named-ports grpc-td-mig-us-central1 \ --named-ports=grpc-helloworld-port:50051 \ --zone us-central1-a
使用 Google Cloud 負載平衡器元件設定 Cloud Service Mesh
本節提供如何為服務設定 Cloud Service Mesh 和Google Cloud 負載平衡元件的操作說明。
建立健康狀態檢查、防火牆規則和後端服務
在本節中,您將使用 INTERNAL_SELF_MANAGED
的負載平衡機制和 GRPC
通訊協定建立全球後端服務,然後將健康狀態檢查和執行個體群組與後端服務建立關聯。在本例中,您會使用在「建立代管執行個體群組」一文中建立的代管執行個體群組。這個代管執行個體群組會執行範例 gRPC 服務。--port-name
旗標中的通訊埠是您在「設定具名通訊埠」中建立的具名通訊埠。
gcloud
建立健康狀態檢查。
gcloud compute health-checks create grpc grpc-helloworld-health-check \ --use-serving-port
建立健康狀態檢查防火牆規則。
gcloud compute firewall-rules create grpc-vm-allow-health-checks \ --network default --action allow --direction INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags allow-health-checks \ --rules tcp:50051
建立後端服務。
gcloud compute backend-services create grpc-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=GRPC \ --port-name=grpc-helloworld-port \ --health-checks=grpc-helloworld-health-check
將代管執行個體群組新增至後端服務。
gcloud compute backend-services add-backend grpc-helloworld-service \ --instance-group grpc-td-mig-us-central1 \ --instance-group-zone us-central1-a \ --global
建立轉送規則對應關係、目標 Proxy 和轉送規則
在本節中,您將建立網址對應、路徑比對器和主機規則,根據主機名稱和路徑轉送服務流量。以下範例使用 helloworld-gce
做為服務名稱。當 gRPC 應用程式連線至這項服務時,會在目標 URI 中使用這個服務名稱。根據預設,路徑比對器會比對此主機的所有路徑要求 (/*
)。您也需要建立目標 gRPC Proxy 和轉送規則。
詳情請參閱「轉送規則對應」。
在以下範例中,通訊埠 80 是指定的通訊埠。
gcloud
建立網址對應。
gcloud compute url-maps create grpc-vm-url-map \ --default-service grpc-helloworld-service
建立路徑比對器。
gcloud compute url-maps add-path-matcher grpc-vm-url-map \ --default-service grpc-helloworld-service \ --path-matcher-name grpc-vm-path-matcher \ --new-hosts helloworld-gce
建立目標 gRPC Proxy。
gcloud compute target-grpc-proxies create grpc-vm-proxy \ --url-map grpc-vm-url-map \ --validate-for-proxyless
建立轉寄規則。
gcloud compute forwarding-rules create grpc-vm-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 --address-region=us-central1 \ --target-grpc-proxy=grpc-vm-proxy \ --ports 80 \ --network default
Cloud Service Mesh 現已設定為針對網址對應中指定的服務,在代管執行個體群組的後端間負載平衡流量。
驗證設定
設定程序完成後,請確認您可以建立 gRPC 連線,連線至先前建立的 Cloud Service Mesh 負載平衡服務。
如要確認服務是否可用,請執行下列任一操作:
- 登入其中一個 VM 主機 (gRPC 服務後端),並確認 gRPC 服務是否在監聽通訊埠上執行。在這個範例中,通訊埠是 50051。
- 請查看 Cloud 控制台中的 Cloud Service Mesh 頁面,瞭解已設定的服務
helloworld-gce
相關資訊,並確認後端是否已回報為正常。 - 請按照下列操作說明,使用 Compute Engine gRPC 用戶端進行驗證。
使用 gRPC 用戶端應用程式驗證服務
在下列範例中,您可以使用所選語言的 gRPC 用戶端,或 grpcurl
工具來測試 gRPC 服務。
首先,請建立用戶端 VM,並在其中執行 gRPC 用戶端來測試服務。
gcloud compute instances create grpc-client \ --zone us-central1-a \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata-from-file=startup-script=<(echo '#! /bin/bash set -e export GRPC_XDS_BOOTSTRAP=/run/td-grpc-bootstrap.json # Expose bootstrap variable to SSH connections echo export GRPC_XDS_BOOTSTRAP=$GRPC_XDS_BOOTSTRAP | sudo tee /etc/profile.d/grpc-xds-bootstrap.sh # Create the bootstrap file curl -L https://storage.googleapis.com/traffic-director/td-grpc-bootstrap-0.16.0.tar.gz | tar -xz ./td-grpc-bootstrap-0.16.0/td-grpc-bootstrap | tee $GRPC_XDS_BOOTSTRAP')
設定環境變數和啟動檔案
用戶端應用程式需要一個引導設定檔。上一節中的啟動指令碼會設定 GRPC_XDS_BOOTSTRAP
環境變數,並使用輔助指令碼產生引導檔案。產生的啟動檔案中 TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
、TRAFFICDIRECTOR_NETWORK_NAME
和 zone
的值,是從瞭解 Compute Engine VM 執行個體相關詳細資料的中繼資料伺服器取得。您可以使用 -gcp-project-number
和 -vpc-network-name
選項,手動將這些值提供給輔助程式。
如要驗證設定,請登入用戶端 VM 並執行下列範例。
Java
如要使用 gRPC Java 用戶端驗證服務,請按照下列步驟操作:
下載最新版的 gRPC Java,並使用最新的修補程式建構
xds-hello-world
用戶端應用程式。sudo apt-get update -y sudo apt-get install -y openjdk-11-jdk-headless curl -L https://github.com/grpc/grpc-java/archive/v1.37.0.tar.gz | tar -xz cd grpc-java-1.37.0/examples/example-xds ../gradlew --no-daemon installDist
請以
world
做為名稱,以xds:///helloworld-gce
做為服務 URI 執行用戶端。./build/install/example-xds/bin/xds-hello-world-client "world" \ xds:///helloworld-gce
Go
如要使用 gRPC Go 用戶端驗證服務,請按照下列步驟操作:
下載最新版的 gRPC Go 和最新修補程式,然後建構
xds-hello-world
用戶端應用程式。sudo apt-get update -y sudo apt-get install -y golang git curl -L https://github.com/grpc/grpc-go/archive/v1.37.0.tar.gz | tar -xz cd grpc-go-1.37.0/examples/features/xds/client go get google.golang.org/grpc@v1.37.0 go build .
請以
world
做為名稱,以xds:///helloworld-gce
做為服務 URI 執行用戶端。./client "world" xds:///helloworld-gce
C++
如要使用 gRPC C++ 用戶端驗證服務,請按照下列步驟操作:
下載最新版的 gRPC C++ 和最新修補程式,然後建構
helloworld
用戶端範例。sudo apt-get update -y sudo apt-get install -y build-essential cmake git git clone --recurse-submodules -b v1.37.1 https://github.com/grpc/grpc cd grpc mkdir -p cmake/build pushd cmake/build cmake ../.. make sudo make install popd mkdir -p third_party/abseil-cpp/cmake/build pushd third_party/abseil-cpp/cmake/build cmake ../.. make sudo make install popd cd examples/cpp/helloworld mkdir -p cmake/build cd cmake/build/ cmake ../.. make
使用「xds:///helloworld-gce」做為服務 URI 執行用戶端。
./greeter_client --target=xds:///helloworld-gce
grpcurl
如要使用 grpcurl
工具驗證服務,請按照下列步驟操作:
下載並安裝
grpcurl
工具。curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.1/grpcurl_1.8.1_linux_x86_64.tar.gz | tar -xz
請使用「xds:///helloworld-gce」做為服務 URI,並將
helloworld.Greeter/SayHello
做為要叫用的服務名稱和方法,執行grpcurl
工具。SayHello
方法的參數會透過-d
選項傳遞。./grpcurl --plaintext \ -d '{"name": "world"}' \ xds:///helloworld-gce helloworld.Greeter/SayHello
Python
如要使用 gRPC Python 用戶端驗證服務,請執行下列指令。使用最新版 gRPC 和最新的修補程式。
sudo apt-get update sudo apt-get -y install python3-pip sudo pip3 install virtualenv curl -L https://github.com/grpc/grpc/archive/v1.37.1.tar.gz | tar -xz cd grpc-1.37.1/examples/python/xds virtualenv venv -p python3 source venv/bin/activate pip install -r requirements.txt python client.py xds:///helloworld-gce
Ruby
如要使用 gRPC Ruby 用戶端驗證服務,請執行下列指令。使用最新版 gRPC 和最新的修補程式。
sudo apt-get update sudo apt-get install -y ruby-full sudo gem install grpc curl -L https://github.com/grpc/grpc/archive/v1.37.1.tar.gz | tar -xz cd grpc-1.37.1/examples/ruby ruby greeter_client.rb john xds:///helloworld-gce
PHP
如要使用 gRPC PHP 用戶端驗證服務,請執行下列指令。使用最新版 gRPC 和最新的修補程式。
sudo apt-get update sudo apt-get install -y php7.3 php7.3-dev php-pear phpunit python-all zlib1g-dev git sudo pecl install grpc curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer curl -L https://github.com/grpc/grpc/archive/v1.37.1.tar.gz | tar -xz cd grpc-1.37.1 export CC=/usr/bin/gcc ./tools/bazel build @com_google_protobuf//:protoc ./tools/bazel build src/compiler:grpc_php_plugin cd examples/php composer install ./../../bazel-bin/external/com_google_protobuf/protoc --proto_path=../protos \ --php_out=. --grpc_out=. \ --plugin=protoc-gen-grpc=../../bazel-bin/src/compiler/grpc_php_plugin \ ../protos/helloworld.proto php -d extension=grpc.so greeter_client.php john xds:///helloworld-gce
Node.js
如要使用 gRPC Node.js 用戶端驗證服務,請執行下列指令。使用最新版 gRPC 和最新的修補程式。
sudo apt-get update sudo apt-get install -y nodejs npm curl -L https://github.com/grpc/grpc/archive/v1.34.0.tar.gz | tar -xz cd grpc-1.34.0/examples/node/xds npm install node ./greeter_client.js --target=xds:///helloworld-gce
您應該會看到類似以下的輸出內容,其中 INSTANCE_NAME
是 VM 執行個體的名稱:
Greeting: Hello world, from INSTANCE_HOSTNAME
這麼做可驗證無 Proxy gRPC 用戶端是否已成功連線至 Cloud Service Mesh,並使用 xds
名稱解析工具瞭解 helloworld-gce
服務的後端。用戶端向服務的其中一個後端傳送要求,而不需要瞭解 IP 位址或執行 DNS 解析。
後續步驟
- 瞭解進階流量管理。
- 瞭解如何設定可觀測性。
- 瞭解如何排解無 Proxy 的 Cloud Service Mesh 部署問題。