Desplegar la aplicación de ejemplo Online Boutique

En esta guía se explica cómo instalar la aplicación de ejemplo Online Boutique para demostrar Cloud Service Mesh. Si no has instalado Cloud Service Mesh, consulta la guía de instalación.

Descargar y desplegar el ejemplo

Para implementar la aplicación, primero debes descargar los manifiestos de Online Boutique del repositorio anthos-service-mesh-packages con kpt. La aplicación de ejemplo Online Boutique del repositorio anthos-service-mesh-packages se ha modificado a partir del conjunto original de manifiestos del repositorio microservices-demo. Siguiendo las prácticas recomendadas, cada servicio se implementa en un espacio de nombres independiente con una cuenta de servicio única.

  1. Instala kpt si aún no lo has hecho:

    gcloud components install kpt
    
  2. Descarga el ejemplo con kpt:

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

    Resultado esperado

    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. Ve al directorio online-boutique:

    cd online-boutique
    
  4. Crea los espacios de nombres de la aplicación:

    kubectl apply -f kubernetes-manifests/namespaces
    

    Resultado esperado:

    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. Despliega el ejemplo en el clúster.

    1. Crea las cuentas de servicio y las implementaciones:

      kubectl apply -f kubernetes-manifests/deployments
      

      Resultado esperado:

      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. Crea los servicios:

      kubectl apply -f kubernetes-manifests/services
      

      Resultado esperado:

      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. Crea las entradas de servicio:

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

      Resultado esperado:

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

Habilitar la inyección automática de sidecars

Para habilitar la inyección automática, debe etiquetar sus espacios de nombres con las etiquetas de inyección predeterminadas si la etiqueta predeterminada está configurada, o con la etiqueta de revisión de su espacio de nombres. La etiqueta que añadas también depende de si has implementado Cloud Service Mesh gestionado o has instalado el plano de control en el clúster. El webhook del inyector de sidecar usa la etiqueta para asociar los sidecars inyectados con una revisión de plano de control concreta.

En el clúster

  1. Usa el siguiente comando para localizar la etiqueta en istiod:

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

    El comando muestra la etiqueta de revisión que corresponde a la versión de Cloud Service Mesh. Por ejemplo: asm-11910-9

  2. Aplica la etiqueta de revisión a los espacios de nombres de la aplicación. En el siguiente comando, REVISION es el valor de la etiqueta de revisión istiod que has anotado en el paso 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;
    

    Resultado esperado:

    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. Reinicia los pods:

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

    Resultado esperado:

    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
    

Malla de servicios gestionada

  1. Aplica la etiqueta de revisión a los espacios de nombres de la aplicación. En el siguiente comando, la etiqueta REVISION debe ser el valor de tu canal de lanzamiento de Cloud Service Mesh gestionado: asm-managed para regular, asm-managed-rapid para rápido o asm-managed-stable para estable.

    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;
    

    Resultado esperado:

    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. Si también has implementado el plano de datos gestionado opcional, anota los espacios de nombres de la aplicación de la siguiente manera:

    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. Reinicia los pods:

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

    Resultado esperado:

    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
    

Exponer y acceder a la aplicación

La forma de exponer la aplicación fuera de la malla depende de si has implementado una pasarela de entrada. Puedes exponer la aplicación mediante una pasarela de entrada de Istio o mediante un servicio de Kubernetes.

Usar una pasarela de entrada

Si has implementado una pasarela de entrada en el clúster tal como se especifica en el requisito previo, sigue estos pasos para exponer la aplicación mediante la pasarela.

  1. Despliega un Gateway y un VirtualService para el servicio de frontend

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

    Resultado esperado:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. Obtén la dirección IP externa de la pasarela de entrada. Sustituye los marcadores de posición por la siguiente información:

    • GATEWAY_SERVICE_NAME : el nombre del servicio de la puerta de enlace de entrada. Si has implementado la pasarela de ejemplo sin modificarla o si has implementado la pasarela de entrada predeterminada, el nombre es istio-ingressgateway.

    • GATEWAY_NAMESPACE: el espacio de nombres en el que has implementado la pasarela de entrada. Si ha implementado la pasarela de entrada predeterminada, el espacio de nombres es istio-system.

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMESPACE
    

    La salida es similar a la siguiente:

    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
    

    En este ejemplo, la dirección IP de la pasarela de entrada es 35.239.7.64.

  3. Visita la aplicación en tu navegador para confirmar la instalación:

    http://EXTERNAL_IP/
    

No hay pasarela de entrada

Si no has implementado una pasarela de entrada o has decidido exponer la aplicación mediante un servicio de Kubernetes, sigue estos pasos:

  1. Despliega un servicio de tipo LoadBalancer para exponer el servicio frontend

    kubectl apply -f frontend-external.yaml
    
  2. Busca la dirección IP externa del servicio frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. Visita la aplicación en tu navegador para confirmar la instalación:

    http://EXTERNAL_IP/
    

Puedes explorar las funciones de observabilidad de Cloud Service Mesh en la Google Cloud consola. Ten en cuenta que el gráfico de topología puede tardar hasta 10 minutos en mostrar los servicios de tu malla.

Limpieza

Antes de eliminar Online Boutique, te recomendamos que sigas el ejemplo de Anthos Service Mesh: mTLS, que usa la muestra. Cuando hayas terminado de explorar, usa los siguientes comandos para quitar la muestra Online Boutique:

  1. Elimina los espacios de nombres de la aplicación:

    kubectl delete -f kubernetes-manifests/namespaces
    

    Resultado esperado:

    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. Elimina las entradas de servicio:

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

    Resultado esperado:

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

Siguientes pasos