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.
Instala
kpt
si aún no lo has hecho:gcloud components install kpt
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).
Ve al directorio
online-boutique
:cd online-boutique
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
Despliega el ejemplo en el clúster.
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
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
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
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-1264-1
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
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
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 oasm-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
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;
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.
Despliega un
Gateway
y unVirtualService
para el servicio de frontendkubectl apply -f istio-manifests/frontend-gateway.yaml
Resultado esperado:
gateway.networking.istio.io/frontend-gateway created virtualservice.networking.istio.io/frontend-ingress created
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
.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:
Despliega un servicio de tipo
LoadBalancer
para exponer el servicio frontendkubectl apply -f frontend-external.yaml
Busca la dirección IP externa del servicio
frontend-external
:kubectl get service frontend-external -n frontend
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:
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
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