Skip to content

Commit 57e7c6f

Browse files
authored
Stop disabling management tcp listener when tls enabled (#487)
- fix a bug where management tcp listener no longer works when tls is enabled and disableNonTLSListeners is set to false - management tcp listener can be disabled by setting management.ssl.port without setting management.tcp.port - ensure that management.tcp.port is set to 15672 when tls is enabled but disableNonTLSListeners is false - do not set management.tcp.port when tls is enabled and disableNonTLSListeners is true
1 parent b2061cc commit 57e7c6f

File tree

7 files changed

+22
-8
lines changed

7 files changed

+22
-8
lines changed

api/v1beta1/rabbitmqcluster_types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ type TLSSpec struct {
241241
// The Secret must store this as ca.crt.
242242
// Used for mTLS, and TLS for rabbitmq_web_stomp and rabbitmq_web_mqtt.
243243
CaSecretName string `json:"caSecretName,omitempty"`
244-
// When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt.
244+
// When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ, management plugin and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt.
245245
// Only TLS-enabled clients will be able to connect.
246246
DisableNonTLSListeners bool `json:"disableNonTLSListeners,omitempty"`
247247
}

config/crd/bases/rabbitmq.com_rabbitmqclusters.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3456,7 +3456,7 @@ spec:
34563456
description: Name of a Secret in the same Namespace as the RabbitmqCluster, containing the Certificate Authority's public certificate for TLS. The Secret must store this as ca.crt. Used for mTLS, and TLS for rabbitmq_web_stomp and rabbitmq_web_mqtt.
34573457
type: string
34583458
disableNonTLSListeners:
3459-
description: 'When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt. Only TLS-enabled clients will be able to connect.'
3459+
description: 'When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ, management plugin and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt. Only TLS-enabled clients will be able to connect.'
34603460
type: boolean
34613461
secretName:
34623462
description: Name of a Secret in the same Namespace as the RabbitmqCluster, containing the server's private key & public certificate for TLS. The Secret must store these as tls.key and tls.crt, respectively.

controllers/rabbitmqcluster_controller_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ var _ = Describe("RabbitmqClusterController", func() {
641641
return false
642642
}
643643
return string(sts.UID) != string(oldSts.UID)
644-
}, 5).Should(BeTrue())
644+
}, 10).Should(BeTrue())
645645

646646
Eventually(func() bool {
647647
clientSvc, err := clientSet.CoreV1().Services(defaultNamespace).Get(ctx, svcName, metav1.GetOptions{})

controllers/reconcile_tls_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ var _ = Describe("Reconcile TLS", func() {
7575
})
7676
})
7777

78-
Context("Mutual TLS with a seperate CA certificate secret", func() {
78+
Context("Mutual TLS with a separate CA certificate secret", func() {
7979
It("Does not deploy the RabbitmqCluster, and retries every 10 seconds", func() {
8080
tlsSecretWithoutCACert(ctx, "rabbitmq-tls-secret-does-not-exist", defaultNamespace)
8181

internal/resource/configmap.go

+7
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ func (builder *ServerConfigMapBuilder) Update(object runtime.Object) error {
9393
if _, err := defaultSection.NewKey("listeners.tcp", "none"); err != nil {
9494
return err
9595
}
96+
} else {
97+
// management plugin does not have a *.listeners.tcp settings like other plugins
98+
// management tcp listener can be disabled by setting management.ssl.port without setting management.tcp.port
99+
// we set management tcp listener only if tls is enabled and disableNonTLSListeners is false
100+
if _, err := defaultSection.NewKey("management.tcp.port", "15672"); err != nil {
101+
return err
102+
}
96103
}
97104
if builder.Instance.AdditionalPluginEnabled("rabbitmq_mqtt") {
98105
if _, err := defaultSection.NewKey("mqtt.listeners.ssl.default", "8883"); err != nil {

internal/resource/configmap_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ listeners.ssl.default = 5671
272272
management.ssl.certfile = /etc/rabbitmq-tls/tls.crt
273273
management.ssl.keyfile = /etc/rabbitmq-tls/tls.key
274274
management.ssl.port = 15671
275+
management.tcp.port = 15672
275276
`)
276277

277278
Expect(configMapBuilder.Update(configMap)).To(Succeed())
@@ -306,6 +307,7 @@ listeners.ssl.default = 5671
306307
management.ssl.certfile = /etc/rabbitmq-tls/tls.crt
307308
management.ssl.keyfile = /etc/rabbitmq-tls/tls.key
308309
management.ssl.port = 15671
310+
management.tcp.port = 15672
309311
310312
mqtt.listeners.ssl.default = 8883
311313
@@ -340,6 +342,7 @@ listeners.ssl.default = 5671
340342
management.ssl.certfile = /etc/rabbitmq-tls/tls.crt
341343
management.ssl.keyfile = /etc/rabbitmq-tls/tls.key
342344
management.ssl.port = 15671
345+
management.tcp.port = 15672
343346
344347
ssl_options.cacertfile = /etc/rabbitmq-tls/ca.crt
345348
ssl_options.verify = verify_peer
@@ -378,6 +381,7 @@ management.ssl.cacertfile = /etc/rabbitmq-tls/ca.crt
378381
management.ssl.certfile = /etc/rabbitmq-tls/tls.crt
379382
management.ssl.keyfile = /etc/rabbitmq-tls/tls.key
380383
management.ssl.port = 15671
384+
management.tcp.port = 15672
381385
382386
ssl_options.cacertfile = /etc/rabbitmq-tls/ca.crt
383387
ssl_options.verify = verify_peer
@@ -402,7 +406,7 @@ management.ssl.cacertfile = /etc/rabbitmq-tls/ca.crt
402406
})
403407

404408
When("DisableNonTLSListeners is set to true", func() {
405-
It("disables non tls listeners in rabbitmq.conf", func() {
409+
It("disables non tls listeners for rabbitmq and management plugin", func() {
406410
instance = rabbitmqv1beta1.RabbitmqCluster{
407411
ObjectMeta: metav1.ObjectMeta{
408412
Name: "rabbit-tls",

system_tests/system_tests.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,12 @@ CONSOLE_LOG=new`
409409
By("disabling non TLS listeners", func() {
410410
// verify that rabbitmq.conf contains listeners.tcp = none
411411
cfgMap := getConfigFileFromPod(namespace, cluster, "/etc/rabbitmq/rabbitmq.conf")
412-
Expect(cfgMap).To(HaveKeyWithValue("listeners.tcp", "none"))
413-
Expect(cfgMap).To(HaveKeyWithValue("stomp.listeners.tcp", "none"))
414-
Expect(cfgMap).To(HaveKeyWithValue("mqtt.listeners.tcp", "none"))
412+
Expect(cfgMap).To(SatisfyAll(
413+
HaveKeyWithValue("listeners.tcp", "none"),
414+
HaveKeyWithValue("stomp.listeners.tcp", "none"),
415+
HaveKeyWithValue("mqtt.listeners.tcp", "none"),
416+
HaveKeyWithValue("management.ssl.port", "15671"),
417+
Not(HaveKey("management.tcp.port"))))
415418

416419
// verify that only tls ports are exposed in service
417420
service, err := clientSet.CoreV1().Services(cluster.Namespace).Get(ctx, cluster.ChildResourceName(""), metav1.GetOptions{})

0 commit comments

Comments
 (0)