קישוריות ישירה של gRPC

קישוריות ישירה היא פתרון חיבור שמאפשר חיבורי רשת gRPC ישירים ומאומתים בין ספריית לקוח לבין Cloud Storage. החיבורים האלה מאופיינים בביצועים גבוהים, בזמן אחזור נמוך ובעומס נמוך על החיבור. Cloud de Confiance by S3NS כשמשתמשים ב-gRPC כדי להתחבר ל- Cloud de Confiance by S3NSבאמצעות קישוריות ישירה, בקשות שמופעלות דרך ספריות לקוח נתמכות של Cloud de Confiance by S3NSמנותבות ישירות ל-Cloud Storage, בלי לעבור דרך ממשקי הקצה של Google ‏ (GFE).

קישוריות ישירה זמינה רק לבקשות שמגיעות ממכונות וירטואליות (VM) של Compute Engine.

דרישות לקישוריות ישירה

קישוריות ישירה מופעלת כברירת מחדל כשמשתמשים בספריות לקוח נתמכות של Cloud Storage כדי להתחבר ל-Cloud Storage, אבל היא זמינה רק אם כל התנאים הבאים מתקיימים:

  • למכונות הווירטואליות של Compute Engine שמתקשרות עם Cloud Storage צריך להיות חשבון שירות מצורף, גם אם אין לחשבון השירות הרשאות. חשבון השירות משמש לייצוג המכונה הווירטואלית של Compute Engine בתהליך הלחיצת יד של Application Layer Transport Security.

  • המכונות הווירטואליות ב-Compute Engine שמתקשרות עם קטגוריה של Cloud Storage צריכות להיות באותו מיקום עם הקטגוריה. לדוגמה, אם הקטגוריה נמצאת ב-us-central1, המכונה הווירטואלית יכולה להיות ב-us-central1-a. אם הקטגוריה נמצאת במספר אזורים או בשני אזורים, מכונת ה-VM צריכה להיות באזור שמרכיב את המיקום במספר אזורים או בשני אזורים. לדוגמה, אם קטגוריה נמצאת במספר אזורים בארה"ב (us), המכונה הווירטואלית יכולה להיות ממוקמת ב-us-east4-c.

    מידע נוסף על מיקומי קטגוריות זמין במאמר מיקומים.

  • המסלולים וכללי חומת האש מאפשרים לתעבורת IPv4 להגיע אל 34.126.0.0/18 ולתעבורת IPv6 להגיע אל 2001:4860:8040::/42. מומלץ להימנע מהגבלת יציאות היעד בכללי חומת האש, כי כל היציאות משמשות להצגת מודעות. בנוסף, צריך לאפשר לתנועה להגיע לנקודות הקצה storage.googleapis.com:443 ו-directpath-pa.googleapis.com:443.

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

  • לספריות הלקוח של Cloud Storage יש דרישות ספציפיות לגבי פרטי כניסה כדי לאמת אפליקציות ב-Cloud Storage ולאפשר קישוריות ישירה:

    • ספריית הלקוח של Java דורשת פרטי כניסה של חשבון משתמש או פרטי כניסה של חשבון שירות.

    • ספריית הלקוח C++‎ דורשת פרטי כניסה לחשבון שירות.

    • ספריית הלקוח Go דורשת פרטי כניסה לחשבון שירות. בגרסאות שלפני 1.52.0 נדרשים פרטי הכניסה של חשבון השירות שמוגדר כברירת מחדל של המכונה הווירטואלית שמקבלת גישה לדלי.

    כדי לראות את שם החשבון שהמכונה הווירטואלית משתמשת בו כדי לבצע אימות ל-Cloud Storage, משתמשים בפקודה gcloud auth list:

    gcloud auth list --filter=status:ACTIVE --format="value(account)"
    

    אם אתם משתמשים בספריית הלקוח של Go ורוצים לבדוק אם S3NS החשבון שמשמש לאימות תואם לחשבון השירות שמוגדר כברירת מחדל במכונה הווירטואלית, אתם יכולים להשתמש בפקודה gcloud compute instances describe:

    gcloud compute instances describe INSTANCE_NAME --format='yaml(serviceAccounts)'
    

    מחליפים את INSTANCE_NAME בשם המכונה.

    למידע נוסף על אימות, תוכלו לעיין בסקירה הכללית על S3NS ניהול זהויות.

בדיקת הקישוריות באמצעות Google Cloud CLI

‫Google Cloud CLI יכול לבדוק את האבחון של קישוריות ישירה בקטגוריה שלכם על ידי שליחת קריאה של GET לקטגוריה באמצעות gcloud storage buckets describe gs://example-bucket. בקטע הזה מוסבר איך לבצע בדיקה לאבחון בעיות בקישוריות ישירה באמצעות Google Cloud CLI.

