Skip to content

Commit 816fc4e

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

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

pkg/resources/syslogng/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.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

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

pkg/sdk/logging/api/v1beta1/syslogng_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type SyslogNGSpec struct {
5454
TLS SyslogNGTLS `json:"tls,omitempty"`
5555
ReadinessDefaultCheck ReadinessDefaultCheck `json:"readinessDefaultCheck,omitempty"`
5656
SkipRBACCreate bool `json:"skipRBACCreate,omitempty"`
57+
EnabledIPv6 bool `json:"enabledIPv6,omitempty"`
5758
StatefulSetOverrides *typeoverride.StatefulSet `json:"statefulSet,omitempty"`
5859
ServiceOverrides *typeoverride.Service `json:"service,omitempty"`
5960
ServiceAccountOverrides *typeoverride.ServiceAccount `json:"serviceAccount,omitempty"`

0 commit comments

Comments
 (0)