Implementa la aplicación de muestra BookInfo

En esta página, se explica cómo implementar una aplicación de ejemplo para demostrar Cloud Service Mesh. Si no instalaste Cloud Service Mesh, consulta la Guía de instalación.

Varias aplicaciones de muestra incluyen la instalación de Cloud Service Mesh. En esta guía, se explica cómo implementar la muestra de BookInfo. Se trata de una aplicación sencilla que simula una librería formada por cuatro servicios que proporcionan una página web de productos, detalles de libros, opiniones (con varias versiones del servicio de opiniones) y calificaciones, todo administrado con Cloud Service Mesh. Puedes encontrar el código fuente y todos los demás archivos que se usan en este ejemplo en el directorio de instalación de Cloud Service Mesh en samples/bookinfo.

Habilita la inserción automática de sidecar

Para habilitar la inserción automática de sidecar, debes etiquetar tus espacios de nombres para que el webhook de inyector de sidecar asocie los sidecars insertados con una revisión del plano de control en particular. Si configuraste la etiqueta predeterminada, etiqueta tus espacios de nombres con las etiquetas de inserción predeterminadas. De lo contrario, etiqueta tus espacios de nombres con la etiqueta de revisión. Además, la etiqueta que agregues también dependerá de si implementaste Cloud Service Mesh administrado o instalaste el plano de control en el clúster.

Administrado

  1. Puedes usar la etiqueta de inserción predeterminada o la etiqueta de revisión de tu espacio de nombres

    Etiquetas de inserción predeterminadas

    Aplica la etiqueta de inserción predeterminada al espacio de nombres.

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

    Etiqueta de revisión

    Antes de implementar aplicaciones, quita las etiquetas istio-injection anteriores de sus espacios de nombres y configura la etiqueta istio.io/rev=REVISION_LABEL en su lugar.

    Para cambiarla a una etiqueta de revisión específica, haz clic en REVISION_LABEL y reemplázala por la etiqueta aplicable: asm-managed-rapid para un canal rápido, asm-managed para un canal regular o asm-managed-stable para un canal estable.

    La etiqueta de revisión corresponde a un canal de versiones:

    Etiqueta de revisión Canal
    asm-managed Normal
    asm-managed-rapid Rápido
    asm-managed-stable Estable
    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  2. Si también implementaste el plano de datos administrado opcional, anota el espacio de nombres NAMESPACE de la siguiente manera:

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

En el clúster

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

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

    El resultado es similar al siguiente:

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

    En el resultado, en la columna LABELS, observa el valor de la etiqueta de revisión istiod, que está después del prefijo istio.io/rev=. En este ejemplo, el valor es .

  2. Aplica la etiqueta de revisión a los espacios de nombres predeterminados. En el siguiente comando, REVISION es el valor de la etiqueta de revisión istiod que anotaste en el paso anterior.

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

    Puedes ignorar el mensaje "istio-injection not found" en el resultado. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection, como se debe esperar en las nuevas instalaciones de Cloud Service Mesh o en implementaciones nuevas. Debido a que el comportamiento de la inserción automática es indefinido cuando un espacio de nombres tiene la istio-injection y la etiqueta de revisión, todos los comandos de kubectl label en la documentación de Cloud Service Mesh garantizan de forma explícita que solo se configure uno.

Implementa la aplicación

Ahora que la inserción automática está habilitada en el espacio de nombres default, cuando implementas los servicios de la aplicación BookInfo, los proxies de sidecar se insertan junto con cada servicio.

  1. En la línea de comandos de la computadora en la que instalaste Cloud Service Mesh, ve a la raíz del directorio de instalación de Cloud Service Mesh. Si es necesario, descarga el archivo de instalación.

  2. Implementa tu aplicación en el espacio de nombres predeterminado mediante kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Confirma que la aplicación se implementó correctamente ejecutando los siguientes comandos:

    kubectl get services
    

    Resultado:

    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

    y

    kubectl get pod
    

    Resultado:

    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, define el enrutamiento de la puerta de enlace para la aplicación:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    Resultado:

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

Valida la implementación de la aplicación

Para comprobar que la aplicación Bookinfo funcione, envía tráfico a la puerta de enlace de entrada.

  • Si instalaste Cloud Service Mesh en GKE en VMware, obtén la dirección IP externa de la puerta de enlace de entrada que configuraste después de instalar Cloud Service Mesh.

  • Si instalaste Cloud Service Mesh en GKE, obtén la dirección IP externa de la puerta de enlace de entrada de la siguiente manera:

    kubectl get service istio-ingressgateway -n istio-system
    

    Resultado:

    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 del servicio de entrada es 35.239.7.64.

Prueba la aplicación

  1. Verifica que la app Bookinfo se ejecute con curl:

    curl -I http://EXTERNAL_IP/productpage
    

    Si la respuesta muestra 200, significa que la aplicación funciona de forma correcta con Cloud Service Mesh.

  2. Para ver la página web de Bookinfo, ingresa la siguiente dirección en tu navegador:

    http://EXTERNAL_IP/productpage
    

    Si actualizas la página varias veces, deberías ver diferentes versiones de reseñas que se muestran en la página de productos, que se presentan en un estilo round robin (estrellas rojas, negras, sin estrellas).

Ahora que tienes una aplicación que genera tráfico, puedes explorar las páginas de Cloud Service Mesh en la consola de Google Cloud para ver las métricas y otras funciones de observabilidad.

Realice una limpieza

Cuando termines de hacer pruebas con la muestra Bookinfo, quítala del clúster.

  1. Desinstala Bookinfo mediante la siguiente secuencia de comandos:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Confirma la finalización:

    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
    

¿Qué sigue?

Obtén más información sobre la aplicación de muestra Bookinfo.