Configure MVs do Compute Engine e serviços gRPC sem proxy
Este guia mostra como configurar os anfitriões de VMs do Compute Engine, as aplicações gRPC e os componentes de equilíbrio de carga que o Cloud Service Mesh requer.
Antes de seguir as instruções neste guia, reveja o artigo Prepare-se para configurar a Cloud Service Mesh com serviços gRPC sem proxy
Vista geral
A configuração da Cloud Service Mesh com máquinas virtuais (MVs) do Compute Engine e serviços gRPC sem proxy envolve o seguinte:
- Configurar um grupo de instâncias geridas que aloja os seus back-ends.
- Configurar os backends para executar um servidor gRPC que devolve
hello world
em resposta a um pedido de um cliente. - Configurar a Cloud Service Mesh através do grupo de instâncias geridas e de outros componentes de equilíbrio de carga. Google Cloud
- Validar se a implementação funciona corretamente através de uma aplicação cliente gRPC sem proxy para enviar tráfego para a aplicação de servidor gRPC.
O cliente gRPC sem proxy liga-se ao Cloud Service Mesh através do xDS. Quando o cliente se liga ao Cloud Service Mesh, o Cloud Service Mesh envia informações ao cliente sobre os back-ends associados ao serviço hello world
. Com estas informações, o cliente gRPC sem proxy envia pedidos para o servidor gRPC hello world
.
Configurar um grupo de instâncias geridas para a malha de serviço do Google Cloud
Os grupos de instâncias geridas usam o dimensionamento automático para criar novas VMs de back-end, conforme necessário, pela sua implementação. Este exemplo mostra como fazer o seguinte:
- Crie um modelo de instância com um serviço de exemplo que forneça um serviço
hello world
usando o protocolo gRPC. - Configure um grupo de instâncias geridas com o modelo.
Criar o modelo de instância
Esta secção fornece instruções para criar um modelo de instância. No exemplo, implementa um serviço gRPC que é exposto na porta 50051.helloworld
Consola
- Na Google Cloud consola, aceda à página Modelos de instâncias.
- Clique em Criar modelo de instância.
Preencha os campos da seguinte forma:
- Nome: grpc-td-vm-template
- Versão do disco de arranque: Debian / Linux 10
- Conta de serviço: conta de serviço predefinida do Compute Engine
- Âmbitos de acesso: permitir acesso total a todas as Google Cloud APIs
Em Firewall, selecione as caixas junto a Permitir tráfego HTTP e Permitir tráfego HTTPS.
Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único.
No separador Gestão, copie o seguinte script para o campo Script de arranque.
#! /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
Clique em Criar.
gcloud
Crie o modelo de instância.
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')
Criar o grupo de instâncias geridas
Nesta secção, cria um grupo de instâncias gerido com o modelo de instância que criou na secção anterior.
Consola
- Aceda à página Grupos de instâncias na Google Cloud consola.
- Clique em Criar um grupo de instâncias. Por predefinição, é apresentada a página para criar um grupo de instâncias gerido.
- Introduza
grpc-td-mig-us-central1
para o nome do grupo de instâncias geridas e selecione a zonaus-central1-a
. - Em Modelo de instância, selecione
grpc-td-vm-template
, que é o modelo de instância que criou. - Especifique 2 como o número mínimo e máximo de instâncias que quer criar no grupo.
- Clique em Criar.
gcloud
Crie o grupo de instâncias geridas.
gcloud compute instance-groups managed create grpc-td-mig-us-central1 \ --zone us-central1-a \ --size=2 \ --template=grpc-td-vm-template
Configurar a porta com nome
Nesta secção, configura a porta com nome para o serviço gRPC. A porta nomeada é a porta na qual o serviço gRPC deteta pedidos. Neste exemplo, a porta com nome é a porta 50051.
Consola
- Aceda à página Grupos de instâncias na Google Cloud consola.
- Clique no nome do grupo de instâncias
grpc-td-mig-us-central1
que criou. - Clique em Editar grupo.
- No campo Nome da portabilidade, introduza
grpc-helloworld-port
. - No campo Número da porta, introduza
50051
. - Clique em Guardar.
gcloud
Configure a porta com nome.
gcloud compute instance-groups set-named-ports grpc-td-mig-us-central1 \ --named-ports=grpc-helloworld-port:50051 \ --zone us-central1-a
Configurar a malha de serviço na nuvem com Google Cloud componentes de equilíbrio de carga
Esta secção fornece instruções para configurar a Cloud Service Mesh com Google Cloud componentes de balanceamento de carga para os seus serviços.
Criar a verificação de funcionamento, a regra de firewall e o serviço de back-end
Nesta secção, cria um serviço de back-end global com um esquema de equilíbrio de carga de INTERNAL_SELF_MANAGED
e um protocolo GRPC
e, em seguida, associa a verificação de funcionamento e o grupo de instâncias ao serviço de back-end.
Neste exemplo, usa o grupo de instâncias gerido que criou em
Criar o grupo de instâncias gerido. Este grupo de instâncias geridas
executa o serviço gRPC de exemplo. A porta na flag --port-name
é a porta
com nome que criou em Configurar a porta com nome.
gcloud
Crie a verificação de funcionamento.
gcloud compute health-checks create grpc grpc-helloworld-health-check \ --use-serving-port
Crie a regra de firewall de verificação de funcionamento.
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
Crie o serviço de back-end.
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
Adicione o grupo de instâncias gerido ao serviço de back-end.
gcloud compute backend-services add-backend grpc-helloworld-service \ --instance-group grpc-td-mig-us-central1 \ --instance-group-zone us-central1-a \ --global
Criar o mapa de regras de encaminhamento, o proxy de destino e a regra de encaminhamento
Nesta secção, cria um mapa de URL, um correspondente de caminhos e uma regra de anfitrião para encaminhar o tráfego para o seu serviço com base no nome do anfitrião e num caminho. O exemplo seguinte usa helloworld-gce
como nome do serviço. A aplicação gRPC usa este nome do serviço no URI de destino quando se liga a este serviço. Por predefinição, o
correspondente de caminhos corresponde a todos os pedidos de caminhos (/*
) para este anfitrião. Também cria o proxy gRPC de destino e a regra de encaminhamento.
Para mais informações, consulte o artigo Mapas de regras de encaminhamento.
No exemplo seguinte, a porta 80 é a porta especificada.
gcloud
Crie o mapa de URLs.
gcloud compute url-maps create grpc-vm-url-map \ --default-service grpc-helloworld-service
Crie o correspondente de caminhos.
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
Crie o proxy gRPC de destino.
gcloud compute target-grpc-proxies create grpc-vm-proxy \ --url-map grpc-vm-url-map \ --validate-for-proxyless
Crie a regra de encaminhamento.
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
O Cloud Service Mesh está agora configurado para equilibrar a carga do tráfego nos back-ends no grupo de instâncias gerido para os serviços especificados no mapa de URLs.
Validar a configuração
Quando o processo de configuração estiver concluído, verifique se consegue estabelecer uma ligação gRPC ao serviço com balanceamento de carga do Cloud Service Mesh que criou anteriormente.
Para verificar se o serviço está disponível, faça uma das seguintes ações:
- Inicie sessão num dos anfitriões de VM (o back-end do serviço gRPC) e verifique se o serviço gRPC está a ser executado na porta de deteção. No exemplo, a porta é 50051.
- Consulte a página Cloud Service Mesh na consola
para ver informações sobre o serviço configurado
helloworld-gce
e confirme que os back-ends são comunicados como estando em bom estado. - Use as instruções seguintes para usar um cliente gRPC do Compute Engine para validação.
Validar o serviço com uma aplicação cliente gRPC
Nos exemplos seguintes, usa um cliente gRPC no idioma à sua escolha ou a ferramenta grpcurl
para testar o serviço gRPC.
Primeiro, crie uma VM cliente na qual executa o cliente gRPC para testar o serviço.
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')
Configurar a variável de ambiente e o ficheiro de arranque
A aplicação cliente precisa de um ficheiro de configuração de arranque. O script de arranque na secção anterior define a variável de ambiente GRPC_XDS_BOOTSTRAP
e usa um script auxiliar para gerar o ficheiro de arranque. Os valores de
TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
, TRAFFICDIRECTOR_NETWORK_NAME
e
zone
no ficheiro de arranque gerado são obtidos a partir do servidor de metadados
que conhece estes detalhes sobre as suas instâncias de VM do Compute Engine. Pode fornecer estes valores ao script auxiliar manualmente através das opções -gcp-project-number
e -vpc-network-name
.
Para validar a configuração, inicie sessão na VM do cliente e execute os seguintes exemplos.
Java
Para validar o serviço com um cliente Java gRPC:
Transfira a versão mais recente do gRPC Java, com o patch mais recente, e crie a aplicação cliente
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
Execute o cliente com
world
como nome exds:///helloworld-gce
como URI do serviço../build/install/example-xds/bin/xds-hello-world-client "world" \ xds:///helloworld-gce
Ir
Para validar o serviço com um cliente Go gRPC:
Transfira a versão mais recente do gRPC Go, com o patch mais recente, e crie a aplicação cliente
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 .
Execute o cliente com
world
como nome exds:///helloworld-gce
como URI do serviço../client "world" xds:///helloworld-gce
C++
Para validar o serviço com um cliente gRPC C++:
Transfira a versão mais recente do gRPC C++, com o patch mais recente, e crie o
helloworld
exemplo de cliente.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
Execute o cliente com "xds:///helloworld-gce" como o URI do serviço.
./greeter_client --target=xds:///helloworld-gce
grpcurl
Para validar o serviço através da ferramenta grpcurl
:
Transfira e instale a ferramenta
grpcurl
.curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.1/grpcurl_1.8.1_linux_x86_64.tar.gz | tar -xz
Execute a ferramenta
grpcurl
com "xds:///helloworld-gce" como o URI do serviço ehelloworld.Greeter/SayHello
como o nome do serviço e o método a invocar. Os parâmetros para o métodoSayHello
são transmitidos através da opção-d
../grpcurl --plaintext \ -d '{"name": "world"}' \ xds:///helloworld-gce helloworld.Greeter/SayHello
Python
Para validar o serviço com um cliente Python gRPC, execute o seguinte. Use a versão mais recente do gRPC com o patch mais recente.
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
Para validar o serviço com um cliente gRPC Ruby, execute o seguinte. Use a versão mais recente do gRPC com o patch mais recente.
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
Para validar o serviço com um cliente PHP gRPC, execute o seguinte. Use a versão mais recente do gRPC com o patch mais recente.
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
Para validar o serviço com um cliente gRPC Node.js, execute o seguinte. Use a versão mais recente do gRPC com o patch mais recente.
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
Deverá ver uma saída semelhante a esta, em que INSTANCE_NAME
é o nome da instância de VM:
Greeting: Hello world, from INSTANCE_HOSTNAME
Isto verifica se o cliente gRPC sem proxy se ligou com êxito ao Cloud Service Mesh e aprendeu sobre os back-ends do serviço helloworld-gce
através do resolvedor de nomes xds
. O cliente enviou um pedido a um dos back-ends do serviço sem precisar de saber o endereço IP nem realizar a resolução de DNS.
O que se segue?
- Saiba mais sobre a gestão avançada de tráfego.
- Saiba como configurar a observabilidade.
- Saiba como resolver problemas de implementações da malha de serviços na nuvem sem proxy.