לפני שמתחילים

  1. חשוב לוודא שיש לכם הרשאת IAM‏ storage.buckets.get בקטגוריה, שאפשר להעניק באמצעות התפקיד Storage Legacy Bucket Reader (roles/storage.legacyBucketReader).

  2. הפקודה gcloud alpha storage diagnose זמינה רק בגרסה 531.0.0 ואילך של Google Cloud CLI. כדי להשתמש בפקודה הזו, מומלץ לשדרג לגרסה האחרונה של Google Cloud CLI.

הפעלת האבחון

כדי לבדוק אם יש קישוריות ישירה, מריצים את הפקודה gcloud alpha storage diagnose עם הארגומנט --test-type=DIRECT_CONNECTIVITY:

gcloud alpha storage diagnose --test-type=DIRECT_CONNECTIVITY gs://BUCKET_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • BUCKET_NAME: השם של הקטגוריה. לדוגמה, my-bucket.

אם אפשר ליצור חיבור, מקבלים תגובה שדומה לזו:

Using my-bucket bucket for the diagnostic tests.
Bucket location : US
Bucket storage class : STANDARD
Running diagnostic: Direct Connectivity Diagnostic...
WARNING: This diagnostic is experimental. The output may change, and checks may be added or removed at any time. Please do not rely on the diagnostic being present.
Finished running diagnostic: Direct Connectivity Diagnostic
Generating diagnostic report...
NAME
Direct Connectivity Diagnostic
    ┌────────────────────────────┬─────────────────────────────────────────────────────────────────────────┬──────────┐
    │            NAME            │                           PAYLOAD_DESCRIPTION                           │  RESULT  │
    ├────────────────────────────┼─────────────────────────────────────────────────────────────────────────┼──────────┤
    │ Direct Connectivity Call   │ Able to get bucket metadata using Direct Connectivity network path.     │ Success. │
    └────────────────────────────┴─────────────────────────────────────────────────────────────────────────┴──────────┘

בדיקת הגדרות הרשת

אם נתקלתם בשגיאה Unable to connect to Traffic Director במהלך בדיקת הקישוריות הישירה באמצעות Google Cloud CLI, אתם יכולים להשתמש בהוראות הבאות כדי לוודא שהגדרות הרשת מאפשרות לתעבורה לעבור מהמכונות הווירטואליות שלכם לנקודות הקצה הנדרשות.

חיבור ישיר דורש שירות שמארח בכתובות directpath-pa.googleapis.com:443 ו-storage.googleapis.com:443. כדי לבדוק אם אפשר להתחבר לשירות, מבצעים קריאת curl אל directpath-pa.googleapis.com:443 או אל storage.googleapis.com:443. לדוגמה:

curl directpath-pa.googleapis.com:443

אם אפשר ליצור חיבור, מקבלים תגובה ריקה ללא שגיאות:

curl: (52) Empty reply from server

אם לא ניתן ליצור חיבור, תוצג שגיאה דומה לזו:

curl: (56) Recv failure: Connection reset by peer

מגבלות

קישוריות ישירה לא תומכת ב-Private Service Connect.

פתרון בעיות

בקטע הזה מפורטים פתרונות לשגיאות שיכולות להתרחש כשמשתמשים בקישוריות ישירה של gRPC.

יותר מדי קבצים פתוחים

בעיה: כשמשתמשים בקישוריות ישירה של gRPC, יכול להיות שהאפליקציה שלכם תשמור על מספר גבוה יותר של חיבורים בו-זמניים ל-Cloud Storage מאשר ממשקי REST API. בסביבות עם מקביליות גבוהה, יכול להיות שהערך הזה יעלה על מגבלת מתאר הקבצים של מערכת ההפעלה, וכתוצאה מכך תופיע שגיאת too many open files. השגיאה הזו יכולה להופיע כשמשתמשים ב-Google Cloud CLI.

פתרון: כדי לפתור את הבעיה, בוחרים אחת מהשיטות הבאות:

  • מגדירים את המספר המקסימלי של קבצים פתוחים לתהליך באמצעות ulimit -n $(ulimit -Hn).

  • כדי להקטין את מספר המשימות שניתן לבצע בו-זמנית, משתמשים בפקודה gcloud config set עם המאפיינים storage/process_count ו-storage/thread_count. מומלץ להגדיר עד 12 משימות. לפרטים נוספים, אפשר לעיין במקור המידע gcloud config set. חשוב לדעת שהקטנת מספר המשימות שניתן לבצע בו-זמנית מקטינה את המקביליות ועשויה להשפיע על הביצועים.