במדריך הזה נסביר איך לגשת לאשכול GKE שהוגדר כך שרמת הבקרה שלו חשופה רק בנקודת הקצה הפנימית ב-Google Kubernetes Engine (GKE) דרך האינטרנט באמצעות מארח Bastion.
אפשר ליצור אשכולות GKE ללא גישת לקוח לנקודת הקצה הציבורית, כלומר מישור הבקרה חשוף רק בנקודת הקצה הפנימית. אפשרות הגישה הזו משפרת את אבטחת האשכול על ידי מניעת גישה למישור הבקרה מכל מקום באינטרנט. עם זאת, השבתת הגישה לנקודת הקצה הציבורית מונעת אינטראקציה עם האשכול מרחוק, אלא אם מוסיפים את כתובת ה-IP של הלקוח המרוחק כרשת מורשית.
במדריך הזה מוסבר איך להגדיר מארח bastion, שהוא מכונת מארח למטרה מיוחדת שנועדה לעמוד בפני מתקפות. מארח ה-bastion משתמש ב-Tinyproxy כדי להעביר את תעבורת הלקוח לאשכול. אתם משתמשים בשרת proxy לאימות זהויות (IAP) כדי לגשת בצורה מאובטחת למארח הבסטיון מהלקוח המרוחק.
מטרות
- יוצרים אשכול GKE עם מישור בקרה שחשוף רק בנקודת הקצה הפנימית.
- פריסת מכונה וירטואלית (VM) של Compute Engine שתפעל כמארח Bastion ברשת המשנה של האשכול.
- משתמשים ב-IAP כדי לחבר לקוח מרוחק לאשכול דרך האינטרנט.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:
gcloud components update gcloud components install alpha beta
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
אחרי שתאתחלו את ה-CLI של gcloud, עדכנו אותו והתקינו את הרכיבים הנדרשים:
gcloud components update gcloud components install alpha beta
יצירת אשכול GKE עם מישור בקרה שחשוף רק בנקודת הקצה הפנימית
יוצרים אשכול GKE חדש עם מישור בקרה שחשוף רק בנקודת הקצה הפנימית. ממקמים את האשכול ברשת משנה משלו. אפשר לעשות את זה באמצעות Google Cloud CLI או מסוף Google Cloud .
gcloud
מריצים את הפקודה הבאה:
gcloud container clusters create-auto CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--create-subnetwork=name=SUBNET_NAME \
--enable-master-authorized-networks \
--enable-private-nodes \
--enable-private-endpoint
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול. -
SUBNET_NAME: השם של רשת המשנה החדשה שבה רוצים למקם את האשכול.
המסוף
יצירת רשת משנה של ענן וירטואלי פרטי (VPC)
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על רשת ברירת המחדל.
בקטע Subnets (רשתות משנה), לוחצים על Add subnet (הוספת רשת משנה).
בתיבת הדו-שיח Add a subnet (הוספת רשת משנה), מציינים את הפרטים הבאים:
- שם: שם לתת-הרשת החדשה.
- אזור: אזור לתת-הרשת. האזור הזה צריך להיות זהה לאזור של האשכול.
- טווח כתובות IP: מציינים את
10.2.204.0/22או טווח אחר שלא מתנגש עם טווחים אחרים ברשת ה-VPC. - בשדה Private Google Access, בוחרים באפשרות On.
לוחצים על הוספה.
יצירת אשכול GKE עם מישור בקרה שחשוף רק בנקודת הקצה הפנימית
נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .
לוחצים על יצירה.
לוחצים על Configure (הגדרה) ליד GKE Autopilot.
מציינים שם ואזור לאשכול החדש. האזור צריך להיות זהה לזה של רשת המשנה.
בקטע Networking, בוחרים באפשרות Private cluster.
מבטלים את הסימון של התיבה מישור בקרת הגישה באמצעות כתובת ה-IP החיצונית שלו.
מהרשימה הנפתחת Node subnet, בוחרים את רשת המשנה שיצרתם.
אופציונלי: מגדירים הגדרות אחרות לאשכול.
לוחצים על יצירה.
אפשר גם להשתמש באשכול GKE רגיל עם הדגל --master-ipv4-cidr.
יצירת מכונה וירטואלית של יעד מבוצר (bastion host)
יוצרים מכונה וירטואלית ב-Compute Engine ברשת הפנימית של האשכול הפרטי, שתשמש כמארח יעד מבוצר (bastion host) לניהול האשכול.
gcloud
יצירת מכונה וירטואלית ב-Compute Engine:
gcloud compute instances create INSTANCE_NAME \
--zone=COMPUTE_ZONE \
--machine-type=e2-micro \
--network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_NAME: שם ה-VM. -
COMPUTE_ZONE: האזור ב-Compute Engine שבו נמצאת המכונה הווירטואלית. צריך למקם את ה-VM באותו אזור שבו נמצא האשכול.
SUBNET_NAME: רשת המשנה שבה רוצים למקם את המכונה הווירטואלית.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
מציינים את הפרטים הבאים:
- שם: השם של המכונה הווירטואלית.
- Region ו-Zone: האזור והתחום של מכונת ה-VM. צריך להשתמש באותו אזור כמו באשכול.
- Machine type (סוג מכונה): סוג מכונה. בוחרים סוג מכונה קטן, כמו
e2-micro. - בקטע ממשקי רשת, בוחרים את אותה רשת VPC ואת אותה רשת משנה כמו האשכול.
- אופציונלי: מגדירים הגדרות אחרות למופע.
לוחצים על יצירה.
יצירת כלל לחומת האש
כדי לאפשר ל-IAP להתחבר למכונה הווירטואלית של מארח הבסטיון, יוצרים כלל של חומת האש.
פריסת שרת ה-Proxy
אחרי שמגדירים את מארח ה-bastion ואת האשכול הפרטי, צריך לפרוס שד proxy במארח כדי להעביר תנועה למישור הבקרה של האשכול. במדריך הזה מתקינים את Tinyproxy.
מתחילים סשן במכונה הווירטואלית:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_IDמתקינים את Tinyproxy:
sudo apt install tinyproxyפותחים את קובץ ההגדרות של Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.confמבצעים את הפעולות הבאות בקובץ:
- מוודאים שהיציאה היא
8888. מחפשים את הקטע
Allow:/Allow 127מוסיפים את השורה הבאה לקטע
Allow:Allow localhost
- מוודאים שהיציאה היא
שומרים את הקובץ ומפעילים מחדש את Tinyproxy:
sudo service tinyproxy restartכדי לצאת מהסשן:
exit
התחברות לאשכול מהלקוח המרוחק
אחרי שמגדירים את Tinyproxy, צריך להגדיר את הלקוח המרוחק עם פרטי הכניסה של האשכול ולציין את ה-proxy. במחשב הלקוח המרוחק, מבצעים את הפעולות הבאות:
קבלת פרטי הכניסה לאשכול:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול הפרטי. -
CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים. -
PROJECT_ID: המזהה של Google Cloud הפרויקט של האשכול.
-
יוצרים מנהרה ליעד המבוצר (bastion host) באמצעות IAP:
gcloud compute ssh INSTANCE_NAME \ --tunnel-through-iap \ --project=PROJECT_ID \ --zone=COMPUTE_ZONE \ --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"מציינים את ה-proxy:
export HTTPS_PROXY=localhost:8888 kubectl get nsהפלט הוא רשימה של מרחבי שמות באשכול הפרטי.
הפסקת ההאזנה בלקוח המרוחק
אם רוצים לבטל את השינוי בלקוח המרוחק בכל שלב, צריך להפסיק את תהליך ההאזנה ביציאת TCP מספר 8888. הפקודה לביצוע הפעולה הזו שונה בהתאם למערכת ההפעלה של הלקוח.
netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill
פתרון בעיות
הגבלות חומת אש ברשתות ארגוניות
אם אתם מחוברים לרשת ארגונית עם חומת אש מחמירה, יכול להיות שלא תוכלו להשלים את המדריך הזה בלי לבקש חריגה. אם מבקשים חריגה, טווח כתובות ה-IP של המארח המבצר הוא 35.235.240.0/20 כברירת מחדל.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבים בודדים
מוחקים את מארח ה-bastion שפרסתם במדריך הזה:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONEמחיקת האשכול:
gcloud container clusters delete CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATIONמוחקים את תת-הרשת:
gcloud compute networks subnets delete SUBNET_NAME \ --region=CONTROL_PLANE_LOCATION