קבלת אירועים מ-Pub/Sub בנקודת קצה פרטית של HTTP באשכול GKE פרטי

במדריך הזה מוסבר איך ליצור נקודת קצה פרטית של HTTP באשכול פרטי של Google Kubernetes Engine ‏ (GKE) שמקבלת אירועים של הודעות Pub/Sub באמצעות Eventarc. מידע נוסף על יעד האירועים הזה זמין במאמר ניתוב אירועים לנקודת קצה פנימית של HTTP ברשת VPC.

אשכולות GKE פרטיים הם סוג של אשכולות מקוריים של ענן וירטואלי פרטי (VPC) שבהם לצמתים יש רק כתובות IP פנימיות. המשמעות היא שהצמתים וה-Pods מבודדים מהאינטרנט כברירת מחדל. אתם יכולים לבחור שלא תהיה גישה למישור הבקרה, שתהיה גישה מוגבלת או שתהיה גישה ללא הגבלה. אי אפשר להמיר אשכול קיים שאינו פרטי לאשכול פרטי. מידע נוסף זמין במאמר מידע על אשכולות פרטיים.

אפשר להריץ את הפקודות הבאות באמצעות Google Cloud CLI בטרמינל או ב-Cloud Shell.

מטרות

במדריך הזה תלמדו:

  1. יוצרים רשת משנה מסוג proxy-only ברשת ה-VPC שמוגדרת כברירת מחדל, ויוצרים כלל חומת אש ב-VPC.
  2. יצירת אשכול פרטי של GKE Autopilot ללא גישת לקוח לנקודת הקצה הציבורית.
  3. יצירת מכונה וירטואלית (VM) של Compute Engine ברשת משנה ספציפית של רשת ה-VPC.
  4. יוצרים חיבור SSH למכונה הווירטואלית ופורסים שירות לקבלת אירועים במכונה הווירטואלית.
  5. פריסת שער באשכול ומניפסט HTTPRoute להגדרת הניתוב של תעבורת נתונים ב-Kubernetes אל קצה העורף של האפליקציה.
  6. יוצרים קובץ מצורף לרשת שמאפשר לרשת VPC של יצרן ליזום חיבורים לרשת VPC של צרכן.
  7. יוצרים טריגר Eventarc שמנתב אירועים של Pub/Sub למקלט האירועים במכונה הווירטואלית.
  8. מפרסמים הודעה בנושא Pub/Sub כדי ליצור אירוע, ומציגים את תוכן האירוע ביומני ה-Pod של האפליקציה.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  7. מפעילים את ממשקי ה-API של Cloud Resource Manager,‏ Compute Engine,‏ Eventarc,‏ GKE ו-Pub/Sub, אם אחד מהם עדיין לא מופעל:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable compute.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com eventarc.googleapis.com pubsub.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

  9. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  10. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  11. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  12. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  13. מפעילים את ממשקי ה-API של Cloud Resource Manager,‏ Compute Engine,‏ Eventarc,‏ GKE ו-Pub/Sub, אם אחד מהם עדיין לא מופעל:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable compute.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com eventarc.googleapis.com pubsub.googleapis.com
  14. מעדכנים את הרכיבים של Google Cloud CLI:
    gcloud components update
  15. נכנסים באמצעות החשבון:
    gcloud auth login
  16. אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.

    אם אתם לא יוצרי הפרויקט, צריך להעניק את ההרשאות הנדרשות בחשבון המשתמש המתאים בפרויקט. לדוגמה, חשבון משתמש יכול להיות חשבון Google (למשתמשי קצה) או חשבון שירות (לאפליקציות ולעומסי עבודה ממוחשבים). מידע נוסף זמין בדף תפקידים והרשאות של יעד האירוע.

    ההרשאות הנדרשות

    כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

    יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

  17. חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לצרף אותו לטריגר של Eventarc כדי לייצג את הזהות של הטריגר למטרות בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והפורמט של כתובת האימייל שלו הוא:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud. אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud או על ידי הרצת הפקודה הבאה:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

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

  18. אם הפעלתם את סוכן השירות של Cloud Pub/Sub ב-8 באפריל 2021 או לפני כן, כדי לתמוך בבקשות push מאומתות של Pub/Sub, צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator). אחרת, התפקיד הזה מוענק כברירת מחדל:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

