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

  1. Ative o espaço de nomes para injeção. Os passos dependem da sua implementação do plano de controlo.

    Gerido (TD)

    1. 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:

    1. 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.

    2. 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:

    1. 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"}'
      
    2. Aplique a etiqueta de revisão ao espaço de nomes. No comando seguinte, REVISION_LABEL é o valor da etiqueta de revisão istiod 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.

  1. 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.

  2. Implemente a sua aplicação no espaço de nomes predefinido através de kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. 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
  4. 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

  1. 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.

  2. 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.

  1. Desinstale o Bookinfo através do seguinte script:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. 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.