Como implantar o aplicativo de amostra Online Boutique

Este guia explica como instalar o aplicativo de exemplo Online Boutique para demonstrar o Cloud Service Mesh. Se você não tiver instalado o Cloud Service Mesh, consulte guia de instalação.

Como fazer o download e implantar a amostra

Para implantar o aplicativo, primeiro faça o download dos manifestos do Online Boutique no repositório anthos-service-mesh-packages usando kpt. O aplicativo de amostra Online Boutique no repositório anthos-service-mesh-packages é modificado a partir do conjunto original de manifestos no repositório microservices-demo. Seguindo as práticas recomendadas, cada serviço é implantado em um namespace separado com uma conta de serviço exclusiva.

  1. Instale kpt caso ainda não tenha feito isso:

    gcloud components install kpt
    
  2. Faça o download da amostra usando kpt:

    kpt pkg get \
      https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \
      online-boutique
    

    Resposta esperada

    Package "online-boutique":
    Fetching https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages@main
    From https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages
    * branch            main       -> FETCH_HEAD
    Adding package "samples/online-boutique".
    Fetched 1 package(s).
    
  3. Acesse o diretório online-boutique:

    cd online-boutique
    
  4. Crie os namespaces do aplicativo:

    kubectl apply -f kubernetes-manifests/namespaces
    

    Saída esperada:

    namespace/ad created
    namespace/cart created
    namespace/checkout created
    namespace/currency created
    namespace/email created
    namespace/frontend created
    namespace/loadgenerator created
    namespace/payment created
    namespace/product-catalog created
    namespace/recommendation created
    namespace/shipping created
    
  5. Implante a amostra no cluster.

    1. Crie as contas de serviço e implantações:

      kubectl apply -f kubernetes-manifests/deployments
      

      Saída esperada:

      serviceaccount/ad created
      deployment.apps/adservice created
      serviceaccount/cart created
      deployment.apps/cartservice created
      serviceaccount/checkout created
      deployment.apps/checkoutservice created
      serviceaccount/currency created
      deployment.apps/currencyservice created
      serviceaccount/email created
      deployment.apps/emailservice created
      serviceaccount/frontend created
      deployment.apps/frontend created
      serviceaccount/loadgenerator created
      deployment.apps/loadgenerator created
      serviceaccount/payment created
      deployment.apps/paymentservice created
      serviceaccount/product-catalog created
      deployment.apps/productcatalogservice created
      serviceaccount/recommendation created
      deployment.apps/recommendationservice created
      serviceaccount/shipping created
      deployment.apps/shippingservice created
      
    2. Crie os serviços:

      kubectl apply -f kubernetes-manifests/services
      

      Saída esperada:

      service/adservice created
      service/cartservice created
      service/checkoutservice created
      service/currencyservice created
      service/emailservice created
      service/frontend created
      service/frontend-external created
      service/paymentservice created
      service/productcatalogservice created
      service/recommendationservice created
      service/shippingservice created
      
    3. Crie as entradas de serviço:

      kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
      

      Saída esperada:

      serviceentry.networking.istio.io/allow-egress-googleapis created
      serviceentry.networking.istio.io/allow-egress-google-metadata created
      

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

Para ativar a injeção automática, rotule os namespaces com os rótulos de injeção padrão se a tag padrão estiver configurada ou com o rótulo de revisão ao namespace. O rótulo adicionado depende de você ter implantado o Cloud Service Mesh gerenciado ou instalado o plano de controle no cluster. O rótulo é usado pelo webhook do injetor do arquivo secundário para associar os arquivos secundários injetados a uma revisão específica do plano de controle.

No cluster

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

    kubectl get deploy -n istio-system -l app=istiod -o \
      jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
    

    O comando gera o rótulo de revisão que corresponde à versão do Cloud Service Mesh, por exemplo: asm-1187-26

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

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio.io/rev=REVISION --overwrite
    done;
    

    Saída esperada:

    namespace/ad labeled
    namespace/cart labeled
    namespace/checkout labeled
    namespace/currency labeled
    namespace/email labeled
    namespace/frontend labeled
    namespace/loadgenerator labeled
    namespace/payment labeled
    namespace/product-catalog labeled
    namespace/recommendation labeled
    namespace/shipping labeled
    
  3. Reinicie os pods:

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl rollout restart deployment -n ${ns}
    done;
    

    Saída esperada:

    deployment.apps/adservice restarted
    deployment.apps/cartservice restarted
    deployment.apps/checkoutservice restarted
    deployment.apps/currencyservice restarted
    deployment.apps/emailservice restarted
    deployment.apps/frontend restarted
    deployment.apps/loadgenerator restarted
    deployment.apps/paymentservice restarted
    deployment.apps/productcatalogservice restarted
    deployment.apps/recommendationservice restarted
    deployment.apps/shippingservice restarted
    

