בדף הזה מוסבר איך להשתמש ב-Nginx כפרוקסי frontend עבור קונטיינר האפליקציה. האפשרות הזו שימושית אם רוצים לעבד בקשות או תגובות. אתם יכולים להוסיף דחיסת gzip, או לתרגם HTTP/2 ל-HTTP/1 אם קובצי ה-container של האפליקציה תומכים רק ב-HTTP/1 ואתם צריכים להשתמש ב-HTTP/2 מקצה לקצה מסיבות שקשורות לביצועים.
בדוגמה שמופיעה בדף הזה, קונטיינר Nginx פועל בכל מופע של Cloud Run כקונטיינר הראשי להצגת תוכן, והוא מוגדר להעברת בקשות לקונטיינר האפליקציה, שפועל כקונטיינר sidecar, כפי שמוצג בתרשים הזה:
הדרך הכי יעילה להגדיר פרוקסי לקצה הקדמי ב-Cloud Run היא לפרוס את קונטיינר שרת הפרוקסי של Nginx ואת קונטיינר אפליקציית האינטרנט כשירות Cloud Run יחיד:
שירות Cloud Run יחיד מקבל בקשות ומעביר אותן לקונטיינר של ה-ingress (הקונטיינר שממלא את הבקשות), שהוא במקרה הזה שרת ה-proxy. לאחר מכן, שרת ה-proxy שולח בקשות לאפליקציית האינטרנט דרך ממשק הרשת של localhost, וכך נמנעת גישה לרשת חיצונית.
פריסה כשירות יחיד ב-Cloud Run מפחיתה את זמני האחזור, את התקורה של ניהול השירות ומבטלת את החשיפה לרשתות חיצוניות. Cloud Run לא מקיים אינטראקציה ישירה עם קונטיינרים מסוג sidecar, מלבד הפעלה או עצירה שלהם בכל פעם שהשירות מופעל או מושבת.
אפשר לכתוב את מאגר האפליקציות לאינטרנט ואת כל מאגרי ה-sidecar בשפות תכנות שונות. דוגמה שכתובה ב-PHP זמינה בדוגמה ל-PHP nginx ב-GitHub.
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
מפעילים את ממשקי ה-API של Cloud Run ו-Secret Manager, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים- מתקינים ומפעילים את ה-CLI של gcloud.
- מעדכנים את Google Cloud CLI:
gcloud components update - מגדירים את Google Cloud CLI:
gcloud init - מאמתים את הזהות באמצעות Google Cloud CLI:
gcloud auth login
ההרשאות שנדרשות לפריסה
צריך להיות לכם אחד מהפריטים הבאים:
- התפקידים Cloud Run Admin ו-Service Account User
- כל תפקיד בהתאמה אישית שכולל את רשימת ההרשאות הספציפית הזו
סקירה כללית של ההגדרה
ההוראות האלה מתבססות על קובצי אימג' מוכנים מראש של קונטיינרים, כך שכל מה שצריך לעשות כדי להגדיר שרת proxy לקצה הקדמי הוא להגדיר את הקונטיינרים ואת השירות עצמו.
הגדרת קונטיינר Nginx ingress
קובץ האימג' של הקונטיינר nginx זמין ב-Docker Hub.
הוא מוכן לשימוש כמעט כמו שהוא, אבל צריך להגדיר אותו כך שיפעל כשירות proxy, ויעביר את הבקשות שעברו דרך ה-proxy אל היציאה שבה מאזין קונטיינר ה-sidecar localhost. בדוגמה שבדף הזה מופעלת גם דחיסת gzip לבקשות ולתגובות.
ההגדרה מסופקת באמצעות קובץ טקסט שנטען ב-/etc/nginx/conf.d/nginx.conf. אי אפשר לערוך קבצים ישירות במאגר, ולכן צריך לטעון נפח ב-/etc/nginx/conf.d/ שמכיל את קובץ התצורה. אחת הדרכים לטפל בקובץ במיקום ספציפי בקונטיינר שפועל ב-Cloud Run היא לאחסן את תוכן הקובץ בסוד של Secret Manager, ולטפל בסוד הזה במיקום שנבחר.
מעתיקים את הקוד הבא לקובץ בשם nginx.conf בספרייה הנוכחית במחשב המקומי.
בהגדרה, מבצעים את הפעולות הבאות:
- מקצים את
nginxלהאזין באותה יציאת ברירת מחדל של Cloud Run8080, שנמצאת ב-localhost. - כדאי להשתמש בדחיסת gzip כדי לשפר את הביצועים.
- מנחים את
proxy_passלהעביר את כל הבקשות למאגר הכניסה הזה אל מאגר ה-sidecar של אפליקציית האינטרנט ביציאה8888ב-localhost.
יוצרים סוד עם התוכן של קובץ nginx.conf.
המסוף
נכנסים לדף Secret Manager במסוף Cloud de Confiance :
לוחצים על יצירת סוד.
בשדה הטופס
name, מזינים nginx_config.מעלים את הקובץ
nginx.confשנמצא במיקוםmulti-container/hello-nginx-sample/nginx.confבתור הערך הסודי.משאירים את ברירות המחדל (
Google Cloud-powered encryption key, etc).לוחצים על יצירת סוד.
נותנים לחשבון השירות של Compute בפרויקט גישה לסוד החדש הזה. כדי לעשות את זה, נכנסים לדף IAM במסוף Cloud de Confiance :
מחפשים את חשבון השירות הראשי עם השם:
Compute Engine default service accountולוחצים על Edit principal (עריכת חשבון המשתמש).לוחצים על Add another role ובוחרים באפשרות Secret Manager Secret Accessor.
לוחצים על Save.
gcloud
במסוף, משתמשים בפקודה הבאה כדי ליצור סוד חדש
nginx_configב-Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
נותנים לחשבון השירות של Compute בפרויקט גישה לסוד החדש באמצעות הפקודה
export PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)') gcloud secrets add-iam-policy-binding nginx_config --member=serviceAccount:$PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com --role='roles/secretmanager.secretAccessor'
כדי לוודא שהסוד נוצר, מריצים את הפקודה
gcloud secrets list.
מידע על תמונת הדוגמה של סרגל הצד באפליקציית האינטרנט
ההוראות האלה מתבססות על קובץ אימג' של קונטיינר לדוגמה בכתובת us-docker.pkg.dev/cloudrun/container/hello. צריך לציין את מספר היציאה שהקונטיינר יאזין לו ואת localhost כמארח, כמו שמתואר בקטע ציון הגדרות של קונטיינר sidecar, כפי שמתואר בקטעים הבאים.
הגדרת השירות מרובה הקונטיינרים
אתם יכולים להשתמש במסוף Cloud de Confiance או בקובץ ה-YAML של Cloud Run כדי להגדיר שירות Cloud Run עם יותר מקונטיינר אחד.
בהגדרת השירות, מציינים את שרת ה-proxy של Nginx כמאגר (serving) של תעבורת נכנסת, את היציאה שבה הוא יאזין, אם הוא מקבל בקשות HTTP 1 או HTTP 2 ואת סדר ההפעלה של מאגר התגים. מאגר הכניסה (שרת proxy) תלוי ב-sidecar של אפליקציית האינטרנט, ולכן צריך להפעיל קודם את ה-sidecar של אפליקציית האינטרנט.
התצורות האלה מוצגות בכמה מהקטעים הבאים.
הוספת מטא-נתונים של YAML
המסוף
הוראות מלאות לשימוש במסוף מופיעות במאמר פריסת השירות.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
ב-
service.yaml, מוסיפים את הפריטים הבאים:
בקטע הזה מתואר גרסת השירות, שכוללת מאפיינים שיכולים להשתנות מגרסה לגרסה.
הגדרה של סדר הפעלת הקונטיינרים
המסוף
הוראות מלאות לשימוש במסוף מופיעות במאמר פריסת השירות.
YAML
ב-service.yaml, מוסיפים את הטקסט הבא:
שימו לב להערה container-dependencies שמורה ל-Cloud Run להמתין עד שהקונטיינר hello יופעל לפני הפעלת הקונטיינר nginx. אחרת, אם קונטיינר nginx יופעל ראשון, הוא עלול לנסות להעביר שרת proxy בקשה לאחזור מהרשת לקונטיינר של אפליקציית האינטרנט שלא מוכן, וכתוצאה מכך ייווצרו תגובות שגיאה באינטרנט.
אפשר להגדיר לכל קונטיינר מאפיין שם, שמשמש להפניה אליו בהוראות אחרות.
קונטיינר ההצגה מפעיל את שרת ה-proxy שנקרא nginx. זהו הקונטיינר שאליו Cloud Run מעביר בקשות נכנסות, ולכן צריך לציין את הגרסה של HTTP ואת יציאת הקונטיינר שאליהן הבקשות יועברו.
ציון הגדרות של קונטיינר להצגת מודעות
המסוף
הוראות מלאות לשימוש במסוף מופיעות במאמר פריסת השירות.
YAML
בקובץ service.yaml, מוסיפים את השורות הבאות:
השרת nginx דורש קובץ הגדרה בספרייה /etc/nginx/conf.d/. כדי לעשות את זה, צריך לטעון נפח אחסון שמכיל את הקובץ במיקום הזה. בקטע volumeMount מצוין שצריך להציב שם עוצמת קול שנקראת configuration. הווליום עצמו מוגדר בקטע משלו בהמשך הקובץ.
ציון הגדרות של קונטיינר sidecar
המסוף
הוראות מלאות לשימוש במסוף מופיעות במאמר פריסת השירות.
YAML
ב-service.yaml, מוסיפים את הטקסט הבא:
גם לאפליקציית hello נדרש מידע על ההגדרות. הוא מאזין לבקשות נכנסות ביציאה שצוינה במשתנה הסביבה PORT. השם והערך האלה מצוינים בקטע env.
ציון הנפח הסודי
המסוף
הוראות מלאות לשימוש במסוף מופיעות במאמר פריסת השירות.
YAML
בקובץ service.yaml, מוסיפים את השורות הבאות:
מציינים את ההגדרה volume שמועלית בקטע volumeMount. הוא מכיל קובץ יחיד בשם nginx.conf שהתוכן שלו מוגדר כערך של הסוד שנקרא nginx-conf-secret.
פריסת השירות
המסוף
נכנסים לדף Cloud Run במסוף Cloud de Confiance :
בתפריט בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת מאגר) כדי להציג את הטופס Create service (יצירת שירות).
- בוחרים באפשרות Deploy one revision from an existing container image (פריסת עדכון אחד מקובץ אימג' קיים של קונטיינר) ומזינים את
nginxבתור Container image URL (כתובת URL של קובץ אימג' של קונטיינר). - בשדה Service name (שם השירות), מציינים שם לשירות, לדוגמה,
hello-mc. - ברשימה Region, בוחרים מיקום לפריסה, לדוגמה,
us-west1. - בקטע אימות, בוחרים באפשרות אפשר גישה לכולם. אם אין לכם הרשאות (תפקיד אדמין ב-Cloud Run) לבחור באפשרות הזו, השירות יופעל ויידרש אימות.
- בוחרים באפשרות Deploy one revision from an existing container image (פריסת עדכון אחד מקובץ אימג' קיים של קונטיינר) ומזינים את
לוחצים על Containers, Networking, Security (מאגרי תגים, רשתות, אבטחה) כדי להרחיב את טופס ההגדרה.
- לוחצים על הכרטיסייה Volumes (אמצעי אחסון).
- לוחצים על הוספת עוצמת קול.
- ברשימה סוג נפח, בוחרים באפשרות סוד.
- בשדה Volume name, מזינים
nginx-conf-secret. - בשדה Secret (סוד), מזינים nginx_config.
- בקטע Specified paths for secret versions (נתיבים שצוינו לגרסאות של סודות), מציינים את default.conf כנתיב ואת latest כגרסה.
- לוחצים על Create (יצירה) כדי ליצור את נפח ה-Secret.
לוחצים על הכרטיסייה מאגרי תגים כדי להציג את הטופס עריכת מאגר תגים.
- לוחצים על הגדרות, ואז בקטע משאבים משנים את הזיכרון ל-256MiB ואת המעבד ל-1 CPU.
- לוחצים על Volume mounts (נקודות חיבור של אמצעי אחסון).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- בוחרים באפשרות nginx-conf-secret מתוך רשימת השמות.
- בשדה נתיב הטעינה, מזינים etc/nginx/conf.d.
- לוחצים על סיום כדי להשלים את ההגדרה של מאגר התגים הראשון.
לוחצים על Add container (הוספת מאגר) כדי להוסיף את מאגר ה-sidecar ולהציג את הטופס New container (מאגר חדש).
- בוחרים את כתובת ה-URL של קובץ האימג' של קונטיינר ברירת המחדל us-docker.pkg.dev/cloudrun/container/hello
- לוחצים על הכרטיסייה הגדרות, ואז בקטע משאבים משנים את הזיכרון ל-256MiB ואת המעבד ל-1 CPU.
- לוחצים על Variables & Secrets (משתנים וסודות).
- לוחצים על הוספת משתנה.
- מזינים PORT כשם משתנה הסביבה החדש ו-8888 כערך.
- לוחצים על סיום.
עוברים לטופס עריכת מאגר של המאגר הראשון (
nginx).- לוחצים על הכרטיסייה הגדרות.
- בקטע Container start up order, בוחרים באפשרות
nginxמהרשימה Depends on. כלומר, קונטיינרnginxמתחיל לפעול רק אחרי שקונטיינרhelloמתחיל לפעול בהצלחה. - לוחצים על Create (יצירה) ומחכים לפריסת השירות.
YAML
כדי לפרוס את קונטיינר שרת ה-proxy ואת קונטיינר אפליקציית האינטרנט כשירות יחיד:
gcloud run services replace service.yaml
אימות השירות שנפרס
כדי לוודא שהפריסה הצליחה, מעתיקים את כתובת ה-URL שנוצרה ב-Cloud Run ופותחים אותה בדפדפן, או משתמשים בפקודה הבאה כדי לשלוח בקשה מאומתת:
curl --header "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
אמור להופיע שרת proxy של nginx שהועבר בהצלחה למאגר hello sidecar עם סטטוס תגובה 200.
רוצים לנסות בעצמכם?
כדי לעקוב אחרי המדריך הזה:
gcloud
בטרמינל, משכפלים את מאגר האפליקציה לדוגמה למחשב המקומי:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
עוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
cd cloud-run-samples/multi-container/hello-nginx-sample/
המאמרים הבאים
כדי לקבל מידע נוסף על שימוש בקובצי עזר בשירות Cloud Run: