Cloud SQL et déploiement¶
Provisionnement de l'instance PostgreSQL via Cloud SQL avec Private IP, initialisation du schéma Guacamole, build de l'image Packer et déploiement de la VM.
Private Service Access¶
Cloud SQL avec Private IP nécessité une plage d'adresses réservée dans votre VPC et un peering avec le réseau des services Google.
Réseau default
Ces commandes utilisent le réseau default. Si vous utilisez un VPC custom, remplacez default par le nom de votre réseau dans toutes les commandes ci-dessous.
Réserver une plage d'adresses¶
gcloud compute addresses create google-managed-services-default \
--global \
--purpose=VPC_PEERING \
--prefix-length=16 \
--network=default
Activer le peering VPC¶
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default
Cette opération prend quelques minutes. Verifiez que le peering est actif :
Création de l'instance Cloud SQL¶
Coût
db-f1-micro est le tier le moins cher (partagé, 0.6 Go RAM). Pour un usage production, utilisez au minimum db-g1-small. L'instance Cloud SQL est facturee à l'heure même si elle est inactive.
gcloud sql instances create guacamole-db \
--database-version=POSTGRES_15 \
--tier=db-f1-micro \
--region=europe-west1 \
--no-assign-ip \
--network=default \
--availability-type=zonal \
--storage-size=10GB \
--storage-type=SSD
| Parametre | Valeur | Description |
|---|---|---|
--database-version | POSTGRES_15 | PostgreSQL 15 |
--tier | db-f1-micro | Tier partage, minimal |
--no-assign-ip | — | Pas d'IP publique |
--network | default | VPC pour Private IP |
--availability-type | zonal | Pas de haute dispo (coûts reduits) |
Recuperez l'adresse Private IP de l'instance :
Notez cette adresse, elle sera utilisée comme cloudsql_host dans Packer.
Base de données et utilisateur¶
Mot de passe
Remplacez CHOISIR_UN_MOT_DE_PASSE_FORT par un mot de passe robuste. Ce mot de passe sera encode dans l'image Packer via la variable Ansible guacamole_db_password. Ne commitez jamais ce mot de passe dans votre dépôt Git.
Créer la base de données¶
Créer l'utilisateur¶
gcloud sql users create guacamole \
--instance=guacamole-db \
--password=CHOISIR_UN_MOT_DE_PASSE_FORT
Initialisation du schéma¶
Le schéma SQL de Guacamole ne peut pas être appliqué directement depuis votre poste car Cloud SQL n'a pas d'IP publique. Utilisez une VM temporaire dans le même VPC.
Créer une VM temporaire¶
gcloud compute instances create guacamole-init \
--zone=europe-west1-b \
--machine-type=e2-micro \
--image-family=debian-12 \
--image-project=debian-cloud \
--no-address
Se connecter via IAP¶
Installer psql et télécharger les scripts¶
Sur la VM temporaire :
sudo apt-get update && sudo apt-get install -y postgresql-client wget
GUAC_VERSION="1.5.5"
wget "https://apache.org/dyn/closer.lua/guacamole/${GUAC_VERSION}/binary/guacamole-auth-jdbc-${GUAC_VERSION}.tar.gz?action=download" \
-O guacamole-auth-jdbc.tar.gz
tar xzf guacamole-auth-jdbc.tar.gz
Appliquer le schéma¶
CLOUDSQL_HOST="10.X.X.X" # Adresse Private IP relevee precedemment
psql "host=${CLOUDSQL_HOST} port=5432 dbname=guacamole user=guacamole" \
-f guacamole-auth-jdbc-${GUAC_VERSION}/postgresql/schema/001-create-schema.sql
psql "host=${CLOUDSQL_HOST} port=5432 dbname=guacamole user=guacamole" \
-f guacamole-auth-jdbc-${GUAC_VERSION}/postgresql/schema/002-create-admin-user.sql
Le script 002-create-admin-user.sql crée le compte guacadmin avec le mot de passe par défaut guacadmin. Changez-le immédiatement après le premier login.
Supprimer la VM temporaire¶
Build de l'image Packer¶
Mettez à jour packer/guacamole.auto.pkrvars.hcl avec l'adresse Private IP Cloud SQL :
project_id = "MON-PROJET-GCP"
zone = "europe-west1-b"
cloudsql_host = "10.X.X.X" # Adresse Private IP Cloud SQL
Lancez le build :
Durée du build
Le build prend entre 15 et 25 minutes. La compilation de guacd depuis les sources est l'étape la plus longue (~10 min). Vous pouvez suivre la progression dans la sortie Packer. En cas d'échec réseau, relancez simplement packer build — les étapes sont idempotentes grâce aux conditions creates:.
Recuperez le nom de l'image créée :
gcloud compute images list \
--filter="family=guacamole" \
--sort-by="~creationTimestamp" \
--format="value(name)" \
--limit=1
Déploiement de la VM¶
IMAGE_NAME=$(gcloud compute images list \
--filter="family=guacamole" \
--sort-by="~creationTimestamp" \
--format="value(name)" \
--limit=1)
gcloud compute instances create guacamole-vm \
--zone=europe-west1-b \
--machine-type=e2-standard-2 \
--image=${IMAGE_NAME} \
--image-project=MON-PROJET-GCP \
--no-address \
--service-account=guacamole-vm@MON-PROJET-GCP.iam.gserviceaccount.com \
--scopes=cloud-platform
Recuperez l'IP interne de la VM :
gcloud compute instances describe guacamole-vm \
--zone=europe-west1-b \
--format="value(networkInterfaces[0].networkIP)"
Vérification¶
Test HTTP depuis une VM du même réseau¶
La réponse attendue est 200.
Vérification des services¶
gcloud compute ssh guacamole-vm \
--zone=europe-west1-b \
--tunnel-through-iap \
--command="systemctl is-active tomcat9 guacd"
Les deux services doivent répondre active.
Premier login
Ouvrez http://IP_INTERNE_VM:8080/guacamole/ dans votre navigateur (via un tunnel SSH ou un bastion).
Identifiants par défaut : guacadmin / guacadmin
Changez le mot de passe immédiatement via Parametres → Utilisateurs → guacadmin → Modifier le mot de passe.