במאמר הזה מוסבר איך פורסים את Apache Guacamole ב-GKE וב-Cloud SQL.
ההוראות האלה מיועדות לאדמינים ולמהנדסים של שרתים שרוצים לארח את Guacamole ב-GKE וב-Cloud SQL. המאמר הזה מיועד למי שמכיר את פריסת עומסי עבודה ב-Kubernetes וב-Cloud SQL ל-MySQL. מומלץ גם להכיר את ניהול הזהויות והרשאות הגישה (IAM) ואת Google Compute Engine.
ארכיטקטורה
בתרשים הבא מוצגת דוגמה לאיזון עומסים (load balancer) שהוגדר עם IAP, כדי להגן על מופע של לקוח Guacamole שפועל ב-GKE: Google Cloud
לקוח Guacamole מתחבר לשירות הקצה העורפי guacd, שמתווך חיבורים של שולחן עבודה מרוחק למכונות וירטואליות אחת או יותר של Compute Engine. הסקריפטים גם פורסים מכונת Cloud SQL כדי לנהל את נתוני ההגדרה של Guacamole.
פרטים נוספים זמינים במאמר Apache Guacamole ב-GKE וב-Cloud SQL.
מטרות
- פריסת התשתית באמצעות Terraform.
- יוצרים מסד נתונים של Guacamole ב-Cloud SQL.
- פריסת Guacamole באשכול GKE באמצעות Skaffold.
- בדיקת חיבור למכונה וירטואלית דרך Guacamole.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
מפעילים את ממשקי ה-API של מנהל המשאבים, Service Usage, Artifact Registry ו-Compute Engine.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים -
במסוף Google Cloud , מפעילים את Cloud Shell.
פריסת התשתית
בקטע הזה תשתמשו ב-Terraform כדי לפרוס את המשאבים הבאים:
- ענן וירטואלי פרטי (VPC)
- כלל חומת אש
- אשכול GKE
- מאגר Artifact Registry
- Cloud SQL ל-MySQL
- מכונה וירטואלית לניהול מסד הנתונים של MySQL
- חשבונות שירות
ההגדרות של Terraform מאפשרות גם להשתמש ב-IAP בפרויקט.
משכפלים את מאגר GitHub ב-Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.gitפורסים את התשתית הנדרשת באמצעות Terraform:
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform applyפועלים לפי ההוראות כדי להזין את Google Cloud מזהה הפרויקט.
כדי לאשר את הבקשה של Terraform לפריסת משאבים בפרויקט, מזינים
yes.פריסת כל המשאבים נמשכת כמה דקות.
פריסת מסד הנתונים של Guacamole
בקטע הזה יוצרים את מסד הנתונים והטבלאות של Guacamole ב-Cloud SQL ל-MySQL, ומאכלסים את מסד הנתונים בפרטי המשתמש של האדמין.
ב-Cloud Shell, מגדירים משתני סביבה ומחפשים את סיסמת הבסיס של מסד הנתונים:
cd .. source bin/read-tf-output.shחשוב לרשום את סיסמת הבסיס של מסד הנתונים, כי תצטרכו אותה בשלבים הבאים.
הסקריפט קורא משתני פלט מהרצת Terraform ומגדיר את משתני הסביבה הבאים, שמשמשים לאורך התהליך הזה:
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNETמעתיקים את קובצי הסקריפט
create-schema.sqlו-insert-admin-user.sqlלמכונה הווירטואלית לניהול מסד הנתונים, ואז מתחברים למכונה הווירטואלית:gcloud compute scp \ --tunnel-through-iap \ --zone=$ZONE \ create-schema.sql \ insert-admin-user.sql \ $DB_MGMT_VM: gcloud compute ssh $DB_MGMT_VM \ --zone=$ZONE \ --tunnel-through-iapנוצר סשן במסוף למכונת ה-VM של ניהול מסד הנתונים דרך Cloud Shell.
מתקינים את כלי הלקוח של MySQL:
sudo apt-get update sudo apt-get install -y mariadb-clientמתחברים ל-Cloud SQL ויוצרים את מסד הנתונים. כשתתבקשו להזין סיסמה, תצטרכו להשתמש בסיסמת הבסיס שרשמתם קודם בקטע הזה.
export CLOUD_SQL_PRIVATE_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cloud_sql_ip -H "Metadata-Flavor: Google") mysql -h $CLOUD_SQL_PRIVATE_IP -u root -pמעניקים למשתמש במסד הנתונים הרשאות לגבי מסד הנתונים החדש שנוצר:
CREATE DATABASE guacamole; USE guacamole; GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guac-db-user'; FLUSH PRIVILEGES; SOURCE create-schema.sql; SOURCE insert-admin-user.sql; quitאחרי שפקודות MySQL מסיימות לפעול, יוצאים מסשן ה-SSH של מכונת ה-VM:
exit
פריסת Guacamole ב-GKE באמצעות Skaffold
בקטע הזה פורסים את אפליקציית Guacamole לאשכול GKE באמצעות Skaffold. Skaffold מטפל בתהליך העבודה של בנייה, שליחה ופריסה של תמונות Guacamole לאשכולות GKE.
ב-Cloud Shell, פורסים את ההגדרות של GKE באמצעות Terraform:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1מקבלים פרטי כניסה לאשכול GKE:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTERמריצים את Skaffold מהרמה הבסיסית (root) של מאגר ה-Git המשוכפל:
cd .. skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo runהכלי Skaffold יוצר קובצי אימג' של קונטיינרים ל-Guacamole באמצעות Google Cloud Build (שורת הפקודה כוללת דגל שמציין לאיזה מאגר להעביר את קובצי האימג'). בנוסף, הכלי מריץ שלב של kustomize כדי ליצור ConfigMap וסודות של Kubernetes על סמך הפלט של ההרצה של Terraform.
מוודאים שהאישור הוקצה:
kubectl get -w managedcertificates/guacamole-client-cert \ -n guacamole \ -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"הקצאת האישור יכולה להימשך עד 60 דקות.
אחרי שהאישור יוקצה, תוכלו להיכנס לכתובת ה-URL בדפדפן.
צפייה בכתובת ה-URL מפלט Terraform:
echo $GUACAMOLE_URLבחלון דפדפן, מזינים את כתובת ה-URL שקיבלתם בשלב הקודם.
כשמוצגת בקשה מ-IAP, נכנסים באמצעות פרטי הכניסה לחשבון Google.
אחרי שמתחברים, מתבצעת כניסה ל-Guacamole עם הרשאות אדמין, על סמך סקריפט
insert-admin-user.sqlשהפעלתם קודם בהליך הזה.
עכשיו אפשר להוסיף משתמשים נוספים לפי כתובת האימייל שלהם דרך ממשק המשתמש של Guacamole. פרטים נוספים זמינים במאמר בנושא ניהול במסמכי התיעוד של Guacamole.
גם למשתמשים הנוספים האלה נדרשות הרשאות דרך Google IAM, עם התפקיד IAP-secured Web App User.
בדיקת חיבור ל-VM
אחרי שמבצעים פריסה, מגדירים ונכנסים בהצלחה ל-Guacamole, אפשר ליצור מכונת VM של Windows ולהתחבר למכונת ה-VM החדשה שנוצרה דרך Guacamole.
יצירת VM
ב-Cloud Shell, יוצרים מכונת Windows וירטואלית כדי לבדוק את החיבורים אליה:
export TEST_VM=windows-vm gcloud compute instances create $TEST_VM \ --project=$PROJECT_ID \ --zone=$ZONE \ --machine-type=n1-standard-1 \ --subnet=$SUBNET \ --no-address \ --image-family=windows-2019 \ --image-project=windows-cloud \ --boot-disk-size=50GB \ --boot-disk-type=pd-standard \ —-shielded-secure-bootאחרי שמריצים את הפקודה, יכול להיות שצריך לחכות כמה דקות עד שמערכת Windows תסיים את האתחול, לפני שעוברים לשלב הבא.
מאפסים את הסיסמה של Windows למכונה הווירטואלית שיצרתם:
gcloud compute reset-windows-password $TEST_VM \ --user=admin \ --zone=$ZONE
הוספת חיבור חדש ל-VM
- בחלון דפדפן, מזינים את כתובת ה-URL של מופע Guacamole מתוך פריסת Guacamole ב-GKE באמצעות Skaffold, ואז נכנסים דרך IAP.
- בממשק המשתמש של Guacamole, לוחצים על שם המשתמש ואז על הגדרות.
- בכרטיסייה Connections (חיבורים), לוחצים על New Connection (חיבור חדש).
- בשדה Name, מזינים שם לחיבור.
- בשדה מיקום, מזינים את המיקום של החיבור.
- ברשימה הנפתחת פרוטוקול, בוחרים באפשרות RDP.
בקטע Network (רשת), בשדה Hostname (שם המארח), מזינים את שם המכונה הווירטואלית שיצרתם,
windows-vm.מערכת ה-DNS של הפרויקט מפענחת את שם המארח הזה לכתובת ה-IP הפנימית של המופע.
בקטע Authentication (אימות), מגדירים את השדות הבאים:
- שם משתמש:
admin - סיסמה: הסיסמה שקיבלתם כשאיפסתם את הסיסמה של המכונה הווירטואלית
- מצב אבטחה:
NLA(אימות ברמת הרשת) התעלמות מאישור השרת: מסמנים את תיבת הסימון.
מכונות וירטואליות של Windows ב-Compute Engine מוקצות עם אישור בחתימה עצמית עבור שירותי Remote Desktop, ולכן צריך להנחות את Guacamole להתעלם מבעיות באימות האישור.
- שם משתמש:
לוחצים על Save.
לוחצים על שם המשתמש ובוחרים באפשרות דף הבית.
לוחצים על החיבור שיצרתם כדי לבדוק את הקישוריות. אחרי כמה שניות, שולחן העבודה של המכונה הווירטואלית אמור להופיע.
פרטים נוספים על הגדרת Guacamole זמינים במדריך של Apache Guacamole.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בתהליך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת המשאבים החדשים
במקום למחוק את הפרויקט כולו, אפשר למחוק את המשאבים הבודדים שנוצרו במהלך התהליך הזה. שימו לב: אי אפשר להסיר את ההגדרה של מסך ההסכמה ל-OAuth מפרויקט, אלא רק לשנות אותה.
ב-Cloud Shell, משתמשים ב-Terraform כדי למחוק את המשאבים:
cd ~/guacamole-on-gcp/tf-k8s terraform destroy cd ~/guacamole-on-gcp/tf-infra terraform destroy gcloud compute instances delete $TEST_VM –-zone=$ZONE
המאמרים הבאים
- כדאי לעיין בהנחיות של GKE בנושא הקשחת האבטחה באשכול.
- במאמר הצפנת סודות בשכבת האפליקציה מוסבר איך לשפר את האבטחה של סודות, כמו פרטי כניסה למסד נתונים ופרטי כניסה ל-OAuth.
- כדאי לעיין במאמר בנושא תנאי IAM כדי ללמוד איך לספק בקרת גישה פרטנית יותר למשתמשים ב-Guacamole.
- כדי להבין איך השילוב של IAP עובד, אפשר לעיין בספק האימות המותאם אישית במאגר GitHub.
- לדוגמאות נוספות של ארכיטקטורות, תרשימים ושיטות מומלצות, עיינו במאמר Cloud Architecture Center.
שותפים ביצירת התוכן
מחבר: ריצ'רד גריימז | אדריכל ראשי, המגזר הציבורי בבריטניה
תורמי תוכן אחרים:
- Aaron Lind | Solution Engineer, Application Innovation
- אייל בן עברי | Cloud Solutions Architect
- Ido Flatow | Cloud Solutions Architect