יצירת תת-רשת לשרת proxy בלבד

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

  1. משתמשים בפקודה gcloud compute networks subnets create כדי ליצור רשת משנה עם שרת proxy בלבד ברשת ברירת המחדל.

    gcloud compute networks subnets create proxy-only-subnet \
        --purpose=REGIONAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-central1 \
        --network=default \
        --range=10.10.10.0/24
    

    שימו לב שתת-רשת עם purpose=REGIONAL_MANAGED_PROXY שמורה למאזני עומסים מבוססי Envoy, ושהערך range צריך לספק 64 כתובות IP או יותר.

  2. יוצרים כלל חומת אש שתואם לטווח של תת-הרשת של שרת ה-proxy בלבד, ומאפשר תעבורת נתונים ביציאת TCP ‏8080.

    gcloud compute firewall-rules create allow-proxy-connection \
        --allow tcp:8080 \
        --source-ranges 10.10.10.0/24 \
        --network=default
    

יצירת אשכול GKE פרטי

משתמשים בפקודה gcloud container clusters create-auto כדי ליצור אשכול GKE פרטי במצב Autopilot עם צמתים פרטיים, ללא גישת לקוח לנקודת הקצה הציבורית.

בדוגמה הבאה נוצר אשכול GKE פרטי בשם private-cluster, ונוצרת גם רשת משנה בשם my-subnet:

gcloud container clusters create-auto private-cluster \
    --create-subnetwork name=my-subnet \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint \
    --region=us-central1

שימו לב לנקודות הבאות:

  • ‫--enable-master-authorized-networks מציין שהגישה לנקודת הקצה הציבורית מוגבלת לטווחי כתובות IP שאתם מאשרים.
  • ‫--enable-private-nodes מציין שלצמתים באשכול אין כתובות IP חיצוניות.
  • ‫--enable-private-endpoint מציין שהאשכול מנוהל באמצעות כתובת ה-IP הפנימית של נקודת קצה ל-API של מישור הבקרה.

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

יצירת מכונה וירטואלית ברשת משנה ספציפית

מכונה וירטואלית ב-Compute Engine היא מכונה וירטואלית שמארחת בתשתית של Google. המונחים מכונה של Compute Engine ‏(Compute Engine instance), מכונת VM‏ (VM instance) ו-VM הם מילים נרדפות ומשמשים לסירוגין. מכונות וירטואליות כוללות אשכולות GKE, מכונות עם סביבה גמישה של App Engine ומוצרים אחרים Google Cloud שנבנו על מכונות וירטואליות של Compute Engine.

משתמשים בפקודה gcloud compute instances create כדי ליצור מכונת VM של Compute Engine ברשת המשנה שיצרתם קודם. מצרפים חשבון שירות ומגדירים את היקף הגישה של המכונה הווירטואלית ל-cloud-platform.

gcloud compute instances create my-vm \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --zone=us-central1-a \
    --subnet=my-subnet

מידע נוסף זמין במאמר יצירה והפעלה של מכונה וירטואלית.

פריסת מקלט אירועים במכונה הווירטואלית