Malha de serviço gerenciada

  1. Aplique o rótulo de revisão aos namespaces do aplicativo. Nos seguintes , é preciso que o rótulo REVISION seja o valor do comando Canal de lançamento gerenciado do Cloud Service Mesh: asm-managed para serviços regulares, asm-managed-rapid para conteúdo rápido ou asm-managed-stable para estável.

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl label namespace $ns istio.io/rev=REVISION --overwrite
    done;
    

    Saída esperada:

    namespace/ad labeled
    namespace/cart labeled
    namespace/checkout labeled
    namespace/currency labeled
    namespace/email labeled
    namespace/frontend labeled
    namespace/loadgenerator labeled
    namespace/payment labeled
    namespace/product-catalog labeled
    namespace/recommendation labeled
    namespace/shipping labeled
    
  2. Se você também implantou o plano de dados gerenciado opcional, anote os namespaces do aplicativo da seguinte maneira:

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl annotate --overwrite namespace $ns mesh.cloud.google.com/proxy='{"managed":"true"}'
    done;
    
  3. Reinicie os pods:

    for ns in ad cart checkout currency email frontend loadgenerator \
      payment product-catalog recommendation shipping; do
        kubectl rollout restart deployment -n ${ns}
    done;
    

    Saída esperada:

    deployment.apps/adservice restarted
    deployment.apps/cartservice restarted
    deployment.apps/checkoutservice restarted
    deployment.apps/currencyservice restarted
    deployment.apps/emailservice restarted
    deployment.apps/frontend restarted
    deployment.apps/loadgenerator restarted
    deployment.apps/paymentservice restarted
    deployment.apps/productcatalogservice restarted
    deployment.apps/recommendationservice restarted
    deployment.apps/shippingservice restarted
    

Como expor e acessar o aplicativo

A maneira como você expõe o aplicativo fora da malha depende da implantação de um gateway de entrada. É possível expor o aplicativo usando um gateway de entrada do Istio ou um serviço do Kubernetes.

Como usar o gateway de entrada

Se você implantou um gateway de entrada no cluster conforme especificado no pré-requisito, siga as etapas abaixo para expor o aplicativo usando o gateway.

  1. Implantar um Gateway e um VirtualService no serviço de front-end

    kubectl apply -f istio-manifests/frontend-gateway.yaml
    

    Saída esperada:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. Consiga o endereço IP externo do gateway de entrada substitua os marcadores pelas seguintes informações:

    • GATEWAY_SERVICE_NAME: o nome do serviço de gateway de entrada. Se você implantou o gateway de amostra sem modificação ou se implantou o gateway de entrada padrão, o nome é istio-ingressgateway.

    • GATEWAY_NAMESPACE: o namespace em que você implantou o gateway de entrada. Se você implantou o gateway de entrada padrão, o namespace é istio-system.

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMESPACE
    

    A saída é semelhante a:

    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 do gateway de entrada é 35.239.7.64.

  3. Acesse o aplicativo no navegador para confirmar a instalação:

    http://EXTERNAL_IP/
    

Nenhum gateway de entrada

Se você não implantou um gateway de entrada ou quer expor o aplicativo usando um serviço do Kubernetes, siga estas etapas:

  1. Implante um serviço do tipo LoadBalancer para expor o serviço de front-end

    kubectl apply -f frontend-external.yaml
    
  2. Encontre o endereço IP externo do serviço frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. Acesse o aplicativo no navegador para confirmar a instalação:

    http://EXTERNAL_IP/
    

Confira os recursos de observabilidade do Cloud Service Mesh no console do Google Cloud. Pode levar até 10 minutos para o gráfico de topologia exibir os serviços na malha.

Limpar

Antes de excluir o Online Boutique, confira o Cloud Service Mesh por exemplo: mTLS, que usa a amostra. Quando terminar de explorar, use os seguintes comandos para remover a amostra Online Boutique:

  1. Exclua os namespaces do aplicativo:

    kubectl delete -f kubernetes-manifests/namespaces
    

    Saída esperada:

    namespace "ad" deleted
    namespace "cart" deleted
    namespace "checkout" deleted
    namespace "currency" deleted
    namespace "email" deleted
    namespace "frontend" deleted
    namespace "loadgenerator" deleted
    namespace "payment" deleted
    namespace "product-catalog" deleted
    namespace "recommendation" deleted
    namespace "shipping" deleted
    
  2. Exclua as entradas de serviço:

    kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
    

    Saída esperada:

    serviceentry.networking.istio.io "allow-egress-googleapis" deleted
    serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
    

A seguir