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 integrado o Cloud Service Mesh, consulte o guia de integraçã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
Ative o espaço de nomes para injeção. Os passos dependem da sua implementação do plano de controlo.
Gerido (TD)
- Aplique a etiqueta de injeção predefinida ao espaço de nomes:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Gerido (Istiod)
Recomendado: execute o seguinte comando para aplicar a etiqueta de injeção predefinida ao espaço de nomes:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Se for um utilizador existente com o plano de controlo do Istiod gerido: recomendamos que use a injeção predefinida, mas a injeção baseada em revisões é suportada. Siga as instruções abaixo:
Execute o seguinte comando para localizar os canais de lançamento disponíveis:
kubectl -n istio-system get controlplanerevision
O resultado é semelhante ao seguinte:
NAME AGE asm-managed-rapid 6d7h
NOTA: se aparecerem duas revisões do plano de controlo na lista acima, remova uma delas. Ter vários canais do plano de controlo no cluster não é suportado.
Na saída, o valor na coluna
NAME
é a etiqueta de revisão que corresponde ao canal de lançamento disponível para a versão do Cloud Service Mesh.Aplique a etiqueta de revisão ao espaço de nomes:
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
No cluster
Recomendado: execute o seguinte comando para aplicar a etiqueta de injeção predefinida ao espaço de nomes:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Recomendamos que use a injeção predefinida, mas a injeção baseada em revisões é suportada: siga estas instruções:
Use o seguinte comando para localizar a etiqueta de revisão em
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Aplique a etiqueta de revisão ao espaço de nomes. No comando seguinte,
REVISION_LABEL
é o valor da etiqueta de revisãoistiod
que anotou no passo anterior.kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
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 no cluster, que inclui a aplicação de exemplo bookinfo, e extraia-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 (apenas software) para VMware, obtenha o endereço IP externo para o 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.