במאמר הזה מוסבר איך פורסים את Apache Guacamole ב-GKE וב-Cloud SQL.
ההוראות האלה מיועדות לאדמינים ולמהנדסים של שרתים שרוצים לארח את Guacamole ב-GKE וב-Cloud SQL. המאמר הזה מיועד למי שמכיר את פריסת עומסי עבודה ב-Kubernetes וב-Cloud SQL ל-MySQL. מומלץ גם להכיר את ניהול הזהויות והרשאות הגישה ואת Google Compute Engine.
ארכיטקטורה
בתרשים הבא מוצגת דוגמה לאיזון עומסים Google Cloud (load balancer) שהוגדר עם IAP, כדי להגן על מופע של לקוח Guacamole שפועל ב-GKE:
לקוח Guacamole מתחבר לשירות הקצה העורפי guacd, שמתווך חיבורים של שולחן עבודה מרוחק למכונות וירטואליות של Compute Engine. הסקריפטים גם פורסים מכונה של Cloud SQL כדי לנהל את נתוני ההגדרות האישיות של Guacamole.
פרטים נוספים זמינים במאמר Apache Guacamole ב-GKE וב-Cloud SQL.
מטרות
- פורסים את התשתית באמצעות Terraform.
- יוצרים מסד נתונים של Guacamole ב-Cloud SQL.
- פריסת Guacamole באשכול GKE באמצעות Skaffold.
- בודקים חיבור ל-VM דרך Guacamole.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים?
-
אם אחד מהממשקים הבאים לא מופעל, מפעילים אותו: Resource Manager API, Service Usage API, Artifact Registry API ו-Compute Engine API.
תפקידים שנדרשים להפעלת ממשקי 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, מגדירים אותו ונכנסים אליו, אפשר ליצור מכונה וירטואלית של Windows ולהתחבר אליה דרך 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(אימות ברמת הרשת) Ignore server certificate: select the checkbox
המכונות הווירטואליות של Windows ב-Compute Engine מוקצות עם אישור חתימה עצמית ל-Remote Desktop Services, ולכן צריך להורות ל-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
- אייל בן עברי | ארכיטקט פתרונות ענן
- Ido Flatow | Cloud Solutions Architect