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

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

אם אתם צריכים להגדיר מחבר בפרויקט שירות, קראו את המאמר הגדרת מחברים בפרויקטים של שירות. במאמר התחברות לרשת 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. נכנסים לדף הסקירה הכללית של Serverless VPC Access.

    כניסה לדף Serverless VPC Access

  3. לוחצים על Create connector.

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

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

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

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

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

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

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

    1. מגדירים את מספר המכונות המינימלי והמקסימלי של המחבר, או משתמשים בערכי ברירת המחדל: 2 (מינימום) ו-10 (מקסימום). ככל שהתנועה גוברת, המחבר מתרחב אופקית בהתאם לעומס (scale out) עד למקסימום שצוין, אבל המחבר לא מצטמצם אופקית (scale in) כשהתנועה פוחתת. צריך להשתמש בערכים בין 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 ללא שרת:

    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, צריך לוודא שרשת המשנה purpose היא PRIVATE. לשם כך, מריצים את הפקודה הבאה ב-CLI של gcloud:
        gcloud compute networks subnets describe SUBNET_NAME
        
        מחליפים את הערכים הבאים:
        • ‫SUBNET_NAME: השם של רשת המשנה
    • ‫HOST_PROJECT_ID: המזהה של הפרויקט המארח
    • ‫MIN: המספר המינימלי של המכונות שבהן משתמשים במחבר. צריך להשתמש במספר שלם בין 2 ל-9. ברירת המחדל היא 2. במאמר תפוקה ושינוי קנה מידה מוסבר איך לשנות את קנה המידה של המחבר.
    • ‫MAX: המספר המקסימלי של המכונות שבהן אפשר להשתמש במחבר. צריך להשתמש במספר שלם בין 3 ל-10. ברירת המחדל היא 10. אם נפח התנועה דורש זאת, המחבר מתרחב אופקית בהתאם לעומס (scale out) ל-[MAX] מכונות, אבל לא מצטמצם אופקית (scale in). במאמר תפוקה ושינוי קנה מידה מוסבר איך לשנות את קנה המידה של המחבר.
    • 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 כדי להפעיל את ה-API של vpcaccess.googleapis.com.

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      = "~> 18.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    = "~> 18.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: המזהה של פרויקט השירות

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

כדי לתת גישה למחבר, מקצים לסוכן השירות של Cloud Run בפרויקט השירות את תפקיד ה-IAM משתמש בחיבור לרשת (VPC) מאפליקציית serverless בפרויקט המארח.

המסוף

  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: מספר הפרויקט שמשויך לפרויקט השירות. זה שונה ממזהה הפרויקט. מספר הפרויקט מופיע בדף הגדרות הפרויקט של פרויקט השירות במסוףGoogle Cloud .
  5. בשדה Role, בוחרים באפשרות Serverless VPC Access User.

  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. בשדה Role, בוחרים את שני התפקידים הבאים:

    • צפייה בחיבור לרשת (VPC) מאפליקציית serverless
    • Compute Network Viewer
  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:

    1. אם אתם מגדירים שירות חדש, לוחצים על Deploy container וממלאים את דף הגדרות השירות הראשוני. לאחר מכן לוחצים על Containers, Networking, Security כדי להרחיב את דף הגדרת השירות.

    2. אם אתם מגדירים שירות קיים, לוחצים על השירות.

  3. נכנסים לכרטיסייה Networking.

  4. בתפריט Network, בוחרים את המחבר שבו רוצים להשתמש.

  5. כדי ליצור שירות חדש, לוחצים על יצירה. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.

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"
    }
  }
}

השלבים הבאים