Como implantar o Bookinfo de amostra
Esta página explica como implantar um aplicativo de exemplo para demonstrar do Cloud Service Mesh. Se você ainda não fez a integração com o Cloud Service Mesh, consulte o guia de integração.
Vários aplicativos de exemplo vêm com a instalação do Cloud Service Mesh. Neste
guia, você vai aprender a implantar a
amostra do BookInfo. Este é um aplicativo simples de simulação de livraria composto por quatro serviços
que fornecem uma página de produto da Web, detalhes de livros, resenhas (com várias versões do
o serviço de avaliação) e classificações. Todas elas são gerenciadas com o Cloud Service Mesh. É possível
encontrar o código-fonte e todos os outros arquivos usados neste exemplo no
diretório da instalação do Cloud Service Mesh em samples/bookinfo
.
Como ativar a injeção automática do arquivo secundário
Ativar o namespace para injeção. As etapas dependem da implementação do plano de controle.
Gerenciado (TD)
- Aplique o rótulo de injeção padrão ao namespace:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Gerenciado (Istiod)
Recomendado: execute o comando a seguir para aplicar o rótulo de injeção padrão ao namespace:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Se você já for usuário do plano de controle do Istiod gerenciado: recomendamos que você use a injeção padrão, mas a injeção baseada em revisão é compatível. Siga estas instruções:
Execute o seguinte comando para localizar os canais de lançamento disponíveis:
kubectl -n istio-system get controlplanerevision
O resultado será assim:
NAME AGE asm-managed-rapid 6d7h
OBSERVAÇÃO: se duas revisões do plano de controle aparecerem na lista acima, remova uma. Não é possível ter vários canais de plano de controle no cluster.
Na saída, o valor na coluna
NAME
é o rótulo de revisão que corresponde ao canal de lançamento disponível para a versão do Cloud Service Mesh.Aplique o rótulo de revisão ao namespace:
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
No cluster
Recomendado:execute o seguinte comando para aplicar o rótulo de injeção padrão ao namespace:
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
Recomendamos que você use a injeção padrão, mas a injeção baseada em revisão tem suporte: Siga estas instruções:
Use o seguinte comando para localizar o rótulo de revisão em
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Aplique o rótulo de revisão ao namespace. No comando a seguir,
REVISION_LABEL
é o valor do rótulo de revisãoistiod
que você anotou na etapa anterior.kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Como implantar o aplicativo
Agora que a injeção automática está ativada no namespace default
, os proxies sidecar
são injetados junto de cada serviço quando você implantar os serviços do aplicativo
BookInfo.
Na linha de comando do computador em que você instalou o Cloud Service Mesh, acesse a raiz do diretório de instalação do Cloud Service Mesh. Se precisar, faça o download do arquivo de instalação no cluster. que inclui o aplicativo de exemplo Bookinfo e extraí-lo.
Implante seu aplicativo no namespace padrão usando
kubectl
>kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Confirme se o aplicativo foi implantado corretamente executando os seguintes comandos:
kubectl get services
Resposta:
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
Resposta:
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
Finalmente, defina o roteamento do gateway de entrada para o aplicativo:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Saída:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
Como validar a implantação do aplicativo
Para ver se o aplicativo BookInfo está funcionando, envie o tráfego para o gateway de entrada.
Se você instalou o Cloud Service Mesh no Google Distributed Cloud (somente software) para VMware, o endereço IP do gateway de entrada que você configurado depois de instalar o Cloud Service Mesh
Se você instalou o Cloud Service Mesh no GKE, confira o endereço IP externo do gateway de entrada da seguinte maneira:
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
Nesse exemplo, o endereço IP do serviço de entrada é
35.239.7.64
.
Como testar o aplicativo
Verifique se o aplicativo BookInfo está sendo executado com
curl
:curl -I http://EXTERNAL_IP/productpage
Se a resposta mostrar
200
, significa que o aplicativo está funcionando corretamente com o Cloud Service Mesh.Para visualizar a página da Web do BookInfo, insira o seguinte endereço no navegador:
http://EXTERNAL_IP/productpage
Se você atualizar a página várias vezes, verá diferentes versões das avaliações mostradas na página do produto, apresentadas em estilo round-robin (estrelas vermelhas, estrelas pretas, sem estrelas).
Agora que o aplicativo está gerando tráfego, é possível Conheça as páginas do Cloud Service Mesh no console do Google Cloud para conferir as métricas e outros atributos de machine learning.
Limpar
Quando terminar de testar a amostra do Bookinfo, remova-a do cluster.
Desinstale o Bookinfo usando o seguinte script:
samples/bookinfo/platform/kube/cleanup.sh
Confirme o 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
A seguir
Saiba mais sobre a amostra do Bookinfo.