כברירת מחדל, שירות Cloud Run מתחבר לנקודות קצה חיצוניות באינטרנט באמצעות מאגר דינמי של כתובות IP. אם שירות Cloud Run מתחבר לנקודת קצה חיצונית שנדרשת לה כתובת IP סטטית, כמו מסד נתונים או API שמשתמשים בחומת אש מבוססת-IP, צריך להגדיר את שירות Cloud Run כך שינתב בקשות באמצעות כתובת IP סטטית.
בדף הזה מוסבר איך מאפשרים לשירות Cloud Run לשלוח בקשות באמצעות כתובת IP סטטית.
מומלץ להגדיר את Cloud Run כך שישלח תעבורת נתונים לרשת VPC באמצעות Direct VPC egress. עם זאת, יש לכם אפשרות ליצור מחבר.
סקירה כללית של המשימה
כדי לאפשר לשירות Cloud Run לנתב בקשות באמצעות כתובת IP סטטית, צריך להגדיר את תעבורת הנתונים היוצאת (egress) של VPC בשירות Cloud Run כך שכל תעבורת הנתונים היוצאת תנותב דרך רשת VPC שמוגדר בה שער Cloud NAT עם כתובת ה-IP הסטטית.
במדריך הזה תגדירו Cloud NAT במצב ידני ותקצו לו כתובת IP סטטית אחת. אם עומסי העבודה של Cloud Run מתרחבים למספרים גדולים, יכול להיות שתצטרכו להקצות כמה כתובות IP סטטיות ל-Cloud NAT. מידע נוסף על האופן שבו שערים של Cloud NAT משתמשים בכתובות IP וביציאות
ניתוב התעבורה דרך Cloud NAT לא גורם להוספת עוד ניתוב במערך הרשת, כי שער Cloud NAT ו-Cloud Router מספקים רק מישור בקרה, והמנות לא עוברות דרך שער ה-NAT או דרך Cloud Router.
הגדרת תרגום כתובות רשת (NAT)
אם אתם משתמשים בתעבורת נתונים יוצאת (egress) ישירה של VPC או במחבר של חיבור לרשת (VPC) מאפליקציית serverless, הבקשות מהשירות של 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 עם תעבורת נתונים יוצאת (egress) ישירה של VPCאו עם מחבר Serverless VPC Access, ומגדירים את תעבורת הנתונים היוצאת (egress) של VPC לניתוב כל התעבורה דרך רשת ה-VPC:
gcloud
יציאה ישירה של תעבורה מ-VPC
כדי לפרוס או לעדכן את שירות Cloud Run כך שישתמש בתעבורת נתונים יוצאת (egress) ישירה של 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) מאפליקציית serverless
כדי לפרוס או לעדכן את שירות Cloud Run כך שישתמש במחבר של חיבור לרשת (VPC) מאפליקציית serverless וינתב דרכו את כל תעבורת הנתונים היוצאת (egress), מריצים את הפקודה הבאה:
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) מאפליקציית serverless.
- 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
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
מחבר חיבור לרשת (VPC) מאפליקציית serverless
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-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
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
יציאה ישירה של תעבורה מ-VPC
שירות Cloud Run הזה משתמש ב-Direct VPC egress ומנתב דרכו את כל תעבורת הנתונים היוצאת:
מחבר חיבור לרשת (VPC) מאפליקציית serverless
שירות Cloud Run הזה משתמש במחבר VPC ומנתב דרכו את כל תעבורת הנתונים היוצאת (egress):
מחליפים את 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 חיצונית סטטית.