GKE と Cloud SQL への Apache Guacamole のデプロイ

Last reviewed 2023-11-15 UTC

このドキュメントでは、GKE と Cloud SQL に Apache Guacamole をデプロイする方法について説明します。

この手順は、GKE と Cloud SQL で Guacamole をホストするサーバー管理者とエンジニアを対象としています。このドキュメントは、読者が Kubernetes と Cloud SQL for MySQL へのワークロードのデプロイに精通していることを前提としています。また、Identity and Access Management と Google Compute Engine についてもよく理解しておくことをおすすめします。

アーキテクチャ

次の図は、Google Cloud ロードバランサが IAP で構成され、これにより GKE で実行されている Guacamole クライアントのインスタンスが保護される仕組みを示しています。

IAP で構成された Google Cloud ロードバランサのアーキテクチャ。

Guacamole クライアントは、guacd バックエンド サービスに接続します。これは、1 つ以上の Compute Engine VM へのリモート デスクトップ接続を仲介します。また、このスクリプトでは、Guacamole の構成データを管理する Cloud SQL インスタンスもデプロイします。

詳細については、GKE および Cloud SQL の Apache Guacamole をご覧ください。

目標

  • Terraform を使用してインフラストラクチャをデプロイします。
  • Cloud SQL で Guacamole データベースを作成します。
  • Skaffold を使用して Guacamole を GKE クラスタにデプロイします。
  • Guacamole を介した VM への接続をテストします。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトで課金が有効になっていることを確認します

  3. Resource Manager, Service Usage, Artifact Registry, and Compute Engine API を有効にします。

    API を有効にする

  4. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

インフラストラクチャをデプロイする

このセクションでは、Terraform を使用して次のリソースをデプロイします。

  • Virtual Private Cloud
  • ファイアウォール ルール
  • GKE クラスタ
  • Artifact Registry リポジトリ
  • Cloud SQL for MySQL
  • 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 データベースをデプロイする

このセクションでは、Cloud SQL for MySQL で Guacamole データベースとテーブルを作成し、データベースに管理者ユーザー情報を入力します。

  1. Cloud Shell で環境変数を設定し、データベースの root パスワードを確認します。

    cd ..
    source bin/read-tf-output.sh
    

    データベースの root パスワードをメモしておきます。これは次のステップで必要になります。

    このスクリプトにより、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 に接続してデータベースを作成します。パスワードの入力を求められたら、このセクションで先ほどメモした root パスワードを入力します。

    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 イメージのビルド、push、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 リポジトリのクローンの root から Skaffold を実行します。

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

    Skaffold ツールは、Google Cloud Build を使用して Guacamole のコンテナ イメージをビルドします(コマンドラインには、イメージを push するリポジトリを指定するフラグが含まれています)。また、このツールは 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. 証明書がプロビジョニングされたら、ブラウザで URL にアクセスできます。

    1. Terraform output から URL を表示します。

      echo $GUACAMOLE_URL
      
    2. ブラウザ ウィンドウで、前の手順で取得した URL を入力します。

    3. IAP のプロンプトが表示されたら、Google の認証情報でログインします。

      ログイン後、前の手順で実行した insert-admin-user.sql スクリプトに基づいて、管理者権限で Guacamole にログインします。

Guacamole のユーザー インターフェースから、メールアドレスに基づいてユーザーを追加できるようになりました。詳細については、Guacamole ドキュメントの管理をご覧ください。これらの追加ユーザーには、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 インスタンスの URL を入力し、IAP を介してログインします。
  2. Guacamole UI で、ユーザー名をクリックしてから [設定] をクリックします。
  3. [接続] タブで、[新しい接続] をクリックします。
    1. [名前] フィールドに、接続の名前を入力します。
    2. [ロケーション] フィールドに、接続のロケーションを入力します。
    3. [プロトコル] プルダウン リストから [RDP] を選択します。
  4. [ネットワーク] の [ホスト名] フィールドに、作成した VM の名前(windows-vm)を入力します。

    プロジェクトの DNS は、このホスト名をインスタンスの内部 IP アドレスに解決します。

  5. [認証] で、次のフィールドを設定します。

    1. ユーザー名: admin
    2. パスワード: VM のパスワードを再設定したときに取得したパスワード
    3. セキュリティ モード: NLA(ネットワーク レベルの認証)
    4. サーバー証明書を無視する: チェックボックスをオンにします。

      Compute Engine Windows VM にはリモート デスクトップ サービスの自己署名証明書がプロビジョニングされるため、証明書の検証の問題を無視するように Guacamole に指示する必要があります。

  6. [保存] をクリックします。

  7. ユーザー名をクリックし、[ホーム] を選択します。

  8. 作成した接続をクリックして接続性をテストします。数秒後、VM インスタンスのデスクトップが表示されます。

Guacamole の構成の詳細については、Apache Guacamole のマニュアルをご覧ください。

クリーンアップ

この手順で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

新しいリソースを削除する

プロジェクト全体を削除する代わりに、この手順で作成した個々のリソースを削除することもできます。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
    

次のステップ