Como implantar o Bookinfo de amostra

Nesta página, explicamos como implantar um aplicativo de amostra no Anthos Service Mesh. Se você não instalou o Anthos Service Mesh, consulte o Guia de instalação.

Vários aplicativos de amostra vêm com a instalação do Anthos Service Mesh. Neste guia, você verá como implantar a amostra do BookInfo. Ele simula um aplicativo simples de livraria composto de quatro serviços que oferecem uma página de produto da Web, detalhes do livro, avaliações (com várias versões do serviço de avaliação) e classificações, tudo gerenciado com o Anthos Service Mesh. É possível encontrar o código-fonte e os demais arquivos usados neste exemplo no diretório da instalação do Anthos Service Mesh em samples/bookinfo.

Como ativar a injeção automática do arquivo secundário

Para ativar a injeção automática de arquivo secundário, rotule seus namespaces de modo que o webhook do injetor do arquivo secundário associe os arquivos secundários injetados com uma determinada revisão do plano de controle. Se você tiver configurado a tag padrão, rotule seus namespace com os rótulos de injeção padrão. Caso contrário, rotule seus namespaces com o rótulo de revisão. O rótulo adicionado depende de você ter implantado o Anthos Service Mesh gerenciado ou instalado o plano de controle no cluster.

Gerenciado

  1. É possível usar o rótulo de injeção padrão ou o de revisão para seu namespace

    Rótulos de injeção padrão

    Aplique os rótulos de injeção padrão ao namespace.

    kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
    

    Rótulo de revisão

    Antes de implantar aplicativos, remova os rótulos istio-injection anteriores dos namespaces e defina o rótulo istio.io/rev=REVISION_LABEL.

    Se quiser mudar para um rótulo de revisão específico, clique em REVISION_LABEL e substitua-o com o rótulo aplicável: asm-managed-rapid para canal rápido, asm-managed para canal regular ou asm-managed-stable para canal estável.

    O rótulo de revisão corresponde a um canal de lançamento:

    Rótulo de revisão Channel
    asm-managed Normal
    asm-managed-rapid Rápido
    asm-managed-stable Canal Stable
    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  2. Se você também implantou o plano de dados gerenciado opcional, anote o namespace NAMESPACE da seguinte maneira:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

No cluster

  1. Use o seguinte comando para localizar o rótulo em istiod:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    A resposta será semelhante a:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-173-3-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1178-20,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1178-20,istio=istiod,pod-template-hash=5788d57586
    

    Na saída, na coluna LABELS, anote o valor do rótulo de revisão istiod, que segue o prefixo istio.io/rev=. Neste exemplo, o valor é asm-1178-20.

  2. Aplique o rótulo de revisão ao namespace padrão. No comando a seguir, REVISION é o valor do rótulo de revisão istiod que você anotou na etapa anterior.

    kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
    

    Você pode ignorar a mensagem "istio-injection not found" na saída. Isso significa que o namespace não tinha o rótulo istio-injection anteriormente, que é esperado em novas instalações do Anthos Service Mesh ou em novas implantações. Como a injeção automática falha se um namespace tiver o identificador istio-injection e o de revisão, todos os comandos kubectl label da documentação do Anthos Service Mesh especificam explicitamente os dois identificadores.

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.

  1. Na linha de comando do computador em que você instalou o Anthos Service Mesh, acesse a raiz do diretório de instalação do Anthos Service Mesh. Se precisar, faça o download do arquivo de instalação.

  2. Implante seu aplicativo no namespace padrão usando kubectl>

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Confirme se o aplicativo foi implantado 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. 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 Anthos Service Mesh no GKE no VMware, guarde o endereço IP externo do gateway de entrada que você configurou depois de instalar o Anthos Service Mesh

  • Se você instalou o Anthos Service Mesh no GKE, veja 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

  1. 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 Anthos Service Mesh.

  2. 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 você tem um aplicativo que está gerando tráfego, é possível explorar as páginas do Anthos Service Mesh no Console do Google Cloud para ver métricas e os outros recursos de observabilidade.

Limpar

Quando terminar de testar a amostra do Bookinfo, remova-a do cluster.

  1. Desinstale o Bookinfo usando o seguinte script:

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