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

במדריך הזה מוסבר איך להתקין את אפליקציית הדוגמה Online Boutique כדי להדגים את Cloud Service Mesh. אם אתם צריכים להקצות את 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 החיצונית של שער הכניסה. מחליפים את ה-placeholders בפרטים הבאים:

    • GATEWAY_SERVICE_NAME : השם של שירות שער הכניסה (ingress). אם פרסתם את שער הדוגמה בלי לבצע שינויים, או אם פרסתם את שער הכניסה שמוגדר כברירת מחדל, השם הוא 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 by example: 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
    

מה השלב הבא?