Bienvenue dans la dernière étape de la mise en place du serveur Postgres dans votre cluster K8, qui consiste à ouvrir l’accès au service aux machines de votre réseau local. Nous allons définir le service dans Kubernetes et configurer le pare-feu de la machine hôte pour pouvoir y accéder.
Il faut bien évidemment avoir installé un serveur Postgres dans votre cluster avant de lire cet article.
Étape 5 : Création du Service pour Postgres
Définition du service dans le cluster
Pour créer un service Kubernetes commençons par définir un fichier YAML. Ce fichier décrit toutes les propriétés du service, y compris la façon dont il interagit avec les Pods associés. Créez un nouveau fichier avec nano postgres-dev-service.yml
et placez-y le contenu suivant :
apiVersion: v1
kind: Service
metadata:
name: postgres-dev-service
spec:
ports:
- nodePort: 30711
port: 30011
targetPort: 5432
protocol: TCP
selector:
app: postgres-dev
type: NodePort
- « apiVersion » et « kind » : Ces champs indiquent respectivement la version de l’API Kubernetes que vous utilisez et le type de ressource que vous souhaitez créer.
- « metadata » : Cette section contient les métadonnées, comme le nom du service. Vous pouvez également y ajouter des labels et des annotations si nécessaire.
- « nodePort » : Définit sur quel port du nœud la ressource sera exposée. C’est par ce port que le service sera accessible depuis l’extérieur du cluster.
- « port » : C’est le port sur lequel le service sera accessible à l’intérieur du cluster.
- « targetPort » : Ce port est celui où l’application elle-même est configurée pour écouter, 5432 pour une base de données PostgreSQL.
- « protocol » : Protocole réseau à utiliser. Ici, c’est TCP.
- « selector » : Ce sont les critères de sélection des Pods auxquels ce service va accéder. Ici, il cible tous les Pods avec le label « app: postgres-dev ».
- « type » : Il s’agit du type de service, ici NodePort, qui rend le service accessible à l’extérieur du cluster. Plus d’info sur les pages de documentation de Kubernetes.
Pour déployer ce fichier YAML, utilisez la commande suivante :
kubectl apply -f postgres-dev-service.yml -n dev-env
Cette commande indique à Kubernetes de créer un service basé sur les spécifications du fichier YAML. Si tout est configuré correctement, Kubernetes allouera les ressources nécessaires pour ce service.
Vérification du service créé
Pour s’assurer que le service est configuré correctement, et pour obtenir des détails supplémentaires, utilisez la commande suivante :
kubectl describe service postgres-dev-service
Test d’accès à Postgres depuis la machine hôte du cluster
Il est important à ce stade de vérifier que le cluster expose correctement le service Postgres, nous allons en tester l’accès. Quittez la console de kubmaster et retournez sur la console de la machine hôte (cette que nous avons appelée homelabsrv), installez le client postgres, et essayez de vous connecter au service du cluster :
sudo apt-get install postgresql-client
psql -h 192.168.56.101 -p 30711 -U postgres
Si ce test est réussi, cela signifie que le service fonctionne correctement à l’intérieur du cluster Kubernetes. Maintenant il faut rendre le service accessible depuis les autres machines de votre réseau local.
Étape 6 : Mise à disposition du service Postgres sur le réseau local
Configuration de la redirection de port
À ce stade, le service PostgreSQL est accessible depuis les nodes du cluster et depuis la machine hôte, mais les paramètres du pare-feu doivent être configurés pour permettre aux machines du réseau local d’y accéder.
Nous allons configurer une redirection de ports. Depuis la console de homelabsrv exécutez les commandes suivantes :
sudo iptables -t nat -A PREROUTING -p tcp --dport 5432 -j DNAT --to-destination 192.168.56.101:30711
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
- La première commande ajoute une règle qui prend tout le trafic TCP entrant sur le port 5432 (port par défaut de Postgres) et le redirige vers l’adresse IP 192.168.56.101 (nœud maître du cluster) sur le port 30711 (port défini dans le service créé à l’étape précédente).
- La deuxième commande active la fonction NAT (Network Address Translation) pour masquer les adresses IP source, permettant aux paquets de revenir à l’expéditeur original.
- La troisième commande ouvre le port 5432 sur le pare-feu, permettant ainsi aux paquets entrants d’accéder au service.
Test d’accès à Postgres depuis une autre machine du réseau
C’est la dernière étape qui consiste à vérifier qu’une autre machine du réseau accède correctement le service Postgres. Ouvrez une console depuis la machine de votre choix (typiquement votre poste de travail, s’il est sur le même réseau) et essayez de vous connecter à Postgres :
psql -h 192.168.1.101 -U postgres
Si ce test est réussi, cela signifie que le service fonctionne correctement à l’intérieur du cluster Kubernetes.
Félicitations ! Vous avez monté un service Postgres dans K8 avec stockage persistant que vous pouvez utiliser pour votre environnement de développement.
Bonus : installation d’un service MySQL sur votre environnement de développement
Ajoutons un service MySQL sur votre cluster Kubernetes, en suivant exactement les mêmes étapes que pour Postgres. Vous trouverez tous les détails sur cette page.
Navigation
Sommaire du dossier : Mise en place de PostgreSQL sur un cluster Kubernetes: Guide étape par étape
Chapitres:
- Configuration d’un Espace de Stockage Persistant pour PostgreSQL sur Kubernetes
- Précédent : Déploiement et Débogage de PostgreSQL dans un Cluster Kubernetes
- Exposer le service PostgreSQL sur votre réseau
- Suivant : Création d’un service MySQL sur Kuberneter pour votre environnement de développement