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