99 networkv1 "github.com/openstack-k8s-operators/infra-operator/apis/network/v1beta1"
1010 "github.com/openstack-k8s-operators/lib-common/modules/certmanager"
1111 condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
12+ "github.com/openstack-k8s-operators/lib-common/modules/common/configmap"
1213 "github.com/openstack-k8s-operators/lib-common/modules/common/helper"
1314 "github.com/openstack-k8s-operators/lib-common/modules/common/ocp"
1415 "github.com/openstack-k8s-operators/lib-common/modules/common/util"
@@ -22,6 +23,7 @@ import (
2223
2324 corev1beta1 "github.com/openstack-k8s-operators/openstack-operator/apis/core/v1beta1"
2425 corev1 "k8s.io/api/core/v1"
26+ "k8s.io/utils/ptr"
2527
2628 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2729 ctrl "sigs.k8s.io/controller-runtime"
@@ -154,17 +156,56 @@ func reconcileRabbitMQ(
154156 if err != nil {
155157 return mqFailed , ctrl.Result {}, err
156158 }
159+ clusterNodeTLSArgs := "-proto_dist inet_tls -ssl_dist_optfile /etc/rabbitmq/inter-node-tls.config"
157160 if fipsEnabled {
158- fipsModeStr := "-crypto fips_mode true"
159-
160- envVars = append (envVars , corev1.EnvVar {
161- Name : "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ,
162- Value : fipsModeStr ,
163- }, corev1.EnvVar {
164- Name : "RABBITMQ_CTL_ERL_ARGS" ,
165- Value : fipsModeStr ,
166- })
161+ clusterNodeTLSArgs += " -crypto fips_mode true"
167162 }
163+
164+ envVars = append (envVars , corev1.EnvVar {
165+ Name : "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ,
166+ Value : clusterNodeTLSArgs ,
167+ }, corev1.EnvVar {
168+ Name : "RABBITMQ_CTL_ERL_ARGS" ,
169+ Value : clusterNodeTLSArgs ,
170+ })
171+ }
172+
173+ cms := []util.Template {
174+ {
175+ Name : fmt .Sprintf ("%s-config-data" , rabbitmq .Name ),
176+ Namespace : rabbitmq .Namespace ,
177+ Type : util .TemplateTypeConfig ,
178+ InstanceType : "rabbitmq" ,
179+ Labels : map [string ]string {},
180+ CustomData : map [string ]string {
181+ "inter_node_tls.config" : `[
182+ {server, [
183+ {cacertfile,"/etc/rabbitmq-tls/ca.crt"},
184+ {certfile,"/etc/rabbitmq-tls/tls.crt"},
185+ {keyfile,"/etc/rabbitmq-tls/tls.key"},
186+ {secure_renegotiate, true},
187+ {fail_if_no_peer_cert, true},
188+ {verify, verify_peer},
189+ {versions, ['tlsv1.2','tlsv1.3']}
190+ ]},
191+ {client, [
192+ {cacertfile,"/etc/rabbitmq-tls/ca.crt"},
193+ {certfile,"/etc/rabbitmq-tls/tls.crt"},
194+ {keyfile,"/etc/rabbitmq-tls/tls.key"},
195+ {secure_renegotiate, true},
196+ {verify, verify_peer},
197+ {versions, ['tlsv1.2','tlsv1.3']}
198+ ]}
199+ ].
200+ ` ,
201+ },
202+ },
203+ }
204+
205+ err := configmap .EnsureConfigMaps (ctx , helper , instance , cms , nil )
206+ if err != nil {
207+ Log .Error (err , "Unable to create rabbitmq config maps" )
208+ return mqFailed , ctrl.Result {}, err
168209 }
169210
170211 defaultStatefulSet := rabbitmqv2.StatefulSet {
@@ -197,6 +238,15 @@ func reconcileRabbitMQ(
197238
198239 hostname := fmt .Sprintf ("%s.%s.svc" , name , instance .Namespace )
199240 hostnameHeadless := fmt .Sprintf ("%s-nodes.%s.svc" , name , instance .Namespace )
241+ hostnames := []string {
242+ hostname ,
243+ fmt .Sprintf ("%s.%s" , hostname , ClusterInternalDomain ),
244+ hostnameHeadless ,
245+ fmt .Sprintf ("%s.%s" , hostnameHeadless , ClusterInternalDomain ),
246+ }
247+ for i := 0 ; i < int (* spec .Replicas ); i ++ {
248+ hostnames = append (hostnames , fmt .Sprintf ("%s-server-%d.%s-nodes.%s" , name , i , name , instance .Namespace ))
249+ }
200250
201251 tlsCert := ""
202252 commonName := fmt .Sprintf ("%s.%s" , hostname , ClusterInternalDomain )
@@ -206,14 +256,7 @@ func reconcileRabbitMQ(
206256 IssuerName : instance .GetInternalIssuer (),
207257 CertName : fmt .Sprintf ("%s-svc" , rabbitmq .Name ),
208258 CommonName : & commonName ,
209- Hostnames : []string {
210- hostname ,
211- fmt .Sprintf ("%s.%s" , hostname , ClusterInternalDomain ),
212- hostnameHeadless ,
213- fmt .Sprintf ("%s.%s" , hostnameHeadless , ClusterInternalDomain ),
214- fmt .Sprintf ("*.%s" , hostnameHeadless ),
215- fmt .Sprintf ("*.%s.%s" , hostnameHeadless , ClusterInternalDomain ),
216- },
259+ Hostnames : hostnames ,
217260 Subject : & certmgrv1.X509Subject {
218261 Organizations : []string {fmt .Sprintf ("%s.%s" , rabbitmq .Namespace , ClusterInternalDomain )},
219262 },
@@ -346,6 +389,34 @@ func reconcileRabbitMQ(
346389 ]}
347390].
348391`
392+
393+ rabbitmq .Spec .Override .StatefulSet .Spec .Template .Spec .Volumes = []corev1.Volume {
394+ {
395+ Name : "config-data" ,
396+ VolumeSource : corev1.VolumeSource {
397+ ConfigMap : & corev1.ConfigMapVolumeSource {
398+ LocalObjectReference : corev1.LocalObjectReference {
399+ Name : fmt .Sprintf ("%s-config-data" , rabbitmq .Name ),
400+ },
401+ DefaultMode : ptr.To [int32 ](0o420 ),
402+ Items : []corev1.KeyToPath {
403+ {
404+ Key : "inter_node_tls.config" ,
405+ Path : "inter_node_tls.config" ,
406+ },
407+ },
408+ },
409+ },
410+ },
411+ }
412+ rabbitmq .Spec .Override .StatefulSet .Spec .Template .Spec .Containers [0 ].VolumeMounts = []corev1.VolumeMount {
413+ {
414+ MountPath : "/etc/rabbitmq/inter-node-tls.config" ,
415+ ReadOnly : true ,
416+ Name : "config-data" ,
417+ SubPath : "inter_node_tls.config" ,
418+ },
419+ }
349420 }
350421
351422 // overrides
0 commit comments