@@ -47,9 +47,19 @@ func (r *Reconciler) service() (runtime.Object, reconciler.DesiredState, error)
4747 },
4848 }
4949
50+ if r .syslogNGSpec .EnabledIPv6 {
51+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
52+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
53+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
54+ }
55+
5056 beforeUpdateHook := reconciler .DesiredStateHook (func (current runtime.Object ) error {
5157 if s , ok := current .(* corev1.Service ); ok {
5258 desired .Spec .ClusterIP = s .Spec .ClusterIP
59+ // Preserve ClusterIPs for dual-stack configuration
60+ if len (s .Spec .ClusterIPs ) > 0 {
61+ desired .Spec .ClusterIPs = s .Spec .ClusterIPs
62+ }
5363 } else {
5464 return errors .Errorf ("failed to cast service object %+v" , current )
5565 }
@@ -61,7 +71,7 @@ func (r *Reconciler) service() (runtime.Object, reconciler.DesiredState, error)
6171
6272func (r * Reconciler ) serviceMetrics () (runtime.Object , reconciler.DesiredState , error ) {
6373 if r .syslogNGSpec .Metrics != nil && r .syslogNGSpec .Metrics .IsEnabled () {
64- return & corev1.Service {
74+ desired := & corev1.Service {
6575 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-metrics" , ComponentSyslogNG ),
6676 Spec : corev1.ServiceSpec {
6777 Ports : []corev1.ServicePort {
@@ -76,7 +86,15 @@ func (r *Reconciler) serviceMetrics() (runtime.Object, reconciler.DesiredState,
7686 Type : corev1 .ServiceTypeClusterIP ,
7787 ClusterIP : corev1 .ClusterIPNone ,
7888 },
79- }, reconciler .StatePresent , nil
89+ }
90+
91+ if r .syslogNGSpec .EnabledIPv6 {
92+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
93+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
94+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
95+ }
96+
97+ return desired , reconciler .StatePresent , nil
8098 }
8199 return & corev1.Service {
82100 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-monitor" , ComponentSyslogNG ),
@@ -128,7 +146,7 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
128146 port = r .syslogNGSpec .BufferVolumeMetrics .Port
129147 }
130148
131- return & corev1.Service {
149+ desired := & corev1.Service {
132150 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-buffer-metrics" , ComponentSyslogNG ),
133151 Spec : corev1.ServiceSpec {
134152 Ports : []corev1.ServicePort {
@@ -143,7 +161,15 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
143161 Type : corev1 .ServiceTypeClusterIP ,
144162 ClusterIP : corev1 .ClusterIPNone ,
145163 },
146- }, reconciler .StatePresent , nil
164+ }
165+
166+ if r .syslogNGSpec .EnabledIPv6 {
167+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
168+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
169+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
170+ }
171+
172+ return desired , reconciler .StatePresent , nil
147173 }
148174 return & corev1.Service {
149175 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-buffer-monitor" , ComponentSyslogNG ),
@@ -211,5 +237,12 @@ func (r *Reconciler) headlessService() (runtime.Object, reconciler.DesiredState,
211237 ClusterIP : corev1 .ClusterIPNone ,
212238 },
213239 }
240+
241+ if r .syslogNGSpec .EnabledIPv6 {
242+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
243+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
244+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
245+ }
246+
214247 return desired , reconciler .StatePresent , nil
215248}
0 commit comments