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 incorporado Cloud Service Mesh, consulta la guía de incorporació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

  1. Habilita el espacio de nombres para la inyección. Los pasos dependen de la implementación del plano de control.

    Gestionado (TD)

    1. Aplica la etiqueta de inyección predeterminada al espacio de nombres:
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Gestionado (Istiod)

    Recomendación: Ejecuta el siguiente comando para aplicar la etiqueta de inyección predeterminada al espacio de nombres:

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

    Si ya eres usuario del plano de control de Istiod gestionado: Te recomendamos que utilices la inyección predeterminada, pero también se admite la inyección basada en revisiones. Sigue estas instrucciones:

    1. Ejecuta el siguiente comando para localizar los canales de lanzamiento disponibles:

      kubectl -n istio-system get controlplanerevision
      

      El resultado debería ser similar al siguiente:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      NOTA: Si aparecen dos revisiones del plano de control en la lista anterior, elimina una. No se admite tener varios canales del plano de control en el clúster.

      En el resultado, el valor de la columna NAME es la etiqueta de revisión que corresponde al canal de lanzamiento disponible para la versión de Cloud Service Mesh.

    2. Aplica la etiqueta de revisión al espacio de nombres:

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

    En el clúster

    Recomendación: Ejecuta el siguiente comando para aplicar la etiqueta de inyección predeterminada al espacio de nombres:

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

    Te recomendamos que uses la inyección predeterminada, pero también se admite la inyección basada en revisiones: Sigue estas instrucciones:

    1. Usa el siguiente comando para localizar la etiqueta de revisión en istiod:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Aplica la etiqueta de revisión al espacio de nombres. En el siguiente comando, REVISION_LABEL 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_LABEL --overwrite
      

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 en el clúster, que incluye la aplicación de ejemplo bookinfo, y extráelo.

  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 (solo software) para VMware, obtén la dirección IP externa de la pasarela de entrada que configuraste 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.