Aller au contenu principal
Version: 3.0.0-alpha (Diátaxis)

Comment gérer les vhosts et utilisateurs

Ce guide explique comment créer et gérer les utilisateurs, virtual hosts (vhosts) et permissions RabbitMQ sur Hikube de manière déclarative via les manifestes Kubernetes.

Prérequis

  • kubectl configuré avec votre kubeconfig Hikube
  • Un cluster RabbitMQ déployé sur Hikube (ou un manifeste prêt à déployer)
  • (Optionnel) rabbitmqadmin ou un navigateur pour accéder à la Management UI

Étapes

1. Créer des utilisateurs

Les utilisateurs sont déclarés dans la section users du manifeste. Chaque utilisateur est identifié par un nom et possède un mot de passe.

rabbitmq-users.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: RabbitMQ
metadata:
name: my-rabbitmq
spec:
replicas: 3
resourcesPreset: small
size: 10Gi

users:
admin:
password: SecureAdminPassword
appuser:
password: AppUserPassword456
monitoring:
password: MonitoringPassword789
astuce

Séparez les utilisateurs par rôle fonctionnel : un compte admin pour l'administration, des comptes applicatifs pour chaque service, et un compte monitoring dédié à la supervision. Cela facilite l'audit et limite l'impact en cas de compromission.

2. Créer des vhosts avec permissions

Les virtual hosts isolent les files, échanges et bindings entre différentes applications ou environnements. Chaque vhost définit des rôles admin (lecture/écriture complète) et readonly (lecture seule).

rabbitmq-vhosts.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: RabbitMQ
metadata:
name: my-rabbitmq
spec:
replicas: 3
resourcesPreset: small
size: 10Gi

users:
admin:
password: SecureAdminPassword
appuser:
password: AppUserPassword456
monitoring:
password: MonitoringPassword789

vhosts:
production:
roles:
admin:
- admin
- appuser
readonly:
- monitoring
analytics:
roles:
admin:
- admin
readonly:
- appuser
- monitoring

Rôles disponibles :

RôleDescription
adminAccès complet : créer/supprimer des queues, publier et consommer des messages
readonlyAccès en lecture seule : consommer des messages, consulter les métriques
astuce

Isolez chaque application dans un vhost dédié. Cela limite l'impact en cas de surcharge d'une application et facilite la gestion des permissions.

3. Appliquer les changements

Combinez la configuration complète dans un seul manifeste :

rabbitmq-complete.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: RabbitMQ
metadata:
name: my-rabbitmq
spec:
replicas: 3
resourcesPreset: small
size: 10Gi

users:
admin:
password: SecureAdminPassword
appuser:
password: AppUserPassword456
monitoring:
password: MonitoringPassword789

vhosts:
production:
roles:
admin:
- admin
- appuser
readonly:
- monitoring
analytics:
roles:
admin:
- admin
readonly:
- appuser
- monitoring
kubectl apply -f rabbitmq-complete.yaml

4. Vérifier les utilisateurs et vhosts

Vérifiez que la ressource RabbitMQ a bien été mise à jour :

kubectl get rabbitmq my-rabbitmq -o yaml | grep -A 20 "users:\|vhosts:"

Pour une vérification plus poussée, connectez-vous à un pod RabbitMQ :

kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_users

Résultat attendu :

Listing users ...
user tags
admin [administrator]
appuser []
monitoring []

Listez les vhosts :

kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_vhosts

Résultat attendu :

Listing vhosts ...
name
production
analytics

Vérifiez les permissions d'un vhost :

kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_permissions -p production

Résultat attendu :

Listing permissions for vhost "production" ...
user configure write read
admin .* .* .*
appuser .* .* .*
monitoring .*

5. Tester la connexion AMQP

Ouvrez un port-forward vers le service RabbitMQ :

kubectl port-forward svc/my-rabbitmq 5672:5672

Testez la connexion avec un client AMQP (exemple avec Python pika) :

import pika

credentials = pika.PlainCredentials('appuser', 'AppUserPassword456')
connection = pika.BlockingConnection(
pika.ConnectionParameters('127.0.0.1', 5672, 'production', credentials)
)
channel = connection.channel()
channel.queue_declare(queue='test-queue')
channel.basic_publish(exchange='', routing_key='test-queue', body='Hello Hikube!')
print("Message envoyé avec succès")
connection.close()

Vous pouvez aussi accéder à la Management UI via port-forward :

kubectl port-forward svc/my-rabbitmq 15672:15672

Puis ouvrez http://127.0.0.1:15672 dans votre navigateur et connectez-vous avec le compte admin.

Vérification

La configuration est réussie si :

  • Les utilisateurs apparaissent dans rabbitmqctl list_users
  • Les vhosts sont listés dans rabbitmqctl list_vhosts
  • Les permissions correspondent au manifeste (rabbitmqctl list_permissions)
  • Les utilisateurs peuvent se connecter via AMQP sur leur vhost respectif
  • Les utilisateurs readonly ne peuvent pas publier de messages

Pour aller plus loin