Come gestire i vhost e gli utenti
Questa guida spiega come creare e gestire gli utenti, i virtual host (vhost) e i permessi RabbitMQ su Hikube in modo dichiarativo tramite i manifesti Kubernetes.
Prerequisiti
- kubectl configurato con il vostro kubeconfig Hikube
- Un cluster RabbitMQ distribuito su Hikube (o un manifesto pronto per la distribuzione)
- (Opzionale) rabbitmqadmin o un browser per accedere alla Management UI
Passi
1. Creare degli utenti
Gli utenti sono dichiarati nella sezione users del manifesto. Ogni utente è identificato da un nome e possiede una password.
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
Separate gli utenti per ruolo funzionale: un account admin per l'amministrazione, account applicativi per ogni servizio, e un account monitoring dedicato alla supervisione. Questo facilita l'audit e limita l'impatto in caso di compromissione.
2. Creare dei vhost con permessi
I virtual host isolano le code, gli exchange e i binding tra diverse applicazioni o ambienti. Ogni vhost definisce dei ruoli admin (lettura/scrittura completa) e readonly (sola lettura).
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
Ruoli disponibili:
| Ruolo | Descrizione |
|---|---|
admin | Accesso completo: creare/eliminare code, pubblicare e consumare messaggi |
readonly | Accesso in sola lettura: consumare messaggi, consultare le metriche |
Isolate ogni applicazione in un vhost dedicato. Questo limita l'impatto in caso di sovraccarico di un'applicazione e facilita la gestione dei permessi.
3. Applicare le modifiche
Combinate la configurazione completa in un unico manifesto:
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. Verificare gli utenti e i vhost
Verificate che la risorsa RabbitMQ sia stata aggiornata correttamente:
kubectl get rabbitmq my-rabbitmq -o yaml | grep -A 20 "users:\|vhosts:"
Per una verifica più approfondita, connettetevi a un pod RabbitMQ:
kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_users
Risultato atteso:
Listing users ...
user tags
admin [administrator]
appuser []
monitoring []
Elencate i vhost:
kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_vhosts
Risultato atteso:
Listing vhosts ...
name
production
analytics
Verificate i permessi di un vhost:
kubectl exec -it my-rabbitmq-server-0 -- rabbitmqctl list_permissions -p production
Risultato atteso:
Listing permissions for vhost "production" ...
user configure write read
admin .* .* .*
appuser .* .* .*
monitoring .*
5. Testare la connessione AMQP
Aprite un port-forward verso il servizio RabbitMQ:
kubectl port-forward svc/my-rabbitmq 5672:5672
Testate la connessione con un client AMQP (esempio con 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("Messaggio inviato con successo")
connection.close()
Potete anche accedere alla Management UI tramite port-forward:
kubectl port-forward svc/my-rabbitmq 15672:15672
Poi aprite http://127.0.0.1:15672 nel vostro browser e connettetevi con l'account admin.
Verifica
La configurazione è riuscita se:
- Gli utenti appaiono in
rabbitmqctl list_users - I vhost sono elencati in
rabbitmqctl list_vhosts - I permessi corrispondono al manifesto (
rabbitmqctl list_permissions) - Gli utenti possono connettersi tramite AMQP sul proprio vhost rispettivo
- Gli utenti
readonlynon possono pubblicare messaggi
Per approfondire
- Riferimento API RabbitMQ: documentazione completa dei parametri
usersevhosts - Come scalare il cluster RabbitMQ: regolare le risorse e il numero di repliche