Como implantar o Bookinfo de amostra

Nesta página, explicamos como implantar um aplicativo de amostra para demonstrar o Cloud Service Mesh. Se você ainda não fez a integração ao Cloud Service Mesh, consulte o Guia de integração.

Vários aplicativos de amostra vêm com a instalação do Cloud Service Mesh. Este guia orienta você na implantação da BookInfo 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 Cloud Service Mesh. É possível encontrar o código-fonte e os demais arquivos usados neste exemplo no diretório da instalação do Cloud Service Mesh em samples/bookinfo.

Acesso de rede para imagens de amostra

A ferramenta asmcli não verifica nem extrai nada do Docker Hub (docker.io) durante a instalação da malha principal. No entanto, a implantação de imagens de contêiner de terceiros após a instalação aciona o Kubelet para buscar imagens de aplicativos de amostra do Docker Hub e da CDN do Cloudflare de suporte do Docker Hub.

Em redes restritas ou isoladas, essas extrações de imagem falham, a menos que sejam explicitamente acomodadas.

Para acomodar as extrações de imagem, escolha uma das seguintes abordagens:

  • Permitir tráfego de saída

    Atualize seu firewall ou proxy para permitir a saída HTTPS (porta 443) para os seguintes domínios. O domínio do Cloudflare é necessário porque o Docker Hub usa redirecionamentos HTTP 307 para veicular camadas de imagem.

    • docker.io
    • hub.docker.com
    • *.cloudflarestorage.com
  • Espelhar em um registro particular

    Para ambientes totalmente restritos, não abra portas de firewall. Em vez disso, espelhe as imagens de amostra necessárias no registro interno e configure o cluster para usar o registro interno.

    Para instruções detalhadas sobre como configurar isso em ambientes do GDC, consulte Usar um espelho de registro para imagens de contêiner.

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

  1. Ativar o namespace para injeção. As etapas dependem da implementação do plano de controle.

    Gerenciado (TD)

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

    Se você já usa o plano de controle do Istiod gerenciado:recomendamos que você use a injeção padrão, mas a injeção baseada em revisão é aceita. Siga estas instruções:

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

    2. 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 é aceita:siga estas instruções:

    1. 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"}'
      
    2. Aplique o rótulo de revisão ao namespace. No comando a seguir, REVISION_LABEL é 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_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.

  1. 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 necessário, faça o download do arquivo de instalação no cluster, que inclui o aplicativo de amostra do Bookinfo, e extraia-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
    

    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
  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 Cloud Service Mesh no Google Distributed Cloud (somente software) para VMware, guarde o endereço IP externo do gateway de entrada que você configurou depois de instalar o Cloud Service Mesh

  • Se você instalou o Cloud 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
    

    Resposta:

    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 Cloud 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 Cloud Service Mesh no Google Cloud console 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.