העברת Istio ServiceEntry ל-GCPBackend ל-Cloud Run
בדף הזה מוסבר איך לבצע מיגרציה מ-ServiceEntry ל-GCPBackend, ומוצגות היכולות של Istio לניהול תנועה, שיכולות להבטיח מעבר חלק ובטוח.
למעבר ל-GCPBackend יש יתרונות רבים:
- קוד אפליקציה פשוט יותר: אפשר לבטל את הצורך בהחדרת JWT של IAM לאפליקציה באופן ידני, וכך לצמצם את המורכבות ואת הסיכוי לשגיאות.
- אבטחה משופרת: אפשר לנצל את היתרונות של הזרקת JWT של IAM באופן אוטומטי כדי לשפר את האבטחה של התקשורת בין GKE לבין Cloud Run.
- העברה חלקה: אפשר להשתמש בפיצול תנועה ובשיקוף כדי להעביר תנועה בצורה בטוחה בלי לשבש את האפליקציה.
- יכולות ניהול משופרות: תהליך ההגדרה והניהול יעיל יותר.
לפני שמתחילים
בקטעים הבאים אנחנו מניחים:
- אשכול GKE עם Cloud Service Mesh מופעל.
- רשומה של שירות Istio.
- הוגדר משאב GCPBackend עבור שירות Cloud Run.
יוצרים או משנים את VirtualService הקיים כך שיכלול את ServiceEntry ואת GCPBackend כיעדים
אפשר להשתמש בפיצול תנועה כדי להעביר בהדרגה את התנועה מ-ServiceEntry אל GCPBackend. כדאי להתחיל עם אחוז קטן של תנועה שמופנה אל GCPBackend ולהגדיל אותו בהדרגה תוך מעקב אחר בעיות.
בדוגמה הבאה מתואר מעבר של 10% מהבקשות אל GCPBackend.
cat <<EOF > virtual-service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: gcpbackend-migration
namespace: NAMESPACE
spec:
hosts:
- service-entry.com
http:
- route:
- destination:
host: gcpbackend.com
weight: 10 # 10% traffic to gcp backend.
- destination:
host: service-entry.com
weight: 90 # 90% traffic to service entry
EOF
kubectl apply -f virtual-service.yaml
כאשר:
- NAMESPACE הוא שם מרחב השמות.
בדוגמה הזו:
- VIRTUAL_SERVICE הוא
gcpbackend-migration. - SERVICE_ENTRY_HOSTNAME הוא
service-entry.com. - GCP_BACKEND_HOSTNAME הוא
gcpbackend.com.
(אופציונלי) הגדרת VirtualService לשיקוף תנועה
כדי להבטיח מעבר חלק, אפשר להגדיר שיקוף תעבורה כדי לשלוח עותק של התעבורה אל GCPBackend, תוך המשך ניהול התעבורה בעיקר אל ServiceEntry. כך אפשר לבדוק ולאמת את ההגדרה של GCPBackend בלי להשפיע על זרימת התנועה הראשית. מידע נוסף זמין במאמר בנושא Istio Virtual Service API.
אימות הפונקציונליות
כדי לבדוק את שיעור השגיאות של הבקשות אל $SERVICE_ENTRY_HOSTNAME, אפשר לעיין ביומני האפליקציה או במדדים של Cloud Service Mesh. לא אמורות להיות שגיאות.
כדי לבצע בדיקה מחוץ לאפליקציה, אפשר לפרוס לקוח curl. אם הבקשה מנותבת ל-CloudRun באמצעות GCPBackend API, לא צריך לצרף אליה באופן מפורש אסימון IAM כי Cloud Service Mesh מצרף אותו אוטומטית.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: testcurl
namespace: default
spec:
containers:
- name: curl
image: curlimages/curl
command: ["sleep", "3000"]
EOF
kubectl exec testcurl -c curl -- curl "$SERVICE_ENTRY_HOSTNAME"
הפלט צריך להיות תגובה תקינה מסוג HTTP 200.