באמצעות תמונה מוכנה מראש, us-docker.pkg.dev/cloudrun/container/hello, פורסים שירות במכונה הווירטואלית שמקשיב ליציאה 80 ומקבל ומנהל רישום של אירועים.

  1. מריצים את הפקודה הבאה כדי ליצור חיבור SSH למכונת ה-VM:

    gcloud compute ssh my-vm --project=PROJECT_ID --zone=us-central1-a
    

    אחרי שנוצר חיבור לשרת ה-SSH, מריצים את הפקודות שנותרו במכונת ה-VM.

  2. במידת הצורך, מתקינים את kubectl ופלאגינים נדרשים.

  3. במכונה הווירטואלית, משתמשים בפקודה get-credentials כדי להפעיל את kubectl לעבודה עם האשכול שיצרתם.

    gcloud container clusters get-credentials private-cluster \
        --region=us-central1 \
        --internal-ip
    
  4. משתמשים בפקודת Kubernetes‏, kubectl create deployment, כדי לפרוס אפליקציה באשכול.

    kubectl create deployment hello-app \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    

    כך נוצר פריסה בשם hello-app. ה-Pod של הפריסה מפעיל את קובץ האימג' של הקונטיינר hello.

  5. אחרי פריסת האפליקציה, אפשר לחשוף אותה לתנועת גולשים על ידי יצירת שירות Kubernetes. מריצים את הפקודה הבאה: kubectl expose

    kubectl expose deployment hello-app \
        --type ClusterIP \
        --port 80 \
        --target-port 8080
    

    הפלט אמור להיראות כך: service/hello-app exposed

    אפשר להתעלם מהודעות דומות להודעות הבאות:

    E0418 14:15:33.970933    1129 memcache.go:287] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    

הגדרת ניתוב תנועה ב-Kubernetes

מקור מידע מסוג Gateway מייצג מישור נתונים שמנתב תעבורה ב-Kubernetes. שער יכול לייצג סוגים שונים של איזון עומסים וניתוב, בהתאם ל-GatewayClass שממנו הוא נגזר. מידע נוסף זמין במאמר בנושא פריסת שערים. HTTPRoute מניפסט נפרס כדי ליצור נתיבים ולשלוח תנועה לשרתי קצה עורפיים של אפליקציות.

  1. פורסים שער באשכול.

    kubectl apply -f - <<EOF
    kind: Gateway
    apiVersion: gateway.networking.k8s.io/v1beta1
    metadata:
      name: internal-http
    spec:
      gatewayClassName: gke-l7-rilb
      listeners:
      - name: http
        protocol: HTTP
        port: 80
    EOF
    

    שימו לב לנקודות הבאות:

    • ‫gatewayClassName: gke-l7-rilb מציין את GatewayClass שממנו נגזר Gateway הזה. ‫gke-l7-rilb מתאים למאזן עומסים של אפליקציות פנימי.
    • ‫port: 80 מציין ששער הגישה חושף רק את יציאה 80 להאזנה לתנועת HTTP.
  2. מוודאים שהשער נפרס בצורה נכונה. יכול להיות שיעברו כמה דקות עד שכל המשאבים יופעלו.

    kubectl describe gateways.gateway.networking.k8s.io internal-http
    

    הפלט אמור להיראות כך:

    Name:         internal-http
    Namespace:    default
    ...
    API Version:  gateway.networking.k8s.io/v1beta1
    Kind:         Gateway
    ...
    Spec:
      Gateway Class Name:  gke-l7-rilb
      Listeners:
        Allowed Routes:
          Namespaces:
            From:  Same
        Name:      http
        Port:      80
        Protocol:  HTTP
    Status:
      Addresses:
        Type:   IPAddress
        Value:  10.36.172.5
    ...
    Events:
      Type    Reason  Age                From                   Message
      ----    ------  ----               ----                   -------
      Normal  ADD     80s                sc-gateway-controller  default/internal-http
      Normal  UPDATE  20s (x3 over 80s)  sc-gateway-controller  default/internal-http
      Normal  SYNC    20s                sc-gateway-controller  SYNC on default/internal-http was a success
    
  3. פורסים מניפסט HTTPRoute כדי לנתב תנועת HTTP לשירות hello-app ביציאה 80.

    kubectl apply -f - <<EOF
    kind: HTTPRoute
    apiVersion: gateway.networking.k8s.io/v1beta1
    metadata:
      name: hello-app-route
    spec:
      parentRefs:
      - kind: Gateway
        name: internal-http
      rules:
      - backendRefs:
        - name: hello-app
          port: 80
    EOF
    

יצירת קובץ מצורף לרשת

צירוף רשת הוא משאב שמאפשר לרשת VPC של יצרן ליזום חיבורים לרשת VPC של צרכן דרך ממשק Private Service Connect.

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

אתם יכולים ליצור מחבר רשת שיקבל באופן אוטומטי חיבורים מכל ממשק Private Service Connect שמפנה למחבר הרשת. יוצרים את מחבר הרשת באותה רשת ובאותו אזור שמכילים את שירות היעד של HTTP.

