Implementar o exemplo Bookinfo
Esta página explica como implementar uma aplicação de exemplo para demonstrar a Cloud Service Mesh. Se não tiver instalado o Cloud Service Mesh, consulte o guia de instalação.
A instalação do Cloud Service Mesh inclui várias aplicações de exemplo. Este guia explica como implementar a amostra BookInfo. Esta é uma aplicação de livraria simulada simples composta por quatro serviços que fornecem uma página de produto Web, detalhes de livros, críticas (com várias versões do serviço de críticas) e classificações, tudo gerido através da Cloud Service Mesh. Pode
encontrar o código fonte e todos os outros ficheiros usados neste exemplo no diretório da instalação do
Cloud Service Mesh em samples/bookinfo
.
Ativar a injeção automática de sidecar
Para ativar a injeção automática de sidecars, tem de etiquetar os seus espaços de nomes para que o webhook do injetor de sidecars associe os sidecars injetados a uma revisão do plano de controlo específica. Se configurar a etiqueta predefinida, etiquete os seus espaços de nomes com as etiquetas de injeção predefinidas. Caso contrário, etiquete os seus espaços de nomes com a etiqueta de revisão. Além disso, a etiqueta que adiciona também depende de ter implementado uma malha de serviços na nuvem gerida ou instalado o painel de controlo no cluster.
Gerido
Pode usar a etiqueta de injeção predefinida ou a etiqueta de revisão para o seu espaço de nomes
Etiquetas de injeção predefinidas
Aplique a etiqueta de injeção predefinida ao espaço de nomes.
kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
Etiqueta de revisão
Antes de implementar aplicações, remova todas as etiquetas
istio-injection
anteriores dos respetivos espaços de nomes e defina a etiquetaistio.io/rev=REVISION_LABEL
.Para a alterar para uma etiqueta de revisão específica, clique em
REVISION_LABEL
e substitua-a pela etiqueta aplicável:asm-managed-rapid
para o canal rápido,asm-managed
para o canal normal ouasm-managed-stable
para o canal estável.A etiqueta de revisão corresponde a um canal de lançamento:
Etiqueta de revisão Canal asm-managed
Normal asm-managed-rapid
Inovação asm-managed-stable
Estável kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Se também implementou o plano de dados gerido opcional, anote o espaço de nomes da seguinte forma:
NAMESPACE
kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
No cluster
Use o seguinte comando para localizar a etiqueta em
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
O resultado tem um aspeto semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1264-1,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1264-1,istio=istiod,pod-template-hash=5788d57586
Na saída, na coluna
LABELS
, repare no valor da etiqueta de revisãoistiod
, que segue o prefixoistio.io/rev=
. Neste exemplo, o valor éasm-1264-1
.Aplique a etiqueta de revisão ao espaço de nomes predefinido. No comando seguinte,
REVISION
é o valor daistiod
etiqueta de revisão que anotou no passo anterior.kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
Pode ignorar a mensagem
"istio-injection not found"
no resultado. Isto significa que o espaço de nomes não tinha anteriormente a etiquetaistio-injection
, o que deve esperar em novas instalações do Cloud Service Mesh ou novas implementações. Uma vez que o comportamento de injeção automática não está definido quando um espaço de nomes tem a etiquetaistio-injection
e a etiqueta de revisão, todos os comandoskubectl label
na documentação do Cloud Service Mesh garantem explicitamente que apenas uma está definida.
Implementar a aplicação
Agora que a injeção automática está ativada no espaço de nomes default
, quando implementa os serviços da aplicação BookInfo, os proxies sidecar são injetados juntamente com cada serviço.
Na linha de comandos do computador onde instalou o Cloud Service Mesh, aceda à raiz do diretório de instalação do Cloud Service Mesh. Se precisar, transfira o ficheiro de instalação.
Implemente a sua aplicação no espaço de nomes predefinido através de
kubectl
:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Confirme que a aplicação foi implementada corretamente executando os seguintes comandos:
kubectl get services
Saída:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
e
kubectl get pod
Saída:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
Por fim, defina o encaminhamento do gateway de entrada para a aplicação:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Saída:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
Validar a implementação da aplicação
Para ver se a aplicação BookInfo está a funcionar, tem de enviar tráfego para o gateway de entrada.
Se instalou o Cloud Service Mesh no Google Distributed Cloud, obtenha o endereço IP externo do gateway de entrada que configurou após a instalação do Cloud Service Mesh
Se instalou o Cloud Service Mesh no GKE, obtenha o endereço IP externo do gateway de entrada da seguinte forma:
kubectl get service istio-ingressgateway -n istio-system
Saída:
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 serviço de entrada é
35.239.7.64
.
Experimentar a aplicação
Verifique se a app BookInfo está a ser executada com
curl
:curl -I http://EXTERNAL_IP/productpage
Se a resposta mostrar
200
, significa que a aplicação está a funcionar corretamente com a malha de serviços na nuvem.Para ver a página Web BookInfo, introduza o seguinte endereço no seu navegador:
http://EXTERNAL_IP/productpage
Se atualizar a página várias vezes, deve ver diferentes versões das críticas apresentadas na página do produto, apresentadas num estilo rotativo (estrelas vermelhas, estrelas pretas, sem estrelas).
Agora que tem uma aplicação que está a gerar tráfego, pode explorar as páginas da Cloud Service Mesh na Google Cloud consola para ver as métricas e as outras funcionalidades de observabilidade.
Limpar
Quando terminar de experimentar a amostra Bookinfo, remova-a do cluster.
Desinstale o Bookinfo através do seguinte script:
samples/bookinfo/platform/kube/cleanup.sh
Confirmar encerramento:
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted
O que se segue?
Saiba mais acerca do exemplo Bookinfo.