כברירת מחדל, עומסי העבודה של Cloud Run מתחברים לנקודות קצה חיצוניות באינטרנט באמצעות מאגר אזורי של כתובות IP דינמיות, שמשותף לכל עומסי העבודה ללא שרת (serverless). מכיוון שעומסי עבודה אחרים משתפים את המאגר הזה, אל תסתמכו עליו אם אתם צריכים כתובת IP צפויה של מקור או מוניטין מבודד של כתובת IP.
כדאי להגדיר את עומסי העבודה ב-Cloud Run לניתוב בקשות יוצאות באמצעות כתובת IP סטטית ייעודית במצבים הבאים:
- אתם מתחברים למסד נתונים חיצוני או ל-API שמשתמש ברשימת היתרים של כתובות IP או בחומת אש.
- אתם מתחברים לנקודות קצה חיצוניות שרגישות למוניטין, כמו שערי תשלום, מסדי נתונים מתארחים או ממשקי API של שותפים שמוגנים על ידי חומות אש ליישומי אינטרנט (WAF) של צד שלישי. תעבורת נתונים רועשת מדייר אחר במאגר ברירת המחדל של כתובות ה-IP המשותפות עלולה לפגוע במוניטין של כתובת ה-IP, ולגרום ל-WAF חיצוניים לחסום או להגביל את הבקשות שלכם.
- אתם מריצים עומסי עבודה של סריקת רשת מורשית, ספירת יציאות, טביעת אצבע של מארח, בדיקת פגיעויות, גירוד נתונים מהאינטרנט או בדיקת עומסים.
כדי לשלוח בקשות יוצאות מכתובת IP סטטית ייעודית, צריך להגדיר את שירות Cloud Run כך שישתמש בDirect VPC egress. אפשר גם ליצור מחבר.
סקירה כללית של המשימה
כדי לנתב בקשות באמצעות כתובת IP סטטית, מגדירים את תעבורת הנתונים היוצאת (egress) של ה-VPC של השירות כך שכל תעבורת הנתונים היוצאת (--vpc-egress=all-traffic) תישלח דרך רשת VPC.
מצרפים שער Cloud NAT לרשת הזו עם כתובת ה-IP הסטטית השמורה.
במדריך הזה תגדירו את Cloud NAT במצב ידני ותקצו לו כתובת IP סטטית אחת. אם עומסי העבודה שלכם מתרחבים למספר גדול של מכונות קונטיינרים או פותחים הרבה חיבורים בו-זמנית, למשל במהלך סריקה של רשת מורשית, הקצו כמה כתובות IP סטטיות ל-Cloud NAT. אתם יכולים גם להגדיל את מספר היציאות המינימלי לכל מכונת קונטיינר או להפעיל הקצאת יציאות דינמית כדי למנוע ניצול יתר של היציאות. איך שערי Cloud NAT משתמשים בכתובות IP וביציאות
ניתוב התנועה דרך Cloud NAT לא מוסיף עוד דילוג במקבץ הרשת (network stack), כי שער Cloud NAT ו-Cloud Router מספקים רק מישור בקרה, והחבילות לא עוברות דרך שער ה-NAT או Cloud Router.
הגדרת תרגום כתובת רשת (NAT)
אם אתם משתמשים ב-Direct VPC egress או במחבר של Serverless VPC Access, הבקשות משירות Cloud Run מגיעות לרשת ה-VPC. אם רוצים לנתב בקשות יוצאות לנקודות קצה חיצוניות באמצעות כתובת IP סטטית, צריך להגדיר שער Cloud NAT.
gcloud
יוצרים Cloud Router חדש כדי לתכנת שער Cloud NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
מחליפים את מה שכתוב בשדות הבאים:
-
ROUTER_NAME: שם למשאב של Cloud Router שרוצים ליצור. -
NETWORK_NAME: השם של רשת ה-VPC שמצאתם קודם. -
REGION: האזור שבו רוצים ליצור שער Cloud NAT.
-
שומרים כתובת IP סטטית. משאב של כתובת IP שמורה שומר על כתובת ה-IP הבסיסית כשמוחקים את המשאב שמשויך אליה ויוצרים אותו מחדש:
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
מחליפים את מה שכתוב בשדות הבאים:
-
ORIGIN_IP_NAME: השם שרוצים להקצות למשאב של כתובת ה-IP. -
REGION: האזור שבו יפעל הנתב של Cloud NAT. כדי לצמצם את זמן האחזור ואת עלויות הרשת, כדאי להשתמש באותו אזור שבו נמצא שירות Cloud Run.
-
יוצרים הגדרה של שער Cloud NAT בנתב הזה כדי לנתב את התנועה שמגיעה מרשת ה-VPC באמצעות כתובת ה-IP הסטטית שיצרתם:
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
NAT_NAME: שם למשאב של שער Cloud NAT שרוצים ליצור. -
ROUTER_NAME: השם של Cloud Router. -
REGION: האזור שבו רוצים ליצור שער Cloud NAT. -
SUBNET_NAME: השם של רשת המשנה. -
ORIGIN_IP_NAME: השם של משאב כתובת ה-IP השמורה שיצרתם בשלב הקודם.
-
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
יוצרים Cloud Router חדש כדי לתכנת שער Cloud NAT:
מחליפים את
cr-static-ip-routerבשם של רשת המשנה.שומרים כתובת IP סטטית. משאב של כתובת IP שמורה שומר על כתובת ה-IP הבסיסית כשהמשאב שמשויך אליה נמחק ונוצר מחדש:
מחליפים את
cr-static-ip-addrבשם של רשת המשנה.יוצרים הגדרה של שער Cloud NAT בנתב הזה כדי לנתב את התנועה שמגיעה מרשת ה-VPC באמצעות כתובת ה-IP הסטטית שיצרתם:
מחליפים את
cr-static-natבשם של שער Cloud NAT.
ניתוב תנועה של Cloud Run דרך רשת ה-VPC
אחרי שמגדירים את Cloud NAT, פורסים או מעדכנים את שירות Cloud Run באמצעות Direct VPC egressאו מחבר של גישה ל-VPC ללא שרת (Serverless), ומגדירים את תעבורת הנתונים היוצאת של VPC כך שכל התנועה תנותב דרך רשת ה-VPC:
gcloud
תעבורת נתונים יוצאת ישירה של VPC
כדי לפרוס או לעדכן את שירות Cloud Run כך שישתמש ב-Direct VPC וינתב דרכה את כל תעבורת הנתונים היוצאת, מריצים את הפקודה הבאה:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --region=REGION \ --vpc-egress=all-traffic
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run שרוצים לפרוס.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - NETWORK: השם של רשת ה-VPC
- SUBNET: השם של רשת המשנה.
- REGION: אזור לשירות.
חיבור לרשת VPC ללא שרת
כדי לפרוס או לעדכן את שירות Cloud Run כך שישתמש במחבר של חיבור לרשת (VPC) מאפליקציית serverless וינתב דרכו את כל תעבורת הנתונים היוצאת, מריצים את הפקודה הבאה:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --vpc-connector=CONNECTOR_NAME \ --region=REGION \ --vpc-egress=all-traffic
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run שרוצים לפרוס.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - CONNECTOR_NAME: השם של המחבר לגישה ל-VPC ללא שרת.
- REGION: אזור לשירות.
YAML
תעבורת נתונים יוצאת ישירה של VPC
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים לפי הצורך.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]' run.googleapis.com/vpc-access-egress: all-traffic spec: containers: - image: IMAGE_URL
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- NETWORK: השם של רשת ה-VPC
- SUBNET: השם של רשת המשנה.
- IMAGE_URL: כתובת ה-URL של קובץ האימג' של קונטיינר השירות.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
כברירת מחדל, הפקודה
gcloud run services replaceמשתמשת בקובץservice.yamlאם הוא קיים.
חיבור לרשת VPC ללא שרת
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים לפי הצורך.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME spec: containers: - image: IMAGE_URL
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- CONNECTOR_NAME: השם של רשת הגישה ל-VPC ללא שרת.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
כברירת מחדל, הפקודה
gcloud run services replaceמשתמשת בקובץservice.yamlאם הוא קיים.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
תעבורת נתונים יוצאת ישירה של VPC
בשירות Cloud Run הזה נעשה שימוש ב-Direct VPC egress, וכל תעבורת הנתונים היוצאת מנותבת דרכו:
חיבור לרשת VPC ללא שרת
שירות Cloud Run הזה משתמש במחבר VPC ומנתב דרכו את כל תעבורת הנתונים היוצאת:
מחליפים את us-docker.pkg.dev/cloudrun/container/hello בהפניה לקובץ האימג' של הקונטיינר.
אימות כתובת ה-IP החיצונית הסטטית
אחרי שתסיימו את השלבים הקודמים, תגדירו את Cloud NAT ברשת ה-VPC עם כתובת IP סטטית מוגדרת מראש, ותנתבו את כל התנועה היוצאת של שירות Cloud Run לרשת ה-VPC. בקשות משירות Cloud Run עוברות דרך רשת ה-VPC ומגיעות לנקודות קצה חיצוניות באמצעות כתובת ה-IP הסטטית.
כדי לאמת את ההתנהגות הזו ולאשר את כתובת ה-IP המקורית שבה השירות משתמש, אתם יכולים לשלוח בקשה ל-API או לאתר כמו curlmyip.org שמציג את כתובת ה-IP המקורית.
מחיקת כתובת ה-IP החיצונית הסטטית
אם אתם לא צריכים יותר כתובת IP חיצונית סטטית, תוכלו לקרוא איך משחררים כתובת IP חיצונית סטטית.