פריסת Apache Guacamole ב-GKE וב-Cloud SQL

Last reviewed 2025-01-09 UTC

במאמר הזה מוסבר איך פורסים את Apache Guacamole ב-GKE וב-Cloud SQL.

ההוראות האלה מיועדות לאדמינים ולמהנדסים של שרתים שרוצים לארח את Guacamole ב-GKE וב-Cloud SQL. המאמר הזה מיועד למי שמכיר את פריסת עומסי עבודה ב-Kubernetes וב-Cloud SQL ל-MySQL. מומלץ גם להכיר את ניהול הזהויות והרשאות הגישה (IAM) ואת Google Compute Engine.

ארכיטקטורה

בתרשים הבא מוצגת דוגמה לאיזון עומסים (load balancer) שהוגדר עם IAP, כדי להגן על מופע של לקוח Guacamole שפועל ב-GKE: Google Cloud

ארכיטקטורה של מאזן עומסים Google Cloud שהוגדר עם IAP.

לקוח Guacamole מתחבר לשירות הקצה העורפי guacd, שמתווך חיבורים של שולחן עבודה מרוחק למכונות וירטואליות אחת או יותר של Compute Engine. הסקריפטים גם פורסים מכונת Cloud SQL כדי לנהל את נתוני ההגדרה של Guacamole.

פרטים נוספים זמינים במאמר Apache Guacamole ב-GKE וב-Cloud SQL.

מטרות

  • פריסת התשתית באמצעות Terraform.
  • יוצרים מסד נתונים של Guacamole ב-Cloud SQL.
  • פריסת Guacamole באשכול GKE באמצעות Skaffold.
  • בדיקת חיבור למכונה וירטואלית דרך Guacamole.

עלויות

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

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

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

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

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

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

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

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

    כניסה לדף לבחירת הפרויקט

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

  3. מפעילים את ממשקי ה-API של מנהל המשאבים, Service Usage,‏ Artifact Registry ו-Compute Engine.

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

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

    הפעלת ממשקי ה-API

  4. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

פריסת התשתית

בקטע הזה תשתמשו ב-Terraform כדי לפרוס את המשאבים הבאים:

  • ענן וירטואלי פרטי (VPC)
  • כלל חומת אש
  • אשכול GKE
  • מאגר Artifact Registry
  • Cloud SQL ל-MySQL
  • מכונה וירטואלית לניהול מסד הנתונים של MySQL
  • חשבונות שירות

ההגדרות של Terraform מאפשרות גם להשתמש ב-IAP בפרויקט.

  1. משכפלים את מאגר GitHub ב-Cloud Shell:

    git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
    
  2. פורסים את התשתית הנדרשת באמצעות Terraform:

    cd guacamole-on-gcp/tf-infra
    unset GOOGLE_CLOUD_QUOTA_PROJECT
    terraform init -upgrade
    terraform apply
    
  3. פועלים לפי ההוראות כדי להזין את Google Cloud מזהה הפרויקט.

  4. כדי לאשר את הבקשה של Terraform לפריסת משאבים בפרויקט, מזינים yes.

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

פריסת מסד הנתונים של Guacamole

בקטע הזה יוצרים את מסד הנתונים והטבלאות של Guacamole ב-Cloud SQL ל-MySQL, ומאכלסים את מסד הנתונים בפרטי המשתמש של האדמין.

  1. ב-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
    
  2. מעתיקים את קובצי הסקריפט 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.

  3. מתקינים את כלי הלקוח של MySQL:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. מתחברים ל-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
    
  5. מעניקים למשתמש במסד הנתונים הרשאות לגבי מסד הנתונים החדש שנוצר:

    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
    
  6. אחרי שפקודות MySQL מסיימות לפעול, יוצאים מסשן ה-SSH של מכונת ה-VM:

    exit
    

פריסת Guacamole ב-GKE באמצעות Skaffold

