Overview
RabbitMQ is a widely-used open-source message broker supporting AMQP 0-9-1 and other messaging protocols. This template deploys a single-replica broker with the management plugin enabled, backed by a persistent volume so queues, messages and the user database survive a restart. The broker’s default user is not a template value. It comes from a secret you create before installing, so the credentials your producers and consumers connect with never pass through Helm and never land in the release.What Gets Created
- Stateful Workload — (
RELEASE_NAME-rabbitmq): a single-replica RabbitMQ container running the officialrabbitmq:3-managementimage, serving AMQP on5672, the management UI on15672and Prometheus metrics on15692. - Volume Set — (
RELEASE_NAME-rabbitmq-vs): persistent storage mounted at/var/lib/rabbitmqholding the message store, queue definitions, the user database and the Erlang cookie. - Config Secret — (
RELEASE_NAME-rabbitmq-config): an opaque secret rendered into/etc/rabbitmq/rabbitmq.conf. It carries the AMQP listener port and nothing else. - Identity & Policy — (
RELEASE_NAME-rabbitmq-identity,RELEASE_NAME-rabbitmq-policy): an identity bound to the workload, and a policy granting itrevealon exactly two secrets — the config secret and the credentials secret you created.
This template does not create a GVC. You must deploy it into an existing GVC.
Upgrading From Earlier Versions
Template version 1.1.1 and earlier took the RabbitMQ default user as plain Helm values and shipped a working default username and password, published in the public template repository. Those are not merely a management-UI login: they are the AMQP credentials every producer and consumer puts in its connection string. In 1.1.1 they were also written in plaintext into the mountedrabbitmq.conf secret, so the credential was readable from the release and from the config secret alike.
The delivery path changed because a
cpln://secret/... reference is only interpolated in an environment variable. Inside a mounted config-file secret it lands as that literal string, and the broker would boot with a username of cpln://secret/.... RabbitMQ reads RABBITMQ_DEFAULT_USER and RABBITMQ_DEFAULT_PASS natively, so 1.2.0 passes them that way and leaves only the listener port in rabbitmq.conf.
The replaced
firewall block is a clarity fix, not the closing of an open door. The external_* keys in 1.1.1 were commented out, so the chart rendered no external firewall block at all — and a live 1.1.1 broker probed from the internet returned 403 on every attempt, with no external block backfilled by the API. External inbound was already closed. Version 1.2.0 states the closed configuration explicitly so the rendered and stored specs agree; the security fix in this release is the credential move.Two Settings That Previously Did Nothing
diskCapacitywas ignored. No template read it, so a user who asked for 100 GiB silently got a 10 GiB volume. It is removed and guarded; the live knob isvolumeset.volume.initialCapacity, and a non-default value there provisions a volume of that size.timeoutSecondswas ignored. The value existed but the workload hardcoded a 5-second request timeout. In 1.2.0 the knob reaches the API as you set it, so the shipped default of 30 is genuinely 30. Raising it does not disturb AMQP connections — an idle connection held for three minutes stayed open and still published and consumed afterwards.
Prerequisites
One secret must exist before you install. Its value never passes through Helm values, so it never lands in the release. Secrets are org-level, so no GVC flag is involved.1
Create the credentials secret
A dictionary secret holding exactly two keys — Set
username and password. These become the RabbitMQ default user: the management-UI login and the AMQP credentials in every producer’s and consumer’s connection string.credentialsSecretName to the name you used. Nothing else is required for a default install.2
Read the secret back later
The
-o yaml is required — plain cpln secret reveal prints only a summary table, not the values:Installation
To install, follow the instructions for your preferred method:UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Credentials
credentialsSecretName— Name of the dictionary secret holding theusernameandpasswordkeys. The secret must exist before you install; see Prerequisites.
The default user is written into the RabbitMQ database on first boot only. Changing the secret afterwards does not change the broker’s credentials — rotate with
rabbitmqctl change_password, or uninstall (which deletes the volume set and all messages) and reinstall.Image
image.repository— The broker image, tag included. The shipped value tracks the floating3-managementtag, so a fresh install picks up the current 3.x management-enabled image rather than a pinned patch release.
Resources
cpu— CPU limit for the broker.memory— Memory limit for the broker.timeoutSeconds— Inbound request timeout in seconds, applied to the workload. This value was ignored before 1.2.0; it is now applied as set.
Internal Access
internalAccess.type— Controls which workloads can reach the broker. External inbound is always closed; there is no public-access knob.
A change to
internalAccess.type takes roughly 30 seconds to 5 minutes to propagate — closing access settles faster than reopening it, and every transition passes through a blocked window first. Re-test rather than concluding the change did not apply.Under none, a raw TCP connection to 5672 still appears to succeed while the AMQP handshake is reset, so a nc -z style check will wrongly suggest the setting does nothing. Test with a real client connection.RabbitMQ Configuration
rabbitmq_conf.listeners_tcp_default— The AMQP listener port, rendered into/etc/rabbitmq/rabbitmq.conf. It is the only setting that file carries.env.RABBITMQ_CONFIG_FILE— Path the broker reads that config file from. The credentials are delivered separately, asRABBITMQ_DEFAULT_USERandRABBITMQ_DEFAULT_PASSenvironment variables resolved from your secret.
Storage
volumeset.volume.initialCapacity— Volume size in GiB backing/var/lib/rabbitmq. Forhigh-throughput-ssdthe minimum is 1000.volumeset.volume.fileSystemType—ext4orxfs.volumeset.volume.performanceClass—general-purpose-ssdorhigh-throughput-ssd.
Connecting to RabbitMQ
The broker is reachable from inside the GVC only. There is no public-access knob, and the workload’s canonical endpoint returns403.
The short name
RELEASE_NAME-rabbitmq also resolves inside the same GVC.
To open the management UI in a browser from your laptop, tunnel to it — no public exposure required:
username and password from your credentials secret; the management API rejects any other password with 401.
Ports
Important Notes
- The credentials secret must exist before you install. Without it the workload wedges with no log output at all; see Prerequisites for the one diagnostic that shows it.
- The default user is created on first boot only, so changing the secret on a running broker does not change its credentials.
- Single node, single replica: an upgrade or a reschedule is a short outage for every connected client, so give your producers and consumers a reconnect policy.
- The first upgrade after an install re-applies resources even when values are identical, which bounces the broker. Later upgrades are clean.
- Queues, messages and the user database live on the volume set and survive a redeploy; uninstalling the release deletes them.
- The broker is GVC-internal only — use
cpln port-forwardfor the management UI rather than looking for a public endpoint.
External References
RabbitMQ Documentation
Official RabbitMQ documentation
Configuration Reference
How rabbitmq.conf and the environment variables are read
Management Plugin
The management UI and HTTP API
RabbitMQ Template
View the source files, default values, and chart definition