Skip to content

Commit 740400d

Browse files
philrhurstPhilip Hurst
and
Philip Hurst
authored
Add support for IP Family Policy and IP Families (#4076)
* add IP Family Policy to CRD * update controller logic for IP Family Policy * added IPFamilies to the CRD * update controller logic for IP Families and IP Family Policy * update enum validation for IPFamily * update to enum for IP Families * refactor to use the upstream type * updated controller logic to use upstream type * simplified IP Family assignment --------- Co-authored-by: Philip Hurst <[email protected]>
1 parent 072a19d commit 740400d

File tree

7 files changed

+122
-0
lines changed

7 files changed

+122
-0
lines changed

config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml

+68
Original file line numberDiff line numberDiff line change
@@ -14663,6 +14663,23 @@ spec:
1466314663
- Local
1466414664
maxLength: 10
1466514665
type: string
14666+
ipFamilies:
14667+
items:
14668+
description: |-
14669+
IPFamily represents the IP Family (IPv4 or IPv6). This type is used
14670+
to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
14671+
enum:
14672+
- IPv4
14673+
- IPv6
14674+
type: string
14675+
type: array
14676+
ipFamilyPolicy:
14677+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
14678+
enum:
14679+
- SingleStack
14680+
- PreferDualStack
14681+
- RequireDualStack
14682+
type: string
1466614683
metadata:
1466714684
description: Metadata contains metadata for custom resources
1466814685
properties:
@@ -15005,6 +15022,23 @@ spec:
1500515022
- Local
1500615023
maxLength: 10
1500715024
type: string
15025+
ipFamilies:
15026+
items:
15027+
description: |-
15028+
IPFamily represents the IP Family (IPv4 or IPv6). This type is used
15029+
to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
15030+
enum:
15031+
- IPv4
15032+
- IPv6
15033+
type: string
15034+
type: array
15035+
ipFamilyPolicy:
15036+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
15037+
enum:
15038+
- SingleStack
15039+
- PreferDualStack
15040+
- RequireDualStack
15041+
type: string
1500815042
metadata:
1500915043
description: Metadata contains metadata for custom resources
1501015044
properties:
@@ -15053,6 +15087,23 @@ spec:
1505315087
- Local
1505415088
maxLength: 10
1505515089
type: string
15090+
ipFamilies:
15091+
items:
15092+
description: |-
15093+
IPFamily represents the IP Family (IPv4 or IPv6). This type is used
15094+
to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
15095+
enum:
15096+
- IPv4
15097+
- IPv6
15098+
type: string
15099+
type: array
15100+
ipFamilyPolicy:
15101+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
15102+
enum:
15103+
- SingleStack
15104+
- PreferDualStack
15105+
- RequireDualStack
15106+
type: string
1505615107
metadata:
1505715108
description: Metadata contains metadata for custom resources
1505815109
properties:
@@ -16749,6 +16800,23 @@ spec:
1674916800
- Local
1675016801
maxLength: 10
1675116802
type: string
16803+
ipFamilies:
16804+
items:
16805+
description: |-
16806+
IPFamily represents the IP Family (IPv4 or IPv6). This type is used
16807+
to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies).
16808+
enum:
16809+
- IPv4
16810+
- IPv6
16811+
type: string
16812+
type: array
16813+
ipFamilyPolicy:
16814+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
16815+
enum:
16816+
- SingleStack
16817+
- PreferDualStack
16818+
- RequireDualStack
16819+
type: string
1675216820
metadata:
1675316821
description: Metadata contains metadata for custom resources
1675416822
properties:

internal/controller/postgrescluster/cluster.go

+9
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,15 @@ func (r *Reconciler) generateClusterReplicaService(
267267
}
268268
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
269269
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
270+
271+
// Set IPFamilyPolicy and IPFamilies
272+
if spec.IPFamilyPolicy != nil {
273+
service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy
274+
}
275+
if len(spec.IPFamilies) > 0 {
276+
service.Spec.IPFamilies = spec.IPFamilies
277+
}
278+
270279
}
271280
service.Spec.Ports = []corev1.ServicePort{servicePort}
272281

internal/controller/postgrescluster/patroni.go

+8
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,14 @@ func (r *Reconciler) generatePatroniLeaderLeaseService(
271271
}
272272
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
273273
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
274+
275+
// Set IPFamilyPolicy and IPFamilies
276+
if spec.IPFamilyPolicy != nil {
277+
service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy
278+
}
279+
if len(spec.IPFamilies) > 0 {
280+
service.Spec.IPFamilies = spec.IPFamilies
281+
}
274282
}
275283
service.Spec.Ports = []corev1.ServicePort{servicePort}
276284

internal/controller/postgrescluster/pgadmin.go

+8
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,14 @@ func (r *Reconciler) generatePGAdminService(
183183
}
184184
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
185185
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
186+
187+
// Set IPFamilyPolicy and IPFamilies
188+
if spec.IPFamilyPolicy != nil {
189+
service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy
190+
}
191+
if len(spec.IPFamilies) > 0 {
192+
service.Spec.IPFamilies = spec.IPFamilies
193+
}
186194
}
187195
service.Spec.Ports = []corev1.ServicePort{servicePort}
188196

internal/controller/postgrescluster/pgbouncer.go

+8
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,14 @@ func (r *Reconciler) generatePGBouncerService(
306306
}
307307
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
308308
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
309+
310+
// Set IPFamilyPolicy and IPFamilies
311+
if spec.IPFamilyPolicy != nil {
312+
service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy
313+
}
314+
if len(spec.IPFamilies) > 0 {
315+
service.Spec.IPFamilies = spec.IPFamilies
316+
}
309317
}
310318
service.Spec.Ports = []corev1.ServicePort{servicePort}
311319

pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go

+11
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type SchemalessObject map[string]any
2020
// DeepCopy creates a new SchemalessObject by copying the receiver.
2121
func (in SchemalessObject) DeepCopy() SchemalessObject {
2222
return runtime.DeepCopyJSON(in)
23+
2324
}
2425

2526
type ServiceSpec struct {
@@ -44,6 +45,16 @@ type ServiceSpec struct {
4445
// +kubebuilder:validation:Enum={ClusterIP,NodePort,LoadBalancer}
4546
Type string `json:"type"`
4647

48+
// More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/
49+
// ---
50+
// +optional
51+
// +kubebuilder:validation:Enum=SingleStack;PreferDualStack;RequireDualStack
52+
IPFamilyPolicy *corev1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"`
53+
54+
// +optional
55+
// +kubebuilder:validation:items:Enum={IPv4,IPv6}
56+
IPFamilies []corev1.IPFamily `json:"ipFamilies,omitempty"`
57+
4758
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies
4859
// ---
4960
// Kubernetes assumes the evaluation cost of an enum value is very large.

pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)