Skip to content

Commit 9d15cc8

Browse files
Copilotcsatib02
andcommitted
Add IPv6 dual-stack support for FluentD Kubernetes services
Co-authored-by: csatib02 <113284287+csatib02@users.noreply.github.com>
1 parent 9df7614 commit 9d15cc8

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

pkg/resources/fluentd/service.go

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6272
func (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

Comments
 (0)