1
16
17 package v1alpha1
18
19 import (
20 "testing"
21 "time"
22
23 "k8s.io/utils/ptr"
24
25 "github.com/google/go-cmp/cmp"
26
27 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28 componentbaseconfig "k8s.io/component-base/config/v1alpha1"
29 logsapi "k8s.io/component-base/logs/api/v1"
30 kubeproxyconfigv1alpha1 "k8s.io/kube-proxy/config/v1alpha1"
31 )
32
33 func TestDefaultsKubeProxyConfiguration(t *testing.T) {
34 oomScore := int32(-999)
35 ctMaxPerCore := int32(32768)
36 ctMin := int32(131072)
37 testCases := []struct {
38 name string
39 original *kubeproxyconfigv1alpha1.KubeProxyConfiguration
40 expected *kubeproxyconfigv1alpha1.KubeProxyConfiguration
41 }{
42 {
43 name: "empty-config",
44 original: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{},
45 expected: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{
46 FeatureGates: map[string]bool{},
47 BindAddress: "0.0.0.0",
48 HealthzBindAddress: "0.0.0.0:10256",
49 MetricsBindAddress: "127.0.0.1:10249",
50 ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
51 ContentType: "application/vnd.kubernetes.protobuf",
52 QPS: 5,
53 Burst: 10,
54 },
55 IPTables: kubeproxyconfigv1alpha1.KubeProxyIPTablesConfiguration{
56 MasqueradeBit: ptr.To[int32](14),
57 MasqueradeAll: false,
58 LocalhostNodePorts: ptr.To(true),
59 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
60 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second},
61 },
62 IPVS: kubeproxyconfigv1alpha1.KubeProxyIPVSConfiguration{
63 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
64 },
65 NFTables: kubeproxyconfigv1alpha1.KubeProxyNFTablesConfiguration{
66 MasqueradeBit: ptr.To[int32](14),
67 MasqueradeAll: false,
68 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
69 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second},
70 },
71 OOMScoreAdj: &oomScore,
72 Conntrack: kubeproxyconfigv1alpha1.KubeProxyConntrackConfiguration{
73 MaxPerCore: &ctMaxPerCore,
74 Min: &ctMin,
75 TCPEstablishedTimeout: &metav1.Duration{Duration: 24 * time.Hour},
76 TCPCloseWaitTimeout: &metav1.Duration{Duration: 1 * time.Hour},
77 },
78 ConfigSyncPeriod: metav1.Duration{Duration: 15 * time.Minute},
79 Logging: logsapi.LoggingConfiguration{
80 Format: "text",
81 FlushFrequency: logsapi.TimeOrMetaDuration{Duration: metav1.Duration{Duration: 5 * time.Second}, SerializeAsString: true},
82 },
83 },
84 },
85 {
86 name: "metrics and healthz address with no port",
87 original: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{
88 MetricsBindAddress: "127.0.0.1",
89 HealthzBindAddress: "127.0.0.1",
90 },
91 expected: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{
92 FeatureGates: map[string]bool{},
93 BindAddress: "0.0.0.0",
94 HealthzBindAddress: "127.0.0.1:10256",
95 MetricsBindAddress: "127.0.0.1:10249",
96 ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
97 ContentType: "application/vnd.kubernetes.protobuf",
98 QPS: 5,
99 Burst: 10,
100 },
101 IPTables: kubeproxyconfigv1alpha1.KubeProxyIPTablesConfiguration{
102 MasqueradeBit: ptr.To[int32](14),
103 MasqueradeAll: false,
104 LocalhostNodePorts: ptr.To(true),
105 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
106 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second},
107 },
108 IPVS: kubeproxyconfigv1alpha1.KubeProxyIPVSConfiguration{
109 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
110 },
111 NFTables: kubeproxyconfigv1alpha1.KubeProxyNFTablesConfiguration{
112 MasqueradeBit: ptr.To[int32](14),
113 MasqueradeAll: false,
114 SyncPeriod: metav1.Duration{Duration: 30 * time.Second},
115 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second},
116 },
117 OOMScoreAdj: &oomScore,
118 Conntrack: kubeproxyconfigv1alpha1.KubeProxyConntrackConfiguration{
119 MaxPerCore: &ctMaxPerCore,
120 Min: &ctMin,
121 TCPEstablishedTimeout: &metav1.Duration{Duration: 24 * time.Hour},
122 TCPCloseWaitTimeout: &metav1.Duration{Duration: 1 * time.Hour},
123 },
124 ConfigSyncPeriod: metav1.Duration{Duration: 15 * time.Minute},
125 Logging: logsapi.LoggingConfiguration{
126 Format: "text",
127 FlushFrequency: logsapi.TimeOrMetaDuration{Duration: metav1.Duration{Duration: 5 * time.Second}, SerializeAsString: true},
128 },
129 },
130 },
131 }
132 for _, tc := range testCases {
133 t.Run(tc.name, func(t *testing.T) {
134 SetDefaults_KubeProxyConfiguration(tc.original)
135 if diff := cmp.Diff(tc.expected, tc.original); diff != "" {
136 t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff)
137 }
138 })
139 }
140 }
141
View as plain text