כשמופעלת בקשת קונטיינר, Cloud Run מוריד את רמת הבקשות מ-HTTP/2 ל-HTTP/1, למעט תנועת gRPC מקורית, שנדרש לה HTTP/2 כדי לפעול בצורה תקינה. בדף הזה מוסבר איך להגדיר את השירות כך שישתמש ב-HTTP/2 מקצה לקצה, כדי למנוע מ-Cloud Run לשנמך את הבקשות ל-HTTP1.
מידע נוסף על הפעלת שירותים באמצעות HTTP
לפני שמגדירים
השירות שלכם ב-Cloud Run צריך לטפל בבקשות בפורמט HTTP/2 cleartext (h2c). תשתית שרת הקצה של Google מסיימת את ה-TLS ואז מעבירה את תעבורת הנתונים של h2c אל Cloud Run ואל הקונטיינר שלכם דרך ערוץ מוצפן.
כדי לוודא שהשירות תומך בבקשות h2c, בודקים את השירות באופן מקומי באמצעות פקודת curl הבאה:
curl -i --http2-prior-knowledge http://localhost:PORT
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרה ולפריסה של שירותי Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
Cloud Run Developer (
roles/run.developer) בשירות Cloud Run -
משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
אם אתם פורסים שירות או פונקציה מקוד מקור, אתם צריכים גם לקבל תפקידים נוספים בפרויקט ובחשבון השירות של Cloud Build.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
שירותים נתמכים של HTTP/2
פרוטוקול HTTP/2 מתאים למגוון רחב של אפליקציות. דוגמאות לתרחישי שימוש נפוצים:
- שירותי gRPC: יצירת מיקרו-שירותים עם ביצועים גבוהים וזמן אחזור נמוך, שמתקשרים באמצעות gRPC.
- ממשקי API עם תפוקה גבוהה: מפחיתים את התקורה של אפליקציות שנדרש בהן טיפול יעיל במספר רב של בקשות קטנות או שצריך להעביר נתונים ללקוחות.
הגדרה ועדכון של HTTP/2 מקצה לקצה
כל שינוי בהגדרות מוביל ליצירה של גרסה חדשה. גם גרסאות עתידיות יקבלו את הגדרת התצורה הזו באופן אוטומטי, אלא אם תבצעו עדכונים מפורשים כדי לשנות אותה.
אפשר לציין את השימוש ב-HTTP/2 מקצה לקצה באמצעות מסוף Google Cloud, Google Cloud CLI או YAML כשיוצרים שירות חדש או פורסים עדכון חדש: Google Cloud
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
נכנסים לכרטיסייה Networking.
- בוחרים באפשרות הפעלת חיבורי http/2. מוודאים שקובץ האימג' המותאם אישית של הקונטיינר תומך בבקשות HTTP/2.
לוחצים על יצירה או על פריסה.
gcloud
אפשר לעדכן שירות מסוים לשימוש ב-HTTP/2 באמצעות הפקודה הבאה:
gcloud run services update SERVICE --use-http2
מחליפים את SERVICE בשם השירות.
אפשר גם להגדיר את השירות כך שישתמש ב-HTTP/2 במהלך הפריסה באמצעות הפקודה:
gcloud run deploy --image IMAGE_URL --use-http2
מחליפים את IMAGE_URL בהפניה לקובץ אימג' של קונטיינר בהתאמה אישית שתומך בבקשות HTTP/2.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים את
portsבשם ואתcontainerPortביציאה לבחירתכם, כמו בדוגמה הבאה:h2capiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE_URL ports: - name: h2c containerPort: 8080
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run
- IMAGE_URL: הפניה לקובץ אימג' של קונטיינר מותאם אישית שתומך בבקשות HTTP/2
- REVISION עם שם חדש של גרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
- מתחיל ב-
SERVICE- - הוא מכיל רק אותיות קטנות, מספרים וגם
- - לא מסתיים ב-
- - לא חורג מ-63 תווים
- מתחיל ב-
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_service בקובץ התצורה של Terraform: resource "google_cloud_run_v2_service" "default" {
name = "cloudrun-service-h2c"
location = "us-central1"
deletion_protection = false # set to "true" in production
template {
containers {
image = IMAGE_URL
# Enable HTTP/2
ports {
name = "h2c"
container_port = 8080
}
}
}
}
מחליפים את IMAGE_URL בהפניה לקובץ אימג' של קונטיינר בהתאמה אישית שתומך בבקשות HTTP/2.
אם הקונטיינר שלכם מאזין לבקשות HTTP ביציאה אחרת מלבד 8080, צריך להחליף את 8080 במספר היציאה הזה.
הצגת ההגדרות של http/2
כדי לראות את הגדרות http/2 הנוכחיות של שירות Cloud Run:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
לוחצים על השירות שרוצים לראות את הפרטים שלו כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה עדכונים.
בחלונית הפרטים בצד שמאל, ההגדרה http/2 מופיעה בכרטיסייה Networking.
gcloud
משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מאתרים את ההגדרה http/2 בתצורה שמוחזרת.
שימוש ב-HTTP/2 מאחורי מאזן עומסים
אם הגדרתם האזנה ל-HTTP/2, Cloud Run מטפל אוטומטית בתנועת הנתונים של HTTP/2 או gRPC שמגיעה מ-Application Load Balancer. לא נדרשת הגדרה ספציפית בשירות הקצה העורפי של מאזן העומסים.
כדי להגדיר את Cloud Run לשימוש ב-HTTP/2 או ב-gRPC, משתמשים באחת מהשיטות הבאות:
- הגדרה ועדכון של HTTP/2 מקצה לקצה
- מגדירים מאזן עומסים חיצוני של אפליקציות (ALB) עם שירות Cloud Run כקצה עורפי.