בקטע הזה פורסים את אפליקציית Guacamole לאשכול GKE באמצעות Skaffold. ‫Skaffold מטפל בתהליך העבודה של בנייה, שליחה ופריסה של תמונות Guacamole לאשכולות GKE.

  1. ב-Cloud Shell, פורסים את ההגדרות של GKE באמצעות Terraform:

    cd tf-k8s
    terraform init -upgrade
    terraform apply -parallelism=1
    
  2. מקבלים פרטי כניסה לאשכול GKE:

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. מריצים את 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.

  4. מוודאים שהאישור הוקצה:

    kubectl get -w managedcertificates/guacamole-client-cert \
    -n guacamole \
    -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"
    

    הקצאת האישור יכולה להימשך עד 60 דקות.

  5. אחרי שהאישור יוקצה, תוכלו להיכנס לכתובת ה-URL בדפדפן.

    1. צפייה בכתובת ה-URL מפלט Terraform:

      echo $GUACAMOLE_URL
      
    2. בחלון דפדפן, מזינים את כתובת ה-URL שקיבלתם בשלב הקודם.

    3. כשמוצגת בקשה מ-IAP, נכנסים באמצעות פרטי הכניסה לחשבון Google.

      אחרי שמתחברים, מתבצעת כניסה ל-Guacamole עם הרשאות אדמין, על סמך סקריפט insert-admin-user.sql שהפעלתם קודם בהליך הזה.

עכשיו אפשר להוסיף משתמשים נוספים לפי כתובת האימייל שלהם דרך ממשק המשתמש של Guacamole. פרטים נוספים זמינים במאמר בנושא ניהול במסמכי התיעוד של Guacamole. גם למשתמשים הנוספים האלה נדרשות הרשאות דרך Google IAM, עם התפקיד IAP-secured Web App User.

בדיקת חיבור ל-VM

אחרי שמבצעים פריסה, מגדירים ונכנסים בהצלחה ל-Guacamole, אפשר ליצור מכונת VM של Windows ולהתחבר למכונת ה-VM החדשה שנוצרה דרך Guacamole.

יצירת VM

  1. ב-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 תסיים את האתחול, לפני שעוברים לשלב הבא.

  2. מאפסים את הסיסמה של Windows למכונה הווירטואלית שיצרתם:

    gcloud compute reset-windows-password $TEST_VM \
        --user=admin \
        --zone=$ZONE
    

הוספת חיבור חדש ל-VM

  1. בחלון דפדפן, מזינים את כתובת ה-URL של מופע Guacamole מתוך פריסת Guacamole ב-GKE באמצעות Skaffold, ואז נכנסים דרך IAP.
  2. בממשק המשתמש של Guacamole, לוחצים על שם המשתמש ואז על הגדרות.
  3. בכרטיסייה Connections (חיבורים), לוחצים על New Connection (חיבור חדש).
    1. בשדה Name, מזינים שם לחיבור.
    2. בשדה מיקום, מזינים את המיקום של החיבור.
    3. ברשימה הנפתחת פרוטוקול, בוחרים באפשרות RDP.
  4. בקטע Network (רשת), בשדה Hostname (שם המארח), מזינים את שם המכונה הווירטואלית שיצרתם, windows-vm.

    מערכת ה-DNS של הפרויקט מפענחת את שם המארח הזה לכתובת ה-IP הפנימית של המופע.

  5. בקטע Authentication (אימות), מגדירים את השדות הבאים:

    1. שם משתמש: admin
    2. סיסמה: הסיסמה שקיבלתם כשאיפסתם את הסיסמה של המכונה הווירטואלית
    3. מצב אבטחה: NLA (אימות ברמת הרשת)
    4. התעלמות מאישור השרת: מסמנים את תיבת הסימון.

      מכונות וירטואליות של Windows ב-Compute Engine מוקצות עם אישור בחתימה עצמית עבור שירותי Remote Desktop, ולכן צריך להנחות את Guacamole להתעלם מבעיות באימות האישור.

  6. לוחצים על Save.

  7. לוחצים על שם המשתמש ובוחרים באפשרות דף הבית.

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

פרטים נוספים על הגדרת Guacamole זמינים במדריך של Apache Guacamole.

הסרת המשאבים

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

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

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על 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.

שותפים ביצירת התוכן

מחבר: ריצ'רד גריימז | אדריכל ראשי, המגזר הציבורי בבריטניה

תורמי תוכן אחרים: