Production-ready RabbitMQ message broker for Kubernetes. Supports single-node and multi-node cluster
architectures, quorum queues (default), management UI with dedicated Ingress, Prometheus metrics, and
TLS listeners.
Keep the Erlang cookie stable
The Erlang cookie (auth.erlangCookie) is used for node-to-node authentication. The chart preserves an auto-generated
cookie from its existing managed Secret during upgrades. For production ownership and planned rotation, prefer
auth.existingSecret or External Secrets and keep the value identical on every cluster node.
Key Features
Official Alpine image — default docker.io/library/rabbitmq:4.3.6-alpine with chart-managed plugins
Hardened Management UI — CSP excludes unsafe-eval and unsafe-inline, with a configurable Referrer-Policy
Two architectures — single-node (one StatefulSet replica) or cluster (StatefulSet with peer discovery)
Quorum queues by default — queueDefaults.type: quorum for durable, replicated HA queues
Dedicated management ingress — management.ingress is separate from the AMQP service
Gateway API support — optional HTTPRoute for the management UI
External Secrets Operator — source username, password, and Erlang cookie from an external provider
Dual-stack Services — optional Service ipFamilyPolicy and ipFamilies controls
Partition handling — pause_minority strategy prevents split-brain in cluster mode
PDB support — optional PodDisruptionBudget to protect cluster quorum during node maintenance
TLS listeners — configurable AMQP/S and management TLS from an existing Secret
Prometheus metrics — built-in metrics plugin with optional ServiceMonitor
Low idle CPU defaults — disables Erlang scheduler busy-wait and uses lightweight TCP probes
Hardened pod defaults — numeric non-root identity, RuntimeDefault seccomp, read-only root filesystem,
no privilege escalation, no Linux capabilities, and no mounted ServiceAccount token
Upgrade-safe credentials — chart-managed username, password, and Erlang cookie survive both
--reset-values and --reuse-values
Port Reference
Port
Protocol
Description
5672
TCP
AMQP (client connections)
5671
TCP
AMQPS (AMQP over TLS)
15672
HTTP
Management UI
15671
HTTPS
Management UI over TLS
15692
HTTP
Prometheus metrics endpoint
4369
TCP
EPMD (Erlang port mapper daemon)
25672
TCP
Erlang distribution (cluster traffic)
Runtime Efficiency
The chart defaults to the official Alpine RabbitMQ image and controls enabled plugins through the rendered
enabled_plugins file. The base Alpine image already contains the management, Prometheus, and Kubernetes peer-discovery
plugins, so management.enabled, metrics.enabled, architecture: cluster, and plugins.extra decide what is active
without switching image variants.
By default, runtime.disableSchedulerBusyWait: true renders:
This lowers idle CPU in containerized RabbitMQ deployments. Startup, liveness, and readiness probes use TCP checks
against the active AMQP listener instead of repeatedly starting rabbitmq-diagnostics.
RabbitMQ 4.3.6 fixes exchange binding cleanup, quorum reconciliation, classic
queue recovery, AMQP 1.0 validation and credential expiry. Review the
upstream v4.3.6 release.
RabbitMQ 4.3.5 fixed quorum queue recovery, rolling-upgrade queries, direct reply-to duplicates,
and STOMP frame-size limits.
The chart renders management.headers.referrer_policy = no-referrer by default. Set
management.referrerPolicy: "" only when you intentionally want the browser’s default policy.
Security and Upgrades
The default pod runs as RabbitMQ UID 100 and GID 101 with RuntimeDefault seccomp. Privilege escalation is
disabled, all Linux capabilities are dropped, and the root filesystem is read-only. The data PVC and an ephemeral
/tmp volume are the only writable paths. A non-root init container restores the Erlang cookie to owner-only mode
after Kubernetes applies the volume filesystem group, which keeps PVCs created by older chart versions compatible.
RabbitMQ 4.1 and later discovers Kubernetes peers from StatefulSet ordinals without querying the Kubernetes API, so
automountServiceAccountToken defaults to false.
During an upgrade, the chart reuses all three values from its existing managed Secret: username, password, and Erlang
cookie. This prevents Helm --reset-values from making the Secret disagree with users stored in the persistent broker
database. Changing the auth.* values does not rotate an existing RabbitMQ user; perform live rotation with RabbitMQ
administration tooling, then synchronize an existing Secret or External Secrets provider.
The workload template merges the hardened security baseline by key, so an upgrade with --reuse-values applies new
defaults even when the previous release stored empty security-context maps. Explicit per-key security overrides and an
explicit automountServiceAccountToken value remain authoritative.
The supported in-place path from earlier public chart versions uses the official image identity 100:101. If a
release used a custom image, inspect the existing cookie before upgrading:
Keep podSecurityContext.runAsUser, runAsGroup, and fsGroup aligned with that image’s numeric identity. To move a
PVC to 100:101, stop RabbitMQ and perform an explicitly authorized one-time ownership migration first. The hardened
chart does not silently run a root volume-permissions container.
Deployment mode: one-node or clustered StatefulSet.
nameOverride
string
""
Override the chart name.
fullnameOverride
string
""
Override the full release name.
commonLabels
object
{}
Extra labels added to all resources.
clusterDomain
string
cluster.local
Kubernetes cluster domain.
Image
Parameter
Type
Default
Description
image.repository
string
docker.io/library/rabbitmq
Official RabbitMQ image repository.
image.tag
string
"4.3.6-alpine"
Official Alpine RabbitMQ image tag.
image.pullPolicy
string
IfNotPresent
Image pull policy.
imagePullSecrets
array
[]
Pull secrets for private registries.
Authentication
Parameter
Type
Default
Description
auth.username
string
user
RabbitMQ admin username.
auth.password
string
""
Admin password. Auto-generated if empty.
auth.erlangCookie
string
""
Erlang cookie for node-to-node auth. Auto-generated if empty.
auth.vhost
string
/
Default virtual host created by RabbitMQ.
auth.existingSecret
string
""
Existing secret with username, password, and Erlang cookie.
auth.existingSecretUsernameKey
string
rabbitmq-username
Key for username in existingSecret.
auth.existingSecretPasswordKey
string
rabbitmq-password
Key for password in existingSecret.
auth.existingSecretErlangCookieKey
string
rabbitmq-erlang-cookie
Key for Erlang cookie in existingSecret.
Queue Defaults
Parameter
Type
Default
Description
queueDefaults.type
string
quorum
Default queue type: quorum (HA, replicated) or classic (legacy, non-HA).
Quorum queues are the modern default
Quorum queues use the Raft consensus algorithm for durable, replicated message storage. They replace classic mirrored
queues and are the recommended choice for new deployments. Classic queues are still supported for compatibility with
legacy applications but are not HA.
Single-Node Mode
Parameter
Type
Default
Description
singleNode.persistence.enabled
boolean
true
Enable PVC for message storage.
singleNode.persistence.size
string
8Gi
PVC size.
singleNode.persistence.storageClass
string
""
StorageClass for the PVC.
singleNode.persistence.accessMode
string
ReadWriteOnce
PVC access mode.
Cluster Mode
Do not rotate the Erlang cookie during a cluster upgrade
Every node must use the same cookie. The chart retains its managed cookie across upgrades, but production operators
should use auth.existingSecret or External Secrets for explicit ownership and coordinated rotation.
Explicit seed node hostname for cluster formation.
cluster.gracefulShutdown.enabled
boolean
true
Execute graceful shutdown before pod termination.
cluster.persistence.enabled
boolean
true
Enable PVCs for each cluster node.
cluster.persistence.size
string
8Gi
PVC size per node.
cluster.persistence.storageClass
string
""
StorageClass for cluster PVCs.
Management UI
Parameter
Type
Default
Description
management.enabled
boolean
true
Enable the management plugin and UI (port 15672/15671).
management.referrerPolicy
string
no-referrer
Referrer-Policy header; empty uses the browser default.
management.ingress.enabled
boolean
false
Enable Ingress for the management UI.
management.ingress.ingressClassName
string
traefik
Ingress class for the management UI.
management.ingress.annotations
object
{}
Annotations for the management Ingress.
management.ingress.hosts
array
[]
Ingress host and path rules.
management.ingress.tls
array
[]
TLS configuration for the management Ingress.
management.ingress.useTlsPort
boolean
false
Route ingress to the TLS management port (15671).
TLS
Parameter
Type
Default
Description
tls.enabled
boolean
false
Enable TLS listeners for AMQP and management.
tls.existingSecret
string
""
Existing secret with CA, certificate, and private key.
tls.caFilename
string
ca.crt
CA certificate filename inside the secret.
tls.certFilename
string
tls.crt
Certificate filename inside the secret.
tls.keyFilename
string
tls.key
Private key filename inside the secret.
tls.verify
string
verify_none
TLS peer verification mode.
tls.failIfNoPeerCert
boolean
false
Reject connections without a valid peer certificate.
tls.disableNonTLSListeners
boolean
false
Disable plaintext AMQP listeners when TLS is enabled.
Plugins
Parameter
Type
Default
Description
plugins.extra
array
[]
Additional RabbitMQ plugins to enable beyond chart defaults.
Custom Configuration
Parameter
Type
Default
Description
config.extra
string
""
Extra rabbitmq.conf entries appended to the generated config.
config.advancedConfig
string
""
Raw advanced.config Erlang term content.
Runtime
Parameter
Type
Default
Description
runtime.disableSchedulerBusyWait
boolean
true
Add Erlang VM flags that reduce scheduler busy-wait idle CPU.
runtime.additionalErlArgs
string
""
Additional Erlang VM arguments appended to chart-managed defaults.
Probes
Parameter
Type
Default
Description
startupProbe.enabled
boolean
true
Enable TCP startup probe.
startupProbe.initialDelaySeconds
integer
10
Startup probe initial delay.
startupProbe.timeoutSeconds
integer
3
Startup probe timeout.
startupProbe.periodSeconds
integer
10
Startup probe period.
startupProbe.failureThreshold
integer
30
Startup probe failure threshold.
livenessProbe.enabled
boolean
true
Enable TCP liveness probe.
livenessProbe.initialDelaySeconds
integer
30
Liveness probe initial delay.
livenessProbe.timeoutSeconds
integer
3
Liveness probe timeout.
livenessProbe.periodSeconds
integer
30
Liveness probe period.
livenessProbe.failureThreshold
integer
6
Liveness probe failure threshold.
readinessProbe.enabled
boolean
true
Enable TCP readiness probe.
readinessProbe.initialDelaySeconds
integer
20
Readiness probe initial delay.
readinessProbe.timeoutSeconds
integer
3
Readiness probe timeout.
readinessProbe.periodSeconds
integer
10
Readiness probe period.
readinessProbe.failureThreshold
integer
6
Readiness probe failure threshold.
PodDisruptionBudget
Parameter
Type
Default
Description
pdb.enabled
boolean
false
Create a PodDisruptionBudget.
pdb.minAvailable
integer
1
Minimum available pods during disruptions. Set to 2 for 3-node HA.
pdb.maxUnavailable
string
""
Maximum unavailable pods (alternative to minAvailable).
Metrics
Parameter
Type
Default
Description
metrics.enabled
boolean
false
Enable the Prometheus metrics plugin (port 15692).
metrics.serviceMonitor.enabled
boolean
false
Create a Prometheus Operator ServiceMonitor.
metrics.serviceMonitor.interval
string
30s
Metrics scrape interval.
metrics.serviceMonitor.labels
object
{}
Extra labels for the ServiceMonitor.
Service
Parameter
Type
Default
Description
service.type
string
ClusterIP
Service type.
service.amqpPort
integer
5672
AMQP listener port.
service.amqpsPort
integer
5671
AMQPS listener port (TLS).
service.managementPort
integer
15672
Management UI HTTP port.
service.managementTlsPort
integer
15671
Management UI HTTPS port.
service.epmdPort
integer
4369
Erlang port mapper daemon port.
service.distPort
integer
25672
Erlang distribution port (cluster inter-node traffic).
service.metricsPort
integer
15692
Prometheus metrics port.
service.annotations
object
{}
Annotations for the Service.
service.extraPorts
array
[]
Extra ports added to the Service.
service.ipFamilyPolicy
string
""
Service IP family policy. Empty uses the cluster default.
service.ipFamilies
array
[]
Ordered Service IP families such as IPv4 and IPv6.
Gateway API
The chart can expose the management UI with Gateway API by rendering an HTTPRoute that targets the management Service
port. Use this when your cluster standardizes north-south HTTP traffic through Gateway API.
Parameter
Type
Default
Description
management.gateway.enabled
boolean
false
Render a Gateway API HTTPRoute for management UI.
management.gateway.hostnames
array
[]
HTTPRoute hostnames. Empty matches all hostnames.
management.gateway.parentRefs
array
[]
Parent Gateway references used by the HTTPRoute.
External Secrets Operator
Use External Secrets for RabbitMQ credentials when passwords and Erlang cookies are owned by a secret manager.
Parameter
Type
Default
Description
externalSecrets.enabled
boolean
false
Render an ExternalSecret for RabbitMQ credentials.
externalSecrets.apiVersion
string
external-secrets.io/v1
ExternalSecret API version.
externalSecrets.refreshInterval
string
"0"
Refresh interval. "0" syncs once.
externalSecrets.secretStoreRef
object
{}
SecretStore or ClusterSecretStore reference.
externalSecrets.target.creationPolicy
string
Owner
Target Secret creation policy.
externalSecrets.data
array
[]
Mappings for username, password, and Erlang cookie keys.
Resources and Security
Parameter
Type
Default
Description
resources
object
{}
CPU and memory requests and limits.
automountServiceAccountToken
boolean
false
Mount a Kubernetes API token in the pod.
podSecurityContext.runAsUser
integer
100
RabbitMQ process UID.
podSecurityContext.runAsGroup
integer
101
RabbitMQ process GID.
podSecurityContext.fsGroup
integer
101
Group applied to persistent data.
podSecurityContext.seccompProfile.type
string
RuntimeDefault
Pod seccomp profile.
securityContext.runAsNonRoot
boolean
true
Require a non-root container process.
securityContext.allowPrivilegeEscalation
boolean
false
Block privilege escalation.
securityContext.readOnlyRootFilesystem
boolean
true
Keep the image root filesystem read-only.
securityContext.capabilities.drop
array
[ALL]
Drop all Linux capabilities.
Scheduling
Parameter
Type
Default
Description
nodeSelector
object
{}
Node selector for scheduling.
tolerations
array
[]
Tolerations for scheduling.
affinity
object
{}
Affinity rules.
topologySpreadConstraints
array
[]
Topology spread constraints.
priorityClassName
string
""
PriorityClass for the pod.
terminationGracePeriodSeconds
integer
120
Grace period. Allows in-progress message deliveries to complete.
podLabels
object
{}
Extra labels for the pod.
podAnnotations
object
{}
Extra annotations for the pod.
Extra
Parameter
Type
Default
Description
extraEnv
array
[]
Extra environment variables for the container.
extraVolumes
array
[]
Extra volumes to attach to the pod.
extraVolumeMounts
array
[]
Extra volume mounts for the container.
extraManifests
array
[]
Extra Kubernetes manifests deployed alongside the chart.