פריסת האפליקציה לדוגמה Online Boutique

כדי להדגים את Cloud Service Mesh, אתם יכולים לפרוס את האפליקציה לדוגמה Online Boutique. אם אתם צריכים להקצות את Cloud Service Mesh, קראו את המדריך להקצאה.

הורדה ופריסה של הדוגמה

כדי לפרוס את האפליקציה, קודם צריך להוריד את המניפסטים של Online Boutique ממאגר anthos-service-mesh-packages באמצעות kpt. האפליקציה לדוגמה Online Boutique במאגר anthos-service-mesh-packages שונתה מהקבוצה המקורית של המניפסטים במאגר microservices-demo. בהתאם לשיטות המומלצות, כל שירות נפרס במרחב שמות נפרד עם חשבון שירות ייחודי.

  1. אם עדיין לא התקנתם את kpt, התקינו אותה:

    gcloud components install kpt
    
  2. מורידים את הדוגמה באמצעות kpt:

    kpt pkg get \
      https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \
      online-boutique
    

    הפלט הצפוי:

    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. מנווטים לספרייה online-boutique:

    cd online-boutique
    
  4. יוצרים את מרחבי השמות של האפליקציה:

    kubectl apply -f kubernetes-manifests/namespaces
    

    הפלט אמור להיראות כך:

    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. פורסים את הדוגמה באשכול.

    1. יוצרים את חשבונות השירות והפריסות:

      kubectl apply -f kubernetes-manifests/deployments
      

      הפלט אמור להיראות כך:

      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. יוצרים את השירותים:

      kubectl apply -f kubernetes-manifests/services
      

      הפלט אמור להיראות כך:

      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. יוצרים את רשומות השירות:

      kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
      

      הפלט אמור להיראות כך:

      serviceentry.networking.istio.io/allow-egress-googleapis created
      serviceentry.networking.istio.io/allow-egress-google-metadata created
      

הפעלת הזרקה אוטומטית של sidecar

  1. מוסיפים את תווית ברירת המחדל להזרקה למרחבי השמות של האפליקציה.

    for ns in ad cart checkout currency email frontend loadgenerator \
       payment product-catalog recommendation shipping; do
          kubectl label namespace $ns istio-injection=enabled --overwrite
    done;
    

    הפלט אמור להיראות כך:

    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. אם אתם משתמשים ב-Cloud Service Mesh מנוהל ופרסתם את מישור הנתונים המנוהל האופציונלי, הוסיפו הערות למרחבי השמות של האפליקציה באופן הבא:

    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. מפעילים מחדש את הפודים:

    for ns in ad cart checkout currency email frontend loadgenerator \
       payment product-catalog recommendation shipping; do
          kubectl rollout restart deployment -n ${ns}
    done;
    

    הפלט אמור להיראות כך:

    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
    

חשיפת האפליקציה וגישה אליה

הדרך שבה חושפים את האפליקציה מחוץ לרשת תלויה בשאלה אם פרסתם שער כניסה. אתם יכולים לבחור לחשוף את האפליקציה באמצעות שער כניסה של Istio או באמצעות שירות Kubernetes.

שימוש בשער כניסה

אם פרסתם שער כניסה לאשכול כפי שצוין בדרישות המוקדמות, בצעו את השלבים הבאים כדי לחשוף את האפליקציה באמצעות השער.

  1. פריסת Gateway ו-VirtualService לשירות הקצה הקדמי

    kubectl apply -f istio-manifests/frontend-gateway.yaml
    

    הפלט אמור להיראות כך:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. משיגים את כתובת ה-IP החיצונית של שער תעבורת הנתונים הנכנסת (ingress). מחליפים את הפלייסהולדרים במידע הבא:

    • ‫GATEWAY_SERVICE_NAME : השם של שירות שער הכניסה. אם פרסתם את שער הדוגמה בלי שינויים, או אם פרסתם את שער הכניסה שמוגדר כברירת מחדל, השם הוא istio-ingressgateway.

    • ‫GATEWAY_NAMESPACE: מרחב השמות שבו פרסתם את שער הכניסה. אם פרסתם את שער ה-ingress שמוגדר כברירת מחדל, מרחב השמות הוא istio-system.

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMESPACE
    

    הפלט אמור להיראות כך:

    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
    

    בדוגמה הזו, כתובת ה-IP של שער הכניסה היא 35.239.7.64.

  3. כדי לוודא שהאפליקציה הותקנה, פותחים אותה בדפדפן:

    http://EXTERNAL_IP/
    

אין שער כניסה

אם לא פרסתם שער כניסה או בחרתם לחשוף את האפליקציה באמצעות שירות Kubernetes, בצעו את השלבים הבאים:

  1. פורסים שירות מסוג LoadBalancer כדי לחשוף את שירות החזית

    kubectl apply -f frontend-external.yaml
    
  2. מאתרים את כתובת ה-IP החיצונית של השירות frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. כדי לוודא שהאפליקציה הותקנה, פותחים אותה בדפדפן:

    http://EXTERNAL_IP/
    

אתם יכולים לבדוק את תכונות התצפית של Cloud Service Mesh במסוף Google Cloud . שימו לב: יכול להיות שיעברו עד 10 דקות עד שהשירותים ברשת יופיעו בתרשים הטופולוגיה.

הסרת המשאבים

לפני שמוחקים את Online Boutique, כדאי לעיין במאמר דוגמה ל-Cloud Service Mesh: ‏mTLS, שמשתמש בדוגמה. אחרי שמסיימים את הבדיקה, משתמשים בפקודות הבאות כדי להסיר את האפליקציה לדוגמה Online Boutique:

  1. מוחקים את מרחבי השמות של האפליקציה:

    kubectl delete -f kubernetes-manifests/namespaces
    

    הפלט אמור להיראות כך:

    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. מוחקים את רשומות השירות:

    kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
    

    הפלט אמור להיראות כך:

    serviceentry.networking.istio.io "allow-egress-googleapis" deleted
    serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
    

מה השלב הבא?