Dokumen ini menjelaskan cara men-deploy Apache Guacamole di GKE dan Cloud SQL.
Petunjuk ini ditujukan untuk administrator server dan engineer yang ingin menghosting Guacamole di GKE dan Cloud SQL. Dokumen ini mengasumsikan bahwa Anda telah memahami penerapan beban kerja ke Kubernetes dan Cloud SQL untuk MySQL. Sebaiknya, Anda juga memahami Identity and Access Management dan Google Compute Engine.
Arsitektur
Diagram berikut menunjukkan cara a Google Cloud load balancer dikonfigurasi dengan IAP, untuk melindungi instance klien Guacamole yang berjalan di GKE:
Klien Guacamole terhubung ke layanan backend guacd, yang memproses koneksi desktop jarak jauh ke satu atau beberapa VM Compute Engine. Skrip ini juga men-deploy instance Cloud SQL untuk mengelola data konfigurasi untuk Guacamole.
Untuk mengetahui detailnya, lihat Apache Guacamole di GKE dan Cloud SQL.
Tujuan
- Men-deploy infrastruktur menggunakan Terraform.
- Membuat database Guacamole di Cloud SQL.
- Men-deploy Guacamole ke Cluster GKE menggunakan Skaffold.
- Menguji koneksi ke VM melalui Guacamole.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
-
Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan Resource Manager, Service Usage, Artifact Registry, dan Compute Engine API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran. -
Di konsol, aktifkan Cloud Shell. Google Cloud
Men-deploy infrastruktur
Di bagian ini, Anda akan menggunakan Terraform untuk men-deploy resource berikut:
- Virtual Private Cloud
- Aturan firewall
- Cluster GKE
- Repositori Artifact Registry
- Cloud SQL untuk MySQL
- VM untuk mengelola database MySQL
- Akun layanan
Konfigurasi Terraform juga memungkinkan penggunaan IAP di project Anda.
Di Cloud Shell, buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.gitDeploy infrastruktur yang diperlukan menggunakan Terraform:
cd guacamole-on-gcp/tf-infra unset GOOGLE_CLOUD_QUOTA_PROJECT terraform init -upgrade terraform applyIkuti petunjuk untuk memasukkan Google Cloud project ID Anda.
Untuk menyetujui permintaan Terraform guna men-deploy resource ke project Anda, masukkan
yes.Deployment semua resource memerlukan waktu beberapa menit hingga selesai.
Men-deploy database Guacamole
Di bagian ini, Anda akan membuat database dan tabel Guacamole di Cloud SQL untuk MySQL, serta mengisi database dengan informasi pengguna administrator.
Di Cloud Shell, tetapkan variabel lingkungan dan temukan sandi root database:
cd .. source bin/read-tf-output.shCatat sandi root database; Anda akan memerlukannya pada langkah-langkah berikut.
Skrip ini membaca variabel output dari eksekusi Terraform dan menetapkan variabel lingkungan berikut, yang digunakan di seluruh prosedur ini:
CLOUD_SQL_INSTANCE ZONE REGION DB_MGMT_VM PROJECT_ID GKE_CLUSTER GUACAMOLE_URL SUBNETSalin file skrip
create-schema.sqldaninsert-admin-user.sqlke VM pengelolaan database, lalu hubungkan ke 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-iapSesi konsol ke VM Pengelolaan Database melalui Cloud Shell kini telah dibuat.
Instal alat klien MySQL:
sudo apt-get update sudo apt-get install -y mariadb-clientHubungkan ke Cloud SQL dan buat database. Saat diminta sandi, gunakan sandi root yang Anda catat sebelumnya di bagian ini.
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 -pBerikan izin pengguna database atas database yang baru dibuat:
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; quitSetelah perintah MySQL selesai berjalan, keluar dari sesi SSH VM:
exit
Men-deploy Guacamole ke GKE menggunakan Skaffold
Di bagian ini, Anda akan men-deploy aplikasi Guacamole ke cluster GKE menggunakan Skaffold. Skaffold menangani alur kerja untuk mem-build, mengirim, dan men-deploy image Guacamole ke cluster GKE.
Di Cloud Shell, deploy konfigurasi GKE menggunakan terraform:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1Dapatkan kredensial untuk cluster GKE:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTERJalankan Skaffold dari root repositori git yang di-clone:
cd .. skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo runAlat Skaffold mem-build image container untuk Guacamole melalui Google Cloud Build (baris perintah menyertakan flag yang menentukan repositori tempat image akan dikirim). Alat ini juga menjalankan langkah kustomisasi untuk membuat ConfigMap dan Secret Kubernetes berdasarkan output eksekusi Terraform.
Verifikasi bahwa sertifikat telah disediakan:
kubectl get -w managedcertificates/guacamole-client-cert \ -n guacamole \ -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"Penyediaan sertifikat dapat memerlukan waktu hingga 60 menit hingga selesai.
Setelah sertifikat disediakan, Anda dapat membuka URL di browser.
Lihat URL dari output terraform:
echo $GUACAMOLE_URLDi jendela browser, masukkan URL yang Anda dapatkan pada langkah sebelumnya.
Saat IAP meminta Anda, login dengan kredensial Google Anda.
Setelah login, Anda akan login ke Guacamole dengan hak istimewa administratif, berdasarkan skrip
insert-admin-user.sqlyang Anda jalankan sebelumnya dalam prosedur ini.
Sekarang, Anda dapat menambahkan pengguna tambahan berdasarkan alamat email mereka melalui antarmuka pengguna Guacamole. Untuk mengetahui detailnya, lihat
Administrasi dalam dokumentasi Guacamole.
Pengguna tambahan ini juga memerlukan izin melalui Google
IAM, dengan peran IAP-secured Web App User.
Menguji koneksi ke VM
Setelah men-deploy, mengonfigurasi, dan berhasil login ke Guacamole, Anda dapat membuat VM Windows dan menghubungkan ke VM yang baru dibuat melalui Guacamole.
Membuat VM
Di Cloud Shell, buat VM Windows untuk menguji koneksi ke:
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-bootSetelah menjalankan perintah, Anda mungkin perlu menunggu beberapa menit hingga Windows selesai melakukan inisialisasi, sebelum melanjutkan ke langkah berikutnya.
Reset sandi Windows untuk VM yang baru Anda buat:
gcloud compute reset-windows-password $TEST_VM \ --user=admin \ --zone=$ZONE
Menambahkan koneksi baru ke VM
- Di jendela browser, masukkan URL instance Guacamole dari Men-deploy Guacamole ke GKE menggunakan Skaffold, lalu login melalui IAP.
- Di UI Guacamole, klik nama pengguna Anda, lalu klik Settings.
- Di tab Connections, klik New (Baru) Connection (Koneksi).
- Di kolom Nama, masukkan nama untuk koneksi.
- Di kolom Location (Lokasi), masukkan lokasi untuk koneksi.
- Dari daftar drop-down Protocol, pilih RDP.
Di kolom Network (Jaringan), di kolom Hostname, masukkan nama VM yang Anda buat,
windows-vm.DNS project Anda me-resolve nama host ini ke alamat IP internal instance.
Di bagian Authentication (Autentikasi), tetapkan kolom berikut:
- Username:
admin - Password: sandi yang Anda dapatkan saat mereset sandi untuk VM
- Security mode:
NLA(Network Level Authentication) Ignore server certificate: centang kotak
VM Windows Compute Engine disediakan dengan sertifikat yang ditandatangani sendiri untuk Layanan Desktop Jarak Jauh, sehingga Anda harus menginstruksikan Guacamole untuk mengabaikan masalah validasi sertifikat.
- Username:
Klik Simpan.
Klik nama pengguna Anda, lalu pilih Beranda.
Klik koneksi yang baru Anda buat untuk menguji konektivitas. Setelah beberapa detik, Anda akan melihat desktop instance VM.
Untuk mengetahui detail selengkapnya tentang cara mengonfigurasi Guacamole, lihat Panduan Apache Guacamole.
Pembersihan
Agar tidak perlu membayar biaya pada Google Cloud akun Anda untuk resource yang digunakan dalam prosedur ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource baru
Selain menghapus seluruh project, Anda juga dapat menghapus setiap resource yang dibuat selama prosedur ini. Perhatikan bahwa konfigurasi Layar Izin OAuth tidak dapat dihapus dari project, hanya dapat diubah.
Di Cloud Shell, gunakan terraform untuk menghapus resource:
cd ~/guacamole-on-gcp/tf-k8s terraform destroy cd ~/guacamole-on-gcp/tf-infra terraform destroy gcloud compute instances delete $TEST_VM –-zone=$ZONE
Langkah berikutnya
- Tinjau panduan GKE tentang Melakukan hardening pada keamanan cluster Anda.
- Tinjau Mengenkripsikan secret di lapisan aplikasi untuk mempelajari cara meningkatkan keamanan pada secret, seperti kredensial database dan kredensial OAuth.
- Tinjau Kondisi IAM untuk mempelajari cara memberikan kontrol yang lebih terperinci atas akses pengguna ke Guacamole.
- Pahami lebih lanjut cara kerja integrasi IAP dengan meninjau penyedia autentikasi kustom di repositori GitHub.
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.
Kontributor
Penulis: Richard Grime | Principal Architect, UK Public Sector
Kontributor lainnya:
- Aaron Lind | Solution Engineer, Application Innovation
- Eyal Ben Ivri | Cloud Solutions Architect
- Ido Flatow | Cloud Solutions Architect