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

Last reviewed 2025-01-09 UTC

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

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

ארכיטקטורה

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

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

לקוח 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 ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

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

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

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

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

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

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

    תפקידים שנדרשים להפעלת ממשקי 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, מגדירים אותו ונכנסים אליו, אפשר ליצור מכונה וירטואלית של Windows ולהתחבר אליה דרך 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. Ignore server certificate: select the checkbox

      המכונות הווירטואליות של Windows ב-Compute Engine מוקצות עם אישור חתימה עצמית ל-Remote Desktop Services, ולכן צריך להורות ל-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.

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

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

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