Desplegar la muestra Bookinfo

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

La instalación de Cloud Service Mesh incluye varias aplicaciones de ejemplo. En esta guía se explica cómo desplegar la aplicación de ejemplo BookInfo. Se trata de una aplicación de librería ficticia sencilla compuesta por cuatro servicios que proporcionan una página de producto web, detalles de libros, reseñas (con varias versiones del servicio de reseñas) y valoraciones. Todo ello se gestiona con Cloud Service Mesh. Puedes encontrar el código fuente y todos los demás archivos utilizados en este ejemplo en el directorio de instalación de Cloud Service Mesh en samples/bookinfo.

Habilitar la inyección automática de sidecars

Para habilitar la inyección automática de sidecars, debes etiquetar tus espacios de nombres para que el webhook del inyector de sidecars asocie los sidecars inyectados con una revisión de plano de control concreta. Si configura la etiqueta predeterminada, etiquete sus espacios de nombres con las etiquetas de inyección predeterminadas. De lo contrario, etiqueta tus espacios de nombres con la etiqueta de revisión. Además, 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.

gestionados

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

    Etiquetas de inyección predeterminadas

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

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

    Etiqueta de revisión

    Antes de implementar aplicaciones, elimina las etiquetas istio-injection anteriores de sus espacios de nombres y define la etiqueta istio.io/rev=REVISION_LABEL.

    Para cambiarlo a una etiqueta de revisión específica, haz clic en REVISION_LABEL y sustitúyelo por la etiqueta correspondiente: asm-managed-rapid para el canal rápido, asm-managed para el canal normal o asm-managed-stable para el canal estable.

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

    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 has implementado el plano de datos gestionado 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 localizar 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=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
    

    En el resultado, en la columna LABELS, anote el valor de la etiqueta de revisión istiod que sigue al prefijo istio.io/rev=. En este ejemplo, el valor es asm-11910-9.

  2. Aplica la etiqueta de revisión al espacio de nombres predeterminado. En el siguiente comando, REVISION es el valor de la etiqueta de revisión istiod que has anotado en el paso anterior.

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

    Puedes ignorar el mensaje "istio-injection not found" en la salida. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection, que debería aparecer en las nuevas instalaciones o implementaciones de Cloud Service Mesh. Como el comportamiento de la inyección automática no está definido cuando un espacio de nombres tiene tanto la etiqueta istio-injection como la de revisión, todos los comandos kubectl label de la documentación de Cloud Service Mesh se aseguran explícitamente de que solo se defina una.

Implementar la aplicación

Ahora que la inyección automática está habilitada en el espacio de nombres default, cuando despliegues los servicios de la aplicación BookInfo, se inyectarán proxies adicionales junto a cada servicio.

  1. En la línea de comandos del ordenador en el que hayas instalado 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. Despliega tu aplicación en el espacio de nombres predeterminado con kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Confirma que la aplicación se ha desplegado 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. Por último, define el enrutamiento de la pasarela de entrada de 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

Validar la implementación de la aplicación

Para comprobar si la aplicación BookInfo funciona, debe enviar tráfico a la puerta de enlace de entrada.

  • Si has instalado Cloud Service Mesh en Google Distributed Cloud, obtén la dirección IP externa de la pasarela de entrada que hayas configurado después de instalar Cloud Service Mesh.

  • Si has instalado Cloud Service Mesh en GKE, obtén la dirección IP externa de la pasarela 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.

Probar la aplicación

  1. Comprueba que la aplicación BookInfo se está ejecutando con curl:

    curl -I http://EXTERNAL_IP/productpage
    

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

  2. Para ver la página web BookInfo, introduce la siguiente dirección en tu navegador:

    http://EXTERNAL_IP/productpage
    

    Si actualizas la página varias veces, verás diferentes versiones de las reseñas en la página de producto, presentadas de forma rotatoria (estrellas rojas, estrellas negras y 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.

Eliminar los recursos utilizados

Cuando hayas terminado de experimentar con la muestra Bookinfo, elimínala de tu clúster.

  1. Desinstala Bookinfo con la siguiente secuencia de comandos:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Confirma el apagado:

    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
    

Siguientes pasos

Consulta más información sobre el ejemplo Bookinfo.