@@ -47,9 +47,19 @@ func (r *Reconciler) service() (runtime.Object, reconciler.DesiredState, error)
4747 },
4848 }
4949
50+ if r .fluentdSpec .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 .fluentdSpec .Metrics != nil && r .fluentdSpec .Metrics .IsEnabled () {
64- return & corev1.Service {
74+ desired := & corev1.Service {
6575 ObjectMeta : r .FluentdObjectMeta (ServiceName + "-metrics" , ComponentFluentd ),
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 .fluentdSpec .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 .FluentdObjectMeta (ServiceName + "-monitor" , ComponentFluentd ),
@@ -129,7 +147,7 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
129147 port = r .fluentdSpec .BufferVolumeMetrics .Port
130148 }
131149
132- return & corev1.Service {
150+ desired := & corev1.Service {
133151 ObjectMeta : r .FluentdObjectMeta (ServiceName + "-buffer-metrics" , ComponentFluentd ),
134152 Spec : corev1.ServiceSpec {
135153 Ports : []corev1.ServicePort {
@@ -144,7 +162,15 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
144162 Type : corev1 .ServiceTypeClusterIP ,
145163 ClusterIP : corev1 .ClusterIPNone ,
146164 },
147- }, reconciler .StatePresent , nil
165+ }
166+
167+ if r .fluentdSpec .EnabledIPv6 {
168+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
169+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
170+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
171+ }
172+
173+ return desired , reconciler .StatePresent , nil
148174 }
149175 return & corev1.Service {
150176 ObjectMeta : r .FluentdObjectMeta (ServiceName + "-buffer-monitor" , ComponentFluentd ),
@@ -214,5 +240,12 @@ func (r *Reconciler) headlessService() (runtime.Object, reconciler.DesiredState,
214240 ClusterIP : corev1 .ClusterIPNone ,
215241 },
216242 }
243+
244+ if r .fluentdSpec .EnabledIPv6 {
245+ ipFamilyPolicy := corev1 .IPFamilyPolicyPreferDualStack
246+ desired .Spec .IPFamilyPolicy = & ipFamilyPolicy
247+ desired .Spec .IPFamilies = []corev1.IPFamily {corev1 .IPv4Protocol , corev1 .IPv6Protocol }
248+ }
249+
217250 return desired , reconciler .StatePresent , nil
218251}
0 commit comments