שימוש ב-HTTP/2 בשירותים

כשמופעלת בקשת קונטיינר, 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 Build.

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

שירותים נתמכים של HTTP/2

פרוטוקול HTTP/2 מתאים למגוון רחב של אפליקציות. דוגמאות לתרחישי שימוש נפוצים:

  • שירותי gRPC: פיתוח מיקרו-שירותים עם ביצועים גבוהים וזמן אחזור נמוך, שמתקשרים באמצעות gRPC.
  • APIs עם תפוקה גבוהה: מפחיתים את התקורה של אפליקציות שנדרש בהן טיפול יעיל במספר רב של בקשות קטנות או שצריך להעביר נתונים ללקוחות.

הגדרה ועדכון של HTTP/2 מקצה לקצה

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

אפשר לציין את השימוש ב-HTTP/2 מקצה לקצה באמצעות מסוף Google Cloud,‏ Google Cloud CLI או YAML כשיוצרים שירות חדש או פורסים עדכון חדש: Google Cloud

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Containers, Networking, Security (מאגרי נתונים, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.

  4. נכנסים לכרטיסייה Networking.

    תמונה

    • בוחרים באפשרות הפעלת חיבורי http/2. מוודאים שקובץ אימג' של קונטיינר מותאם אישית תומך בבקשות HTTP/2.
  5. לוחצים על יצירה או על פריסה.

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

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את הערך ports בשם ואת הערך containerPort ביציאה לבחירתכם, כמו בדוגמה הבאה:h2c

    apiVersion: 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 תווים
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    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:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. לוחצים על השירות שרוצים לראות כדי לפתוח את הדף פרטי השירות.

  3. לוחצים על הכרטיסייה עדכונים.

  4. בחלונית הפרטים שמשמאל, ההגדרה http/2 מופיעה בכרטיסייה Networking.

gcloud

  1. משתמשים בפקודה הבאה:

    gcloud run services describe SERVICE
  2. מאתרים את ההגדרה http/2 בתצורה שמוחזרת.

שימוש ב-HTTP/2 מאחורי מאזן עומסים

כשמגדירים את Cloud Run להאזין ל-HTTP/2, הוא מטפל אוטומטית בתעבורת HTTP/2 או gRPC שמגיעה ממאזן העומסים של האפליקציה. לא נדרשת הגדרה ספציפית בשירות הקצה העורפי של מאזן העומסים.

כדי להגדיר את Cloud Run לשימוש ב-HTTP/2 או ב-gRPC, משתמשים באחת מהשיטות הבאות: