שימוש ב-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.
  • ממשקי API עם תפוקה גבוהה: מפחיתים את התקורה של אפליקציות שנדרש בהן טיפול יעיל במספר רב של בקשות קטנות או שצריך להעביר נתונים ללקוחות.

הגדרה ועדכון של 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. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, 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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

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

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

gcloud

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

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

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

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

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