gcloud compute network-attachments create my-network-attachment \
    --region=us-central1 \
    --subnets=my-subnet\
    --connection-preference=ACCEPT_AUTOMATIC

מידע נוסף זמין במאמר בנושא קובצי רשת מצורפים.

יצירת טריגר Eventarc

יוצרים טריגר Eventarc שיוצר נושא חדש ב-Pub/Sub ומנתב אירועים אל מקבל האירועים שנפרס במכונה הווירטואלית כשמתפרסמת הודעה בנושא ב-Pub/Sub.

  1. מאחזרים את כתובת השער.

    GATEWAY_ADDRESS=$(kubectl get gateways.gateway.networking.k8s.io internal-http -o=jsonpath="{.status.addresses[0].value}")
    
  2. יוצרים טריגר.

    gcloud eventarc triggers create my-trigger \
        --location=us-central1 \
        --destination-http-endpoint-uri="http://$GATEWAY_ADDRESS:80/" \
        --network-attachment="projects/PROJECT_ID/regions/us-central1/networkAttachments/my-network-attachment" \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud. אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud או על ידי הרצת הפקודה הבאה:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
    

מידע נוסף על הגדרת הטריגר זמין במאמר בנושא ניתוב אירועים לנקודת קצה פנימית של HTTP ברשת VPC.

יצירה והצגה של אירוע בנושא Pub/Sub

אפשר ליצור אירוע על ידי פרסום הודעה בנושא Pub/Sub.

  1. מאתרים את נושא ה-Pub/Sub ומגדירים אותו כמשתנה סביבה.

    export MY_TOPIC=$(gcloud eventarc triggers describe my-trigger \
        --location=us-central1 \
        --format='value(transport.pubsub.topic)')
    
  2. מפרסמים הודעה בנושא Pub/Sub כדי ליצור אירוע.

    gcloud pubsub topics publish $MY_TOPIC --message "Hello World"
    

    הטריגר של Eventarc מעביר את האירוע לנקודת הקצה הפנימית של HTTP באשכול הפרטי של GKE.

  3. בודקים את היומנים של ה-Pod של האפליקציה ומוודאים שהאירוע נמסר.

    POD_NAME=$(kubectl get pod --selector app=hello-app --output=name)
    kubectl logs $POD_NAME
    

    גוף האירוע צריך להיראות כך:

    2024/04/18 20:31:43 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
    {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.
    Event data: Hello World","event":{"specversion":"1.0","id":"10935738681111260","source":"//pubsub.googleapis.com/projects/my-project/topics/eventarc-us-central1-my-trigger-224","type":"google.cloud.pubsub.topic.v1.messagePublished","datacontenttype":"application/json","time":"2024-04-18T20:40:03Z","data":
    {"message":{"data":"SGVsbG8gV29ybGQ=","messageId":"10935738681111260","publishTime":"2024-04-18T20:40:03Z"}}}}
    

הצלחתם לפרוס שירות לקבלת אירועים לנקודת קצה (endpoint) פנימית של HTTP באשכול GKE פרטי, ליצור טריגר Eventarc, ליצור אירוע מ-Pub/Sub ולאשר שהאירוע הופנה כמצופה על ידי הטריגר לנקודת היעד.

הסרת המשאבים

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

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

  1. מוחקים את הטריגר של Eventarc:
      gcloud eventarc triggers delete my-trigger --location=us-central1
  2. יוצאים מהמכונה הווירטואלית ואז מוחקים אותה:
      gcloud compute instances delete my-vm --zone=us-central1-a
  3. מוחקים את הקובץ המצורף לרשת:
      gcloud compute network-attachments delete my-network-attachment --region=us-central1
  4. מוחקים את כלל חומת האש:
      gcloud compute firewall-rules delete allow-proxy-connection
  5. מחיקת האשכול:
      gcloud container clusters delete private-cluster --region=us-central1
      
  6. Delete the subnet:
      gcloud compute networks subnets delete proxy-only-subnet --region=us-central1

המאמרים הבאים