Implementar a aplicação de amostra Online Boutique
Este guia explica como instalar a aplicação de exemplo Online Boutique para demonstrar a malha de serviços na nuvem. Consulte o guia de aprovisionamento se precisar de aprovisionar o Cloud Service Mesh.
Transferir e implementar o exemplo
Para implementar a aplicação, primeiro tem de transferir os manifestos da Online Boutique do repositório anthos-service-mesh-packages
usando o comando kpt
. A aplicação de exemplo Online Boutique no repositório anthos-service-mesh-packages
foi modificada a partir do conjunto original de manifestos no repositório microservices-demo
. Seguindo as práticas recomendadas, cada serviço é implementado num espaço de nomes separado
com uma conta de serviço única.
Instale o
kpt
, caso ainda não o tenha feito:gcloud components install kpt
Transfira o exemplo através de
kpt
:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \ online-boutique
Resultado esperado
Package "online-boutique": Fetching https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages@main From https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages * branch main -> FETCH_HEAD Adding package "samples/online-boutique". Fetched 1 package(s).
Navegue para o diretório
online-boutique
:cd online-boutique
Crie os espaços de nomes para a aplicação:
kubectl apply -f kubernetes-manifests/namespaces
Resultado esperado:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
Implemente o exemplo no cluster.
Crie as contas de serviço e as implementações:
kubectl apply -f kubernetes-manifests/deployments
Resultado esperado:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
Crie os serviços:
kubectl apply -f kubernetes-manifests/services
Resultado esperado:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
Crie as entradas de serviço:
kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
Resultado esperado:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Ativar a injeção automática de sidecar
Aplique a etiqueta de injeção predefinida aos espaços de nomes da aplicação.
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl label namespace $ns istio-injection=enabled --overwrite done;
Resultado esperado:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Se estiver a usar o Cloud Service Mesh gerido e tiver implementado o plano de dados gerido opcional, anote os espaços de nomes da aplicação da seguinte forma:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl annotate --overwrite namespace $ns mesh.cloud.google.com/proxy='{"managed":"true"}' done;
Reinicie os pods:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Resultado esperado:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Expor e aceder à aplicação
A forma como expõe a aplicação fora da malha depende de ter implementado ou não um gateway de entrada. Pode optar por expor a aplicação através de um gateway de entrada do Istio ou através de um serviço Kubernetes.
Usar o gateway de entrada
Se implementou um gateway de entrada no cluster, conforme especificado no pré-requisito, siga estes passos para expôr a aplicação através do gateway.
Implemente um
Gateway
e umVirtualService
para o serviço de frontendkubectl apply -f istio-manifests/frontend-gateway.yaml
Resultado esperado:
gateway.networking.istio.io/frontend-gateway created virtualservice.networking.istio.io/frontend-ingress created
Obtenha o endereço IP externo do gateway de entrada. Substitua os marcadores de posição pelas seguintes informações:
GATEWAY_SERVICE_NAME : O nome do serviço de gateway de entrada. Se implementou o gateway de exemplo sem modificações ou se implementou o gateway de entrada predefinido, o nome é
istio-ingressgateway
.GATEWAY_NAMESPACE: o espaço de nomes no qual implementou a gateway de entrada. Se implementou o gateway de entrada predefinido, o espaço de nomes é
istio-system
.
kubectl get service GATEWAY_SERVICE_NAME -n GATEWAY_NAMESPACE
O resultado é semelhante ao seguinte:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
Neste exemplo, o endereço IP do gateway de entrada é
35.239.7.64
.Visite a aplicação no seu navegador para confirmar a instalação:
http://EXTERNAL_IP/
Sem gateway de entrada
Se não implementou um gateway de entrada ou optou por expor a aplicação através de um serviço Kubernetes, siga estes passos:
Implemente um serviço do tipo
LoadBalancer
para expor o serviço de front-endkubectl apply -f frontend-external.yaml
Encontre o endereço IP externo do serviço
frontend-external
:kubectl get service frontend-external -n frontend
Visite a aplicação no seu navegador para confirmar a instalação:
http://EXTERNAL_IP/
Pode explorar as funcionalidades de observabilidade do Cloud Service Mesh na Google Cloud consola. Tenha em atenção que o gráfico de topologia pode demorar até 10 minutos a apresentar os serviços na sua malha.
Limpar
Antes de eliminar a Online Boutique, recomendamos que siga o tutorial Cloud Service Mesh by example: mTLS, que usa o exemplo. Quando terminar de explorar, use os seguintes comandos para remover o exemplo da loja online:
Elimine os espaços de nomes da aplicação:
kubectl delete -f kubernetes-manifests/namespaces
Resultado esperado:
namespace "ad" deleted namespace "cart" deleted namespace "checkout" deleted namespace "currency" deleted namespace "email" deleted namespace "frontend" deleted namespace "loadgenerator" deleted namespace "payment" deleted namespace "product-catalog" deleted namespace "recommendation" deleted namespace "shipping" deleted
Elimine as entradas de serviço:
kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
Resultado esperado:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted