בדף הזה מוסבר איך להשתמש ב-Nginx כפרוקסי frontend עבור קונטיינר האפליקציה. האפשרות הזו שימושית אם רוצים לעבד בקשות או תשובות. אתם יכולים להוסיף דחיסת gzip, או לתרגם HTTP/2 ל-HTTP/1 אם קובצי ה-container של האפליקציה תומכים רק ב-HTTP/1 ואתם צריכים להשתמש ב-HTTP/2 מקצה לקצה מסיבות שקשורות לביצועים.
בדוגמה שמופיעה בדף הזה, קונטיינר Nginx פועל בכל מופע של Cloud Run כקונטיינר הראשי להצגת תוכן, והוא מוגדר להעברת בקשות לקונטיינר האפליקציה, שפועל כקונטיינר sidecar, כפי שמוצג בתרשים הזה:
הדרך הכי יעילה להגדיר פרוקסי לקצה הקדמי ב-Cloud Run היא לפרוס את קונטיינר שרת הפרוקסי של Nginx ואת קונטיינר אפליקציית האינטרנט כשירות Cloud Run יחיד:
שירות Cloud Run יחיד מקבל בקשות ומעביר אותן לקונטיינר של הכניסה (הגשת הבקשות), שבמקרה הזה הוא שרת ה-proxy. לאחר מכן, שרת ה-proxy שולח בקשות לאפליקציית האינטרנט דרך ממשק הרשת localhost, וכך נמנעת גישה לרשת חיצונית.
פריסה כשירות Cloud Run יחיד מפחיתה את זמני האחזור, את התקורה של ניהול השירות ומבטלת את החשיפה לרשתות חיצוניות. Cloud Run לא מקיים אינטראקציה ישירה עם קונטיינרים מסוג sidecar, מלבד הפעלה או עצירה שלהם בכל פעם שהשירות מופעל או מושבת.
אפשר לכתוב את מאגר התגים של אפליקציית האינטרנט ואת כל מאגרי התגים הנלווים בשפות תכנות שונות. דוגמה שנכתבה ב-PHP זמינה בדוגמה ל-PHP nginx ב-GitHub.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
מפעילים את Cloud Run API ואת Secret Manager API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים- מתקינים ומפעילים את ה-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/ שמכיל את קובץ התצורה. אחת הדרכים לטפל בבעיה הזו היא לאחסן את תוכן הקובץ בסוד של Secret Manager, ואז לטעון את הסוד הזה במיקום הרצוי.
מעתיקים את הקוד הבא לקובץ בשם nginx.conf בספרייה הנוכחית במחשב המקומי.
במסגרת ההגדרה, מבצעים את הפעולות הבאות:
- מקצים את
nginxלהאזנה באותה יציאה שמוגדרת כברירת מחדל ב-Cloud Run8080, שנמצאת ב-localhost. - כדאי להשתמש בדחיסת gzip כדי לשפר את הביצועים.
- מנחים את
proxy_passלהעביר את כל הבקשות למאגר הכניסה הזה אל מאגר ה-sidecar של אפליקציית האינטרנט ביציאת localhost8888.
יוצרים סוד עם התוכן של קובץ nginx.conf.
המסוף
נכנסים לדף Secret Manager במסוף Google Cloud :
לוחצים על Create secret (יצירת סוד).
בשדה הטופס
name, מזינים nginx_config.מעלים את הקובץ
nginx.confשנמצא במיקוםmulti-container/hello-nginx-sample/nginx.confכערך הסודי.משאירים את ברירות המחדל (
Google-owned and Google-managed encryption key, etc).לוחצים על Create secret (יצירת סוד).
נותנים לחשבון השירות של Compute בפרויקט גישה לסוד החדש. כדי לעשות את זה, נכנסים לדף IAM במסוף Google Cloud :
מחפשים את חשבון השירות הראשי עם השם:
Compute Engine default service accountולוחצים על עריכת חשבון המשתמש.לוחצים על 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.gserviceaccount.com --role='roles/secretmanager.secretAccessor'
מריצים את הפקודה
gcloud secrets listכדי לוודא שהסוד נוצר.
מידע על תמונת הדוגמה של סרגל הצד באפליקציית האינטרנט
ההוראות האלה מתבססות על קובץ אימג' של קונטיינר לדוגמה בכתובת us-docker.pkg.dev/cloudrun/container/hello. צריך לציין את מספר היציאה שהקונטיינר יאזין לו ואת localhost כמארח, כמו שמתואר בקטע Specify sidecar container configuration, כפי שמתואר בקטעים הבאים.
הגדרת שירות מרובה קונטיינרים
אתם יכולים להשתמש במסוף Google Cloud או בקובץ ה-YAML של Cloud Run כדי להגדיר שירות Cloud Run עם יותר מקונטיינר אחד.
בהגדרת השירות, מציינים את שרת ה-proxy של Nginx כמאגר תגים (לצורך הצגה) של תנועה נכנסת, את היציאה שבה הוא יאזין, אם הוא מקבל בקשות 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 במסוף Google Cloud :
בתפריט, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת מאגר) כדי להציג את הטופס Create service (יצירת שירות).
- בוחרים באפשרות Deploy one revision from an existing container image (פריסת עדכון אחד מקובץ אימג' קיים של קונטיינר) ומזינים את
nginxבתור Container image URL (כתובת ה-URL של קובץ אימג' של קונטיינר). - בשדה Service name (שם השירות), מציינים שם לשירות, לדוגמה,
hello-mc. - ברשימה אזור, בוחרים מיקום לפריסה, לדוגמה,
us-west1. - בקטע Authentication, בוחרים באפשרות Allow public access. אם אין לכם הרשאות (תפקיד אדמין ב-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 כגרסה.
- לוחצים על יצירה כדי ליצור את נפח ה-Secret.
לוחצים על הכרטיסייה מאגרי תגים כדי להציג את הטופס עריכת מאגר תגים.
- לוחצים על הגדרות, ואז בקטע משאבים משנים את הזיכרון ל-256MiB ואת המעבד ל-1 CPU.
- לוחצים על Volume mounts (הצמדת אמצעי אחסון).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- בוחרים באפשרות nginx-conf-secret מרשימת השמות.
- בשדה Mount path (נתיב הטעינה), מזינים etc/nginx/conf.d.
- לוחצים על סיום כדי להשלים את ההגדרה של מאגר התגים הראשון.
לוחצים על Add container (הוספת מאגר) כדי להוסיף את מאגר ה-sidecar ולהציג את הטופס New container (מאגר חדש).
- בוחרים את כתובת ה-URL של קובץ האימג' של הקונטיינר שמוגדרת כברירת מחדל us-docker.pkg.dev/cloudrun/container/hello
- לוחצים על הכרטיסייה הגדרות, ואז בקטע משאבים משנים את הזיכרון ל-256MiB ואת המעבד ל-1 CPU.
- לוחצים על Variables & Secrets (משתנים וסודות).
- לוחצים על הוספת משתנה.
- מזינים PORT כשם משתנה הסביבה החדש ו-8888 כערך.
- לוחצים על סיום.
עוברים לטופס Edit container (עריכת מאגר התגים) של מאגר התגים הראשון (
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: