在 GKE 和 Cloud SQL 上部署 Apache Guacamole

Last reviewed 2025-01-09 UTC

本文件說明如何在 GKE 和 Cloud SQL 上部署 Apache Guacamole。

本操作說明適用於想在 GKE 和 Cloud SQL 上託管 Guacamole 的伺服器管理員和工程師。本文件假設您熟悉如何將工作負載部署至 Kubernetes 和 MySQL 適用的 Cloud SQL。建議您也熟悉 Identity and Access Management 和 Google Compute Engine。

架構

下圖顯示如何使用 IAP 設定 Google Cloud 負載平衡器,保護在 GKE 中執行的 Guacamole 用戶端執行個體:

設定 IAP 的 Google Cloud 負載平衡器架構。

Guacamole 用戶端會連線至 guacd 後端服務,該服務會將遠端桌面連線代理至一或多個 Compute Engine VM。指令碼也會部署 Cloud SQL 執行個體,用於管理 Guacamole 的設定資料。

詳情請參閱「在 GKE 和 Cloud SQL 上使用 Apache Guacamole」。

目標

  • 使用 Terraform 部署基礎架構。
  • 在 Cloud SQL 建立 Guacamole 資料庫。
  • 使用 Skaffold 將 Guacamole 部署至 GKE 叢集。
  • 透過 Guacamole 測試與 VM 的連線。

費用

在本文件中,您會使用下列 Google Cloud計費元件:

您可以使用 Pricing Calculator,根據預測用量估算費用。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。

事前準備

  1. 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。

    前往專案選取器

  2. 確認 Google Cloud 專案已啟用計費功能。

  3. 啟用 Resource Manager、Service Usage、Artifact Registry 和 Compute Engine API (如有尚未啟用的 API)。

    啟用 API 所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

  4. 在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 Cloud Shell

部署基礎架構

在本節中,您將使用 Terraform 部署下列資源:

  • 虛擬私有雲
  • 防火牆規則
  • GKE 叢集
  • Artifact Registry 存放區
  • MySQL 適用的 Cloud SQL
  • 用於管理 MySQL 資料庫的 VM
  • 服務帳戶

Terraform 設定也會在專案中啟用 IAP。

  1. 在 Cloud Shell 中,複製 GitHub 存放區。

    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 專案 ID。

  4. 如要核准 Terraform 將資源部署至專案的要求,請輸入 yes。

    部署所有資源需要幾分鐘才能完成。

部署 Guacamole 資料庫

在本節中,您會在 MySQL 適用的 Cloud SQL 中建立 Guacamole 資料庫和資料表,並在資料庫中填入管理員使用者資訊。

  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 指令碼檔案複製到資料庫管理 VM,然後連線至 VM:

    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
    

    現在,您已透過 Cloud Shell 建立資料庫管理 VM 的控制台工作階段。

  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 指令執行完畢後,請退出 VM SSH 工作階段:

    exit
    

使用 Skaffold 將 Guacamole 部署至 GKE

在本節中,您將使用 Skaffold 將 Guacamole 應用程式部署至 GKE 叢集。Skaffold 會處理建構、推送及部署 Guacamole 映像檔至 GKE 叢集的工作流程。

  1. 在 Cloud Shell 中,使用 terraform 部署 GKE 設定:

    cd tf-k8s
    terraform init -upgrade
    terraform apply -parallelism=1
    
  2. 取得 GKE 叢集的憑證:

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. 從複製的 Git 存放區根目錄執行 Skaffold:

    cd ..
    skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo run
    

    Skaffold 工具會透過 Google Cloud Build 為 Guacamole 建構容器映像檔 (指令列包含旗標,可指定要將映像檔推送至哪個存放區)。這項工具也會執行 kustomize 步驟,根據 Terraform 執行作業的輸出內容,產生 Kubernetes ConfigMap 和 Secret。

  4. 確認憑證已佈建:

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

    憑證佈建作業最多可能需要 60 分鐘才能完成。

  5. 佈建憑證後,您可以在瀏覽器中造訪網址。

    1. 查看 Terraform 輸出的網址:

      echo $GUACAMOLE_URL
      
    2. 在瀏覽器視窗中,輸入上一步取得的網址。

    3. 在 IAP 提示時,使用 Google 憑證登入。

      登入後,您會根據先前在這個程序中執行的 insert-admin-user.sql 指令碼,以管理員權限登入 Guacamole。

現在,您可以透過 Guacamole 使用者介面,根據電子郵件地址新增其他使用者。詳情請參閱 Guacamole 說明文件中的「Administration」(管理)。這些額外使用者也需要透過 Google IAM 取得 IAP-secured Web App User 角色權限。

測試與 VM 的連線

部署、設定並成功登入 Guacamole 後,您可以建立 Windows VM,並透過 Guacamole 連線至新建立的 VM。

建立 VM

  1. 在 Cloud Shell 建立 Windows VM,測試連線:

    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. 重設剛建立的 VM Windows 密碼:

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

新增 VM 連線

  1. 在瀏覽器視窗中,輸入「使用 Skaffold 將 Guacamole 部署至 GKE」中的 Guacamole 執行個體網址,然後透過 IAP 登入。
  2. 在 Guacamole UI 中,依序點選使用者名稱和「Settings」。
  3. 在「Connections」(連線) 分頁中,按一下「New Connection」(新增連線)。
    1. 在「Name」(名稱) 欄位中,輸入連線名稱。
    2. 在「Location」(位置) 欄位中,輸入連線的位置。
    3. 在「Protocol」(通訊協定) 下拉式選單中,選取「RDP」。
  4. 在「Network」(網路) 下方的「Hostname」(主機名稱) 欄位中,輸入您建立的 VM 名稱 windows-vm。

    專案 DNS 會將這個主機名稱解析為執行個體的內部 IP 位址。

  5. 在「驗證」部分,設定下列欄位:

    1. 使用者名稱:admin
    2. 密碼:重設 VM 密碼時取得的密碼
    3. 安全性模式:NLA (網路層級驗證)
    4. 忽略伺服器憑證:勾選核取方塊

      Compute Engine Windows VM 會佈建遠端桌面服務的自行簽署憑證,因此您必須指示 Guacamole 忽略憑證驗證問題。

  6. 按一下「儲存」。

  7. 按一下使用者名稱,然後選取「Home」。

  8. 按一下剛建立的連線,測試連線能力。幾秒後,您應該會看到 VM 執行個體的桌面。

如要進一步瞭解如何設定 Guacamole,請參閱 Apache Guacamole 手冊。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本程序所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [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
    

後續步驟

貢獻者

作者:Richard Grime | 英國公共部門首席架構師

其他貢獻者: