הגדרת מחברים בפרויקט המארח של VPC משותף

אם הארגון שלכם משתמש ב-VPC משותף, אתם יכולים להגדיר מחבר Serverless VPC Access בפרויקט השירות או בפרויקט המארח. במדריך הזה מוסבר איך להגדיר מחבר בפרויקט המארח.

אם אתם צריכים להגדיר מחבר בפרויקט שירות, תוכלו לעיין במאמר הגדרת מחברים בפרויקטים של שירותים. במאמר התחברות לרשת VPC משותפת מוסבר על היתרונות של כל שיטה.

לפני שמתחילים

  1. בדקו את התפקידים בניהול הזהויות והרשאות הגישה (IAM) בחשבון שבו אתם משתמשים כרגע. לחשבון הפעיל צריכים להיות התפקידים הבאים בפרויקט המארח:

  2. בוחרים את פרויקט המארח בסביבה המועדפת.

המסוף

  1. פותחים את לוח הבקרה במסוף Google Cloud .

    כניסה ללוח הבקרה של Google Cloud המסוף

  2. בסרגל התפריטים בחלק העליון של לוח הבקרה, לוחצים על התפריט הנפתח של הפרויקט ובוחרים את פרויקט המארח.

gcloud

כדי להגדיר את פרויקט המארח כפרויקט ברירת המחדל ב-CLI של gcloud, מריצים את הפקודה הבאה במסוף:

gcloud config set project HOST_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • HOST_PROJECT_ID: המזהה של פרויקט המארח של ה-VPC המשותף

יצירת מחבר של חיבור לרשת (VPC) מאפליקציית serverless

כדי לשלוח בקשות לרשת ה-VPC ולקבל את התגובות המתאימות, צריך ליצור מחבר של חיבור לרשת (VPC) מאפליקציית serverless. אפשר ליצור מחבר באמצעות מסוף Google Cloud , Google Cloud CLI או Terraform:

המסוף

  1. מפעילים בפרויקט את Serverless VPC Access API.

    הפעלת ה-API

  2. עוברים לדף הסקירה הכללית של חיבור לרשת (VPC) מאפליקציית serverless.

    מעבר אל Serverless VPC Access

  3. לוחצים על יצירת מחבר.

  4. בשדה שם, מזינים שם למחבר. השם צריך להיות בהתאם למוסכמות למתן שמות ב-Compute Engine, ואורכו צריך להיות פחות מ-21 תווים. מקפים (-) נספרים כשני תווים.

  5. בשדה Region (אזור), בוחרים אזור למחבר. האזור הזה צריך להיות זהה לאזור של השירות בלי שרת (serverless).

    אם השירות שלכם נמצא באזור us-central או europe-west, צריך להשתמש ב-us-central1 או ב-europe-west1.

  6. בשדה רשת, בוחרים את רשת ה-VPC שאליה רוצים לצרף את המחבר.

  7. לוחצים על התפריט הנפתח רשת משנה:

    בוחרים רשת משנה /28 שלא נמצאת בשימוש.

    • רשתות המשנה צריכות לשמש אך ורק את המחבר. אי אפשר להשתמש בהם במשאבים אחרים כמו מכונות וירטואליות, Private Service Connect או מאזני עומסים.
    • כדי לוודא שלא נעשה שימוש ברשת המשנה עבור Private Service Connect או Cloud Load Balancing, מריצים את הפקודה הבאה ב-CLI של gcloud כדי לבדוק שהרשת המשנה purpose היא PRIVATE:
      gcloud compute networks subnets describe SUBNET_NAME
      
      מחליפים את SUBNET_NAME בשם של רשת המשנה.
  8. (אופציונלי) כדי להגדיר אפשרויות שינוי גודל לשליטה נוספת במחבר, לוחצים על הצגת הגדרות שינוי גודל כדי להציג את טופס שינוי הגודל.

    1. מגדירים את מספר המכונות המינימלי והמקסימלי למחבר, או משתמשים בערכי ברירת המחדל: 2 (מינימום) ו-10 (מקסימום). המחבר מתרחב עד למקסימום שצוין ככל שהתנועה גדלה, אבל הוא לא מצטמצם כשהתנועה פוחתת. הערכים צריכים להיות בין 2 ל-10, והערך של MIN צריך להיות קטן מהערך של MAX.
    2. בתפריט הנפתח Instance Type, בוחרים את סוג המכונה שבה ישתמש המחבר, או משתמשים בברירת המחדל e2-micro. שימו לב לסרגל הצד של העלויות משמאל כשבוחרים את סוג המופע. בסרגל מוצגים אומדנים של רוחב הפס והעלויות.
  9. לוחצים על יצירה.

  10. כשמחבר מוכן לשימוש, יופיע סימן וי ירוק ליד השם שלו.

gcloud

  1. מעדכנים את הרכיבים של gcloud לגרסה האחרונה:

    gcloud components update
    
  2. מפעילים בפרויקט את Serverless VPC Access API:

    gcloud services enable vpcaccess.googleapis.com
    
  3. יוצרים מחבר של חיבור לרשת (VPC) מאפליקציית serverless:

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    מחליפים את מה שכתוב בשדות הבאים:

    • CONNECTOR_NAME: שם המחבר. השם צריך לעמוד במוסכמות למתן שמות ב-Compute Engine, והאורך שלו צריך להיות פחות מ-21 תווים. מקפים (-) נספרים כשני תווים.
    • REGION: אזור לחיבור. האזור הזה צריך להיות זהה לאזור של שירות ה-serverless. אם השירות שלכם נמצא באזור us-central או europe-west, צריך להשתמש ב-us-central1 או ב-europe-west1.
    • SUBNET: השם של רשת משנה /28 שלא נמצאת בשימוש.
      • רשתות המשנה צריכות לשמש אך ורק את המחבר. אי אפשר להשתמש בהם במשאבים אחרים כמו מכונות וירטואליות, Private Service Connect או מאזני עומסים.
      • כדי לוודא שרשת המשנה לא משמשת ל-Private Service Connect או ל-Cloud Load Balancing, מריצים את הפקודה הבאה ב-CLI של gcloud כדי לבדוק שהערך של רשת המשנה purpose הוא PRIVATE:
        gcloud compute networks subnets describe SUBNET_NAME
        
        מחליפים את מה שכתוב בשדות הבאים:
        • SUBNET_NAME: השם של רשת המשנה
    • HOST_PROJECT_ID: המזהה של פרויקט המארח
    • MIN: מספר המינימום של המופעים לשימוש במחבר. צריך להשתמש במספר שלם בין 2 ל-9. ברירת המחדל היא 2. מידע על שינוי גודל המחבר זמין במאמר Throughput and scaling.
    • MAX: המספר המקסימלי של מופעים לשימוש במחבר. צריך להשתמש במספר שלם בין 3 ל-10. ברירת המחדל היא 10. אם התנועה דורשת זאת, המחבר מתרחב ל-[MAX] מופעים, אבל לא מצטמצם. מידע על שינוי גודל המחבר זמין במאמר Throughput and scaling.
    • MACHINE_TYPE: f1-micro, e2-micro או e2-standard-4. מידע על קצב העברת הנתונים של המחבר, כולל סוג המכונה והתאמת קנה מידה, זמין במאמר קצב העברת נתונים והתאמת קנה מידה.

    פרטים נוספים וארגומנטים אופציונליים מופיעים במאמר gcloud.

  4. לפני שמשתמשים במחבר, צריך לוודא שהוא במצב READY:

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    מחליפים את מה שכתוב בשדות הבאים:

    • CONNECTOR_NAME: השם של מחבר הנתונים. זהו השם שציינתם בשלב הקודם
    • REGION: האזור של המחבר. זהו האזור שציינתם בשלב הקודם

    הפלט צריך לכלול את השורה state: READY.

Terraform

אפשר להשתמש במשאב של Terraform כדי להפעיל את vpcaccess.googleapis.com API.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

אתם יכולים להשתמש במודולים של Terraform כדי ליצור רשת VPC ותת-רשת, ואז ליצור את המחבר.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 13.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 13.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

הפעלת Cloud Run בפרויקט השירות

מפעילים את Cloud Run API בפרויקט השירות. ההרשאה הזו נדרשת כדי להוסיף תפקידי IAM בשלבים הבאים וכדי שפרויקט השירות יוכל להשתמש ב-Cloud Run.

המסוף

  1. פותחים את הדף של Cloud Run API.

    Cloud Run API

  2. בסרגל התפריטים בחלק העליון של מרכז הבקרה, לוחצים על התפריט הנפתח של הפרויקט ובוחרים את פרויקט השירות.

  3. לוחצים על Enable.

gcloud

מריצים את הפקודה הבאה בטרמינל:

gcloud services enable run.googleapis.com --project=SERVICE_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_PROJECT_ID: המזהה של פרויקט השירות

מתן גישה למחבר

נותנים גישה למחבר על ידי הקצאת תפקיד Serverless VPC Access User ב-IAM לסוכן השירות של Cloud Run בפרויקט המארח.

המסוף

  1. פותחים את דף IAM.

    כניסה לדף IAM

  2. לוחצים על התפריט הנפתח של הפרויקט ובוחרים את פרויקט המארח.

  3. לוחצים על הוספה.

  4. בשדה New principals, מזינים את כתובת האימייל של סוכן השירות של Cloud Run בשביל שירות Cloud Run:

    service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_PROJECT_NUMBER: מספר הפרויקט שמשויך לפרויקט השירות. זה שונה ממזהה הפרויקט. אפשר לראות את מספר הפרויקט בדף Project Settings של פרויקט השירות במסוףGoogle Cloud .
  5. בשדה תפקיד, בוחרים באפשרות משתמש של חיבור לרשת (VPC) מאפליקציית serverless.

  6. לוחצים על Save.

gcloud

מריצים את הפקודה הבאה בטרמינל:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
--role=roles/vpcaccess.user

מחליפים את מה שכתוב בשדות הבאים:

  • HOST_PROJECT_ID: המזהה של פרויקט המארח של ה-VPC המשותף
  • SERVICE_PROJECT_NUMBER: מספר הפרויקט שמשויך לחשבון השירות. זה שונה ממזהה הפרויקט. כדי למצוא את מספר הפרויקט, מריצים את הפקודה הבאה:

    gcloud projects describe SERVICE_PROJECT_ID
    

הגדרת המחבר כך שיהיה ניתן לגלות אותו

במדיניות ה-IAM של פרויקט המארח, צריך להעניק את שני התפקידים המוגדרים מראש הבאים לחשבונות המשתמשים שמבצעים פריסה של שירותי Cloud Run:

אפשר גם להשתמש בתפקידים בהתאמה אישית או בתפקידים מוגדרים מראש אחרים שכוללים את כל ההרשאות של התפקיד 'צפייה בחיבור לרשת (VPC) מאפליקציית serverless' (vpcaccess.viewer).

המסוף

  1. פותחים את דף IAM.

    כניסה לדף IAM

  2. לוחצים על התפריט הנפתח של הפרויקט ובוחרים את פרויקט המארח.

  3. לוחצים על הוספה.

  4. בשדה New principals, מזינים את כתובת האימייל של חשבון המשתמש שצריכה להיות לו אפשרות לראות את המחבר מפרויקט השירות. אפשר להזין כמה כתובות אימייל בשדה הזה.

  5. בשדה תפקיד, בוחרים את שני התפקידים הבאים:

    • בעל הרשאת צפייה בחיבור לרשת (VPC) מאפליקציית serverless
    • צפייה ברשת Compute
  6. לוחצים על Save.

gcloud

מריצים את הפקודות הבאות בטרמינל:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.viewer

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/compute.networkViewer

מחליפים את מה שכתוב בשדות הבאים:

  • HOST_PROJECT_ID: המזהה של פרויקט המארח של ה-VPC המשותף
  • PRINCIPAL: החשבון הראשי שפורס שירותים של Cloud Run. מידע נוסף על הדגל --member

הגדרת השירות לשימוש במחבר

לכל שירות Cloud Run שנדרשת לו גישה ל-VPC המשותף, צריך לציין את המחבר של השירות. אפשר לציין את המחבר באמצעות מסוף Google Cloud , Google Cloud CLI, קובץ YAML או Terraform כשפורסים שירות חדש או מעדכנים שירות קיים.

המסוף

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.

  4. לוחצים על הכרטיסייה Connections (קישורים).

    תמונה

    • בשדה VPC Connector (מחבר VPC), בוחרים מחבר לשימוש או בוחרים באפשרות None (ללא) כדי לנתק את השירות מרשת VPC.
  5. לוחצים על יצירה או על פריסה.

gcloud

  1. מגדירים את ה-CLI של gcloud כך שישתמש בפרויקט שמכיל את משאב Cloud Run:

    gcloud config set project PROJECT_ID
    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שמכיל את משאב Cloud Run שנדרשת לו גישה ל-VPC המשותף. אם משאב Cloud Run נמצא בפרויקט המארח, זהו מזהה הפרויקט המארח. אם משאב Cloud Run נמצא בפרויקט שירות, זהו מזהה פרויקט השירות.
  2. משתמשים בדגל --vpc-connector.

  • בשירותים קיימים:
    gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME
  • בשירותים חדשים:
    gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME
    מחליפים את מה שכתוב בשדות הבאים:
    • SERVICE: השם של השירות
    • IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה, us-docker.pkg.dev/cloudrun/container/hello:latest
    • CONNECTOR_NAME: השם של המחבר. משתמשים בשם המלא כשמבצעים פריסה מפרויקט שירות של VPC משותף (בניגוד לפרויקט המארח), לדוגמה:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      כאשר HOST_PROJECT_ID הוא מזהה פרויקט המארח, CONNECTOR_REGION הוא האזור של המחבר ו-CONNECTOR_NAME הוא השם שנתתם למחבר.

YAML

מגדירים את ה-CLI של gcloud כך שישתמש בפרויקט שמכיל את משאב Cloud Run:

gcloud config set project PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שמכיל את משאב Cloud Run שנדרשת לו גישה ל-VPC המשותף. אם משאב Cloud Run נמצא בפרויקט המארח, זהו מזהה הפרויקט המארח. אם משאב Cloud Run נמצא בפרויקט שירות, זהו מזהה פרויקט השירות.
  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מוסיפים או מעדכנים את מאפיין run.googleapis.com/vpc-access-connector מתחת למאפיין annotations מתחת למאפיין spec ברמה העליונה:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
          name: REVISION

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE: השם של שירות Cloud Run.
    • CONNECTOR_NAME: השם של המחבר. משתמשים בשם המלא כשמבצעים פריסה מפרויקט שירות של VPC משותף (בניגוד לפרויקט המארח), לדוגמה:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      כאשר HOST_PROJECT_ID הוא מזהה פרויקט המארח, CONNECTOR_REGION הוא האזור של המחבר ו-CONNECTOR_NAME הוא השם שנתתם למחבר.
    • REVISION עם שם חדש של גרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
      • מתחיל ב-SERVICE-
      • הוא מכיל רק אותיות קטנות, מספרים וגם -
      • לא מסתיים ב--
      • לא חורג מ-63 תווים
  3. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

אתם יכולים להשתמש במשאב של Terraform כדי ליצור שירות ולהגדיר אותו לשימוש במחבר שלכם.

# Cloud Run service
resource "google_cloud_run_v2_service" "gcr_service" {
  name     = "mygcrservice"
  location = "us-west1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        limits = {
          cpu    = "1000m"
          memory = "512Mi"
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    scaling {
      # Limit scale up to prevent any cost blow outs!
      max_instance_count = 5
    }

    vpc_access {
      # Use the VPC Connector
      connector = google_vpc_access_connector.connector.id
      # all egress from the service should go through the VPC Connector
      egress = "ALL_TRAFFIC"
    }
  }
}

השלבים הבאים