Aller au contenu

Accéder à sa base de données

Vos bases de données PostgreSQL sont gérées par CloudNativePG (CNPG — voir PostgreSQL managé pour en créer une) et ne sont pas exposées publiquement par défaut. Pour vous y connecter depuis votre poste, vous devez utiliser un port-forward — soit en ligne de commande avec kubectl, soit via l’interface graphique de Freelens.

Choisir un client au choix parmi ceux ci-dessous pour se connecter à votre environnement Kubernetes :

Pour se connecter à votre base de données :

  • Votre fichier kubeconfig configuré (variable KUBECONFIG ou ~/.kube/config)
  • Un client PostgreSQL : psql, DBeaver, TablePlus, pgAdmin, DataGrip, etc.

Listez les clusters PostgreSQL disponibles dans votre namespace :

Fenêtre de terminal
kubectl get clusters.postgresql.cnpg.io -n <votre-namespace>

Vous obtiendrez une sortie similaire à :

NAME AGE INSTANCES READY STATUS PRIMARY
my-app-database 30d 2 2 Cluster in healthy state my-app-database-1

Les identifiants sont stockés dans un Secret Kubernetes généré automatiquement par CNPG. Le nom du secret suit la convention <nom-du-cluster>-app.

Lisez uniquement la clé dont vous avez besoin, plutôt que le secret entier :

Fenêtre de terminal
# le mot de passe
kubectl get secret <nom-du-cluster>-app -n <votre-namespace> \
-o jsonpath='{.data.password}' | base64 -d && echo
# ou l'URI de connexion complète
kubectl get secret <nom-du-cluster>-app -n <votre-namespace> \
-o jsonpath='{.data.uri}' | base64 -d && echo

Pour voir les autres champs sans afficher leur valeur :

Fenêtre de terminal
kubectl get secret <nom-du-cluster>-app -n <votre-namespace> \
-o go-template='{{range $k,$v := .data}}{{$k}}{{"\n"}}{{end}}'

Vous y trouverez notamment :

Clé Description
host Nom du service interne (cluster DNS)
port Port PostgreSQL (généralement 5432)
dbname Nom de la base de données
username Utilisateur applicatif
password Mot de passe
uri URI de connexion complète
  1. Ouvrez un terminal et lancez la commande suivante :

    Fenêtre de terminal
    kubectl port-forward -n <votre-namespace> svc/<nom-du-cluster>-rw 5432:5432

    Vous devriez voir :

    Forwarding from 127.0.0.1:5432 -> 5432
    Forwarding from [::1]:5432 -> 5432
  2. Gardez ce terminal ouvert — le port-forward reste actif tant que la commande tourne.

  3. Connectez-vous depuis un autre terminal ou votre client graphique.

Fenêtre de terminal
psql -h localhost -p 5432 -U <username> -d <dbname>

Le mot de passe vous sera demandé interactivement.

Pour vous connecter à un réplica en lecture seule (utile pour des requêtes lourdes sans impacter la production), il suffit de cibler le service -ro au lieu de -rw :

Fenêtre de terminal
kubectl port-forward -n <votre-namespace> svc/<nom-du-cluster>-ro 5432:5432

C’est un comportement normal lors de périodes d’inactivité. Relancez simplement le port-forward. Freelens gère automatiquement la reconnexion dans la plupart des cas ; avec kubectl, vous pouvez utiliser un wrapper comme kubefwd pour les reconnexions automatiques.

error: unable to forward port because pod is not running

Section intitulée « error: unable to forward port because pod is not running »

Vérifiez l’état de votre cluster CNPG :

Fenêtre de terminal
kubectl get pods -n <votre-namespace> -l cnpg.io/cluster=<nom-du-cluster>

Si les pods ne sont pas en état Running, consultez les événements :

Fenêtre de terminal
kubectl describe cluster <nom-du-cluster> -n <votre-namespace>

Assurez-vous que le port-forward est toujours actif — vérifiez votre terminal (kubectl) ou la barre de statut en bas de Freelens.