Implementa la aplicación de muestra Online Boutique

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

Descarga e implementa la muestra

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

  1. Instala kpt si aún no lo hiciste:

    gcloud components install kpt
    
  2. Descarga la muestra mediante 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. Navega al directorio online-boutique:

    cd online-boutique
    
  4. Crea los espacios de nombres para 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. Implementa la muestra en el clúster.

    1. Crea las implementaciones y cuentas de servicio:

      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
      

Habilita la inserción automática de sidecar

Para habilitar la inserción automática, etiqueta tus espacios de nombres con las etiquetas de inyección predeterminadas si la etiqueta predeterminada está configurada o con la etiqueta de revisión en tu espacio de nombres. La etiqueta que también agregues depende de si implementaste Cloud Service Mesh administrado o instalaste el plano de control en el clúster. El webhook de inyector de sidecar usa la etiqueta para asociar los sidecar insertados con una revisión de plano de control en particular.

En el clúster

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

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

    El comando genera la etiqueta de revisión que corresponde a la versión de Cloud Service Mesh, por ejemplo: asm-1157-23.

  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 anotaste 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 administrados

  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 versiones administrado de Cloud Service Mesh: asm-managed para la versión normal, asm-managed-rapid para la versión rápida o asm-managed-stable para la versión 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 implementaste el plano de datos administrado 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
    

Expón la aplicación y accede a ella

La forma en que expones la aplicación fuera de la malla depende de si implementaste una puerta de enlace de entrada. Puedes exponer la aplicación con una puerta de enlace de entrada de Istio o con un servicio de Kubernetes.

Usa la puerta de enlace de entrada

Si implementaste una puerta de enlace de entrada en el clúster como se especifica en los prerrequisitos, sigue estos pasos para exponer la aplicación con la puerta de enlace.

  1. Implementa Gateway y 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 puerta de enlace de entrada y reemplaza los marcadores de posición por la siguiente información:

    • GATEWAY_SERVICE_NAME: El nombre del servicio de puerta de enlace de entrada. Si implementaste la puerta de enlace de muestra sin modificación o si implementaste la puerta de enlace de entrada predeterminada, el nombre será istio-ingressgateway.

    • GATEWAY_NAMESPACE: El espacio de nombres en el que implementaste la puerta de enlace de entrada. Si implementaste la puerta de enlace de entrada predeterminada, el espacio de nombres es istio-system.

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMESPACE
    

    El resultado es similar al 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 puerta de enlace de entrada es 35.239.7.64.

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

    http://EXTERNAL_IP/
    

Sin puerta de enlace de entrada

Si no implementaste una puerta de enlace de entrada o elegiste exponer la aplicación con un servicio de Kubernetes, sigue estos pasos:

  1. Implementa un servicio de tipo LoadBalancer para exponer el servicio de 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 consola de Google Cloud. Ten en cuenta que pueden pasar hasta 10 minutos hasta que gráfico de topología muestre los servicios de tu malla.

Limpia

Antes de borrar Online Boutique, te recomendamos trabajar con Cloud Service Mesh con el ejemplo mTLS, que usa la muestra. Cuando termines de explorar, usa los siguientes comandos para quitar la muestra de Online Boutique:

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

Próximos pasos