Skip to content

Commit 6834a1e

Browse files
authored
Merge pull request kubernetes#126293 from aroradaman/kube-proxy-refactor-internal-config
Kube proxy refactor internal config
2 parents 9c2302d + 3d589bd commit 6834a1e

File tree

17 files changed

+564
-431
lines changed

17 files changed

+564
-431
lines changed

cmd/kube-proxy/app/options.go

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"os"
2323
"strings"
24+
"time"
2425

2526
"github.com/fsnotify/fsnotify"
2627
"github.com/spf13/pflag"
@@ -79,6 +80,14 @@ type Options struct {
7980
hostnameOverride string
8081

8182
logger klog.Logger
83+
84+
// The fields below here are placeholders for flags that can't be directly mapped into
85+
// config.KubeProxyConfiguration.
86+
iptablesSyncPeriod time.Duration
87+
iptablesMinSyncPeriod time.Duration
88+
ipvsSyncPeriod time.Duration
89+
ipvsMinSyncPeriod time.Duration
90+
clusterCIDRs string
8291
}
8392

8493
// AddFlags adds flags to fs and binds them to options.
@@ -120,11 +129,11 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
120129
fs.Int32Var(o.config.IPTables.MasqueradeBit, "iptables-masquerade-bit", ptr.Deref(o.config.IPTables.MasqueradeBit, 14), "If using the iptables or ipvs proxy mode, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31].")
121130
fs.BoolVar(&o.config.Linux.MasqueradeAll, "masquerade-all", o.config.Linux.MasqueradeAll, "SNAT all traffic sent via Service cluster IPs. This may be required with some CNI plugins. Only supported on Linux.")
122131
fs.BoolVar(o.config.IPTables.LocalhostNodePorts, "iptables-localhost-nodeports", ptr.Deref(o.config.IPTables.LocalhostNodePorts, true), "If false, kube-proxy will disable the legacy behavior of allowing NodePort services to be accessed via localhost. (Applies only to iptables mode and IPv4; localhost NodePorts are never allowed with other proxy modes or with IPv6.)")
123-
fs.DurationVar(&o.config.IPTables.SyncPeriod.Duration, "iptables-sync-period", o.config.IPTables.SyncPeriod.Duration, "An interval (e.g. '5s', '1m', '2h22m') indicating how frequently various re-synchronizing and cleanup operations are performed. Must be greater than 0.")
124-
fs.DurationVar(&o.config.IPTables.MinSyncPeriod.Duration, "iptables-min-sync-period", o.config.IPTables.MinSyncPeriod.Duration, "The minimum period between iptables rule resyncs (e.g. '5s', '1m', '2h22m'). A value of 0 means every Service or EndpointSlice change will result in an immediate iptables resync.")
132+
fs.DurationVar(&o.iptablesSyncPeriod, "iptables-sync-period", o.config.SyncPeriod.Duration, "An interval (e.g. '5s', '1m', '2h22m') indicating how frequently various re-synchronizing and cleanup operations are performed. Must be greater than 0.")
133+
fs.DurationVar(&o.iptablesMinSyncPeriod, "iptables-min-sync-period", o.config.MinSyncPeriod.Duration, "The minimum period between iptables rule resyncs (e.g. '5s', '1m', '2h22m'). A value of 0 means every Service or EndpointSlice change will result in an immediate iptables resync.")
125134

126-
fs.DurationVar(&o.config.IPVS.SyncPeriod.Duration, "ipvs-sync-period", o.config.IPVS.SyncPeriod.Duration, "An interval (e.g. '5s', '1m', '2h22m') indicating how frequently various re-synchronizing and cleanup operations are performed. Must be greater than 0.")
127-
fs.DurationVar(&o.config.IPVS.MinSyncPeriod.Duration, "ipvs-min-sync-period", o.config.IPVS.MinSyncPeriod.Duration, "The minimum period between IPVS rule resyncs (e.g. '5s', '1m', '2h22m'). A value of 0 means every Service or EndpointSlice change will result in an immediate IPVS resync.")
135+
fs.DurationVar(&o.ipvsSyncPeriod, "ipvs-sync-period", o.config.SyncPeriod.Duration, "An interval (e.g. '5s', '1m', '2h22m') indicating how frequently various re-synchronizing and cleanup operations are performed. Must be greater than 0.")
136+
fs.DurationVar(&o.ipvsMinSyncPeriod, "ipvs-min-sync-period", o.config.MinSyncPeriod.Duration, "The minimum period between IPVS rule resyncs (e.g. '5s', '1m', '2h22m'). A value of 0 means every Service or EndpointSlice change will result in an immediate IPVS resync.")
128137
fs.StringVar(&o.config.IPVS.Scheduler, "ipvs-scheduler", o.config.IPVS.Scheduler, "The ipvs scheduler type when proxy mode is ipvs")
129138
fs.StringSliceVar(&o.config.IPVS.ExcludeCIDRs, "ipvs-exclude-cidrs", o.config.IPVS.ExcludeCIDRs, "A comma-separated list of CIDRs which the ipvs proxier should not touch when cleaning up IPVS rules.")
130139
fs.BoolVar(&o.config.IPVS.StrictARP, "ipvs-strict-arp", o.config.IPVS.StrictARP, "Enable strict ARP by setting arp_ignore to 1 and arp_announce to 2")
@@ -135,7 +144,7 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
135144
fs.Var(&o.config.DetectLocalMode, "detect-local-mode", "Mode to use to detect local traffic. This parameter is ignored if a config file is specified by --config.")
136145
fs.StringVar(&o.config.DetectLocal.BridgeInterface, "pod-bridge-interface", o.config.DetectLocal.BridgeInterface, "A bridge interface name. When --detect-local-mode is set to BridgeInterface, kube-proxy will consider traffic to be local if it originates from this bridge.")
137146
fs.StringVar(&o.config.DetectLocal.InterfaceNamePrefix, "pod-interface-name-prefix", o.config.DetectLocal.InterfaceNamePrefix, "An interface name prefix. When --detect-local-mode is set to InterfaceNamePrefix, kube-proxy will consider traffic to be local if it originates from any interface whose name begins with this prefix.")
138-
fs.StringVar(&o.config.ClusterCIDR, "cluster-cidr", o.config.ClusterCIDR, "The CIDR range of the pods in the cluster. (For dual-stack clusters, this can be a comma-separated dual-stack pair of CIDR ranges.). When --detect-local-mode is set to ClusterCIDR, kube-proxy will consider traffic to be local if its source IP is in this range. (Otherwise it is not used.) "+
147+
fs.StringVar(&o.clusterCIDRs, "cluster-cidr", strings.Join(o.config.DetectLocal.ClusterCIDRs, ","), "The CIDR range of the pods in the cluster. (For dual-stack clusters, this can be a comma-separated dual-stack pair of CIDR ranges.). When --detect-local-mode is set to ClusterCIDR, kube-proxy will consider traffic to be local if its source IP is in this range. (Otherwise it is not used.) "+
139148
"This parameter is ignored if a config file is specified by --config.")
140149

141150
fs.StringSliceVar(&o.config.NodePortAddresses, "nodeport-addresses", o.config.NodePortAddresses,
@@ -161,8 +170,6 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
161170
_ = fs.MarkDeprecated("healthz-port", "This flag is deprecated and will be removed in a future release. Please use --healthz-bind-address instead.")
162171
fs.Int32Var(&o.metricsPort, "metrics-port", o.metricsPort, "The port to bind the metrics server. Use 0 to disable.")
163172
_ = fs.MarkDeprecated("metrics-port", "This flag is deprecated and will be removed in a future release. Please use --metrics-bind-address instead.")
164-
fs.Var(utilflag.PortRangeVar{Val: &o.config.PortRange}, "proxy-port-range", "This was previously used to configure the userspace proxy, but is now unused.")
165-
_ = fs.MarkDeprecated("proxy-port-range", "This flag has no effect and will be removed in a future release.")
166173

167174
logsapi.AddFlags(&o.config.Logging, fs)
168175
}
@@ -216,6 +223,8 @@ func (o *Options) Complete(fs *pflag.FlagSet) error {
216223
if err := o.initWatcher(); err != nil {
217224
return err
218225
}
226+
} else {
227+
o.processV1Alpha1Flags(fs)
219228
}
220229

221230
o.platformApplyDefaults(o.config)
@@ -302,6 +311,25 @@ func (o *Options) processHostnameOverrideFlag() error {
302311
return nil
303312
}
304313

314+
// processV1Alpha1Flags processes v1alpha1 flags which can't be directly mapped to internal config.
315+
func (o *Options) processV1Alpha1Flags(fs *pflag.FlagSet) {
316+
if fs.Changed("iptables-sync-period") && o.config.Mode != kubeproxyconfig.ProxyModeIPVS {
317+
o.config.SyncPeriod.Duration = o.iptablesSyncPeriod
318+
}
319+
if fs.Changed("iptables-min-sync-period") && o.config.Mode != kubeproxyconfig.ProxyModeIPVS {
320+
o.config.MinSyncPeriod.Duration = o.iptablesMinSyncPeriod
321+
}
322+
if fs.Changed("ipvs-sync-period") && o.config.Mode == kubeproxyconfig.ProxyModeIPVS {
323+
o.config.SyncPeriod.Duration = o.ipvsSyncPeriod
324+
}
325+
if fs.Changed("ipvs-min-sync-period") && o.config.Mode == kubeproxyconfig.ProxyModeIPVS {
326+
o.config.MinSyncPeriod.Duration = o.ipvsMinSyncPeriod
327+
}
328+
if fs.Changed("cluster-cidr") {
329+
o.config.DetectLocal.ClusterCIDRs = strings.Split(o.clusterCIDRs, ",")
330+
}
331+
}
332+
305333
// Validate validates all the required options.
306334
func (o *Options) Validate() error {
307335
if errs := validation.Validate(o.config); len(errs) != 0 {

cmd/kube-proxy/app/options_test.go

Lines changed: 99 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"fmt"
2121
"os"
2222
"path"
23+
"reflect"
24+
"strings"
2325
"testing"
2426
"time"
2527

@@ -194,7 +196,8 @@ nodePortAddresses:
194196
Kubeconfig: "/path/to/kubeconfig",
195197
QPS: 7,
196198
},
197-
ClusterCIDR: tc.clusterCIDR,
199+
MinSyncPeriod: metav1.Duration{Duration: 10 * time.Second},
200+
SyncPeriod: metav1.Duration{Duration: 60 * time.Second},
198201
ConfigSyncPeriod: metav1.Duration{Duration: 15 * time.Second},
199202
Linux: kubeproxyconfig.KubeProxyLinuxConfiguration{
200203
Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
@@ -212,26 +215,20 @@ nodePortAddresses:
212215
IPTables: kubeproxyconfig.KubeProxyIPTablesConfiguration{
213216
MasqueradeBit: ptr.To[int32](17),
214217
LocalhostNodePorts: ptr.To(true),
215-
MinSyncPeriod: metav1.Duration{Duration: 10 * time.Second},
216-
SyncPeriod: metav1.Duration{Duration: 60 * time.Second},
217218
},
218219
IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
219-
MinSyncPeriod: metav1.Duration{Duration: 10 * time.Second},
220-
SyncPeriod: metav1.Duration{Duration: 60 * time.Second},
221-
ExcludeCIDRs: []string{"10.20.30.40/16", "fd00:1::0/64"},
220+
ExcludeCIDRs: []string{"10.20.30.40/16", "fd00:1::0/64"},
222221
},
223222
NFTables: kubeproxyconfig.KubeProxyNFTablesConfiguration{
224223
MasqueradeBit: ptr.To[int32](18),
225-
MinSyncPeriod: metav1.Duration{Duration: 10 * time.Second},
226-
SyncPeriod: metav1.Duration{Duration: 60 * time.Second},
227224
},
228225
MetricsBindAddress: tc.metricsBindAddress,
229226
Mode: kubeproxyconfig.ProxyMode(tc.mode),
230-
PortRange: "2-7",
231227
NodePortAddresses: []string{"10.20.30.40/16", "fd00:1::0/64"},
232228
DetectLocalMode: kubeproxyconfig.LocalModeClusterCIDR,
233229
DetectLocal: kubeproxyconfig.DetectLocalConfiguration{
234230
BridgeInterface: "cbr0",
231+
ClusterCIDRs: strings.Split(tc.clusterCIDR, ","),
235232
InterfaceNamePrefix: "veth",
236233
},
237234
Logging: logsapi.LoggingConfiguration{
@@ -377,6 +374,99 @@ func TestProcessHostnameOverrideFlag(t *testing.T) {
377374
}
378375
}
379376

377+
// TestProcessV1Alpha1Flags tests processing v1alpha1 flags.
378+
func TestProcessV1Alpha1Flags(t *testing.T) {
379+
testCases := []struct {
380+
name string
381+
flags []string
382+
validate func(*kubeproxyconfig.KubeProxyConfiguration) bool
383+
}{
384+
{
385+
name: "iptables configuration",
386+
flags: []string{
387+
"--iptables-sync-period=36s",
388+
"--iptables-min-sync-period=3s",
389+
"--proxy-mode=iptables",
390+
},
391+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
392+
return config.SyncPeriod == metav1.Duration{Duration: 36 * time.Second} &&
393+
config.MinSyncPeriod == metav1.Duration{Duration: 3 * time.Second}
394+
},
395+
},
396+
{
397+
name: "iptables + ipvs configuration with iptables mode",
398+
flags: []string{
399+
"--iptables-sync-period=36s",
400+
"--iptables-min-sync-period=3s",
401+
"--ipvs-sync-period=16s",
402+
"--ipvs-min-sync-period=7s",
403+
"--proxy-mode=iptables",
404+
},
405+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
406+
return config.SyncPeriod == metav1.Duration{Duration: 36 * time.Second} &&
407+
config.MinSyncPeriod == metav1.Duration{Duration: 3 * time.Second}
408+
},
409+
},
410+
{
411+
name: "winkernel configuration",
412+
flags: []string{
413+
"--iptables-sync-period=36s",
414+
"--iptables-min-sync-period=3s",
415+
"--proxy-mode=kernelspace",
416+
},
417+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
418+
return config.SyncPeriod == metav1.Duration{Duration: 36 * time.Second} &&
419+
config.MinSyncPeriod == metav1.Duration{Duration: 3 * time.Second}
420+
},
421+
},
422+
{
423+
name: "ipvs + iptables configuration with ipvs mode",
424+
flags: []string{
425+
"--iptables-sync-period=36s",
426+
"--iptables-min-sync-period=3s",
427+
"--ipvs-sync-period=16s",
428+
"--ipvs-min-sync-period=7s",
429+
"--proxy-mode=ipvs",
430+
},
431+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
432+
return config.SyncPeriod == metav1.Duration{Duration: 16 * time.Second} &&
433+
config.MinSyncPeriod == metav1.Duration{Duration: 7 * time.Second}
434+
},
435+
},
436+
{
437+
name: "ipvs configuration",
438+
flags: []string{
439+
"--ipvs-sync-period=16s",
440+
"--ipvs-min-sync-period=7s",
441+
"--proxy-mode=ipvs",
442+
},
443+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
444+
return config.SyncPeriod == metav1.Duration{Duration: 16 * time.Second} &&
445+
config.MinSyncPeriod == metav1.Duration{Duration: 7 * time.Second}
446+
},
447+
},
448+
{
449+
name: "cluster cidr",
450+
flags: []string{
451+
"--cluster-cidr=2002:0:0:1234::/64,10.0.0.0/14",
452+
},
453+
validate: func(config *kubeproxyconfig.KubeProxyConfiguration) bool {
454+
return reflect.DeepEqual(config.DetectLocal.ClusterCIDRs, []string{"2002:0:0:1234::/64", "10.0.0.0/14"})
455+
},
456+
},
457+
}
458+
for _, tc := range testCases {
459+
t.Run(tc.name, func(t *testing.T) {
460+
options := NewOptions()
461+
fs := new(pflag.FlagSet)
462+
options.AddFlags(fs)
463+
require.NoError(t, fs.Parse(tc.flags))
464+
options.processV1Alpha1Flags(fs)
465+
require.True(t, tc.validate(options.config))
466+
})
467+
}
468+
}
469+
380470
// TestOptionsComplete checks that command line flags are combined with a
381471
// config properly.
382472
func TestOptionsComplete(t *testing.T) {

cmd/kube-proxy/app/server.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"net"
2626
"net/http"
2727
"os"
28-
"strings"
2928
"time"
3029

3130
"github.com/spf13/cobra"
@@ -222,7 +221,7 @@ func newProxyServer(ctx context.Context, config *kubeproxyconfig.KubeProxyConfig
222221
}
223222

224223
if len(config.HealthzBindAddress) > 0 {
225-
s.HealthzServer = healthcheck.NewProxierHealthServer(config.HealthzBindAddress, 2*config.IPTables.SyncPeriod.Duration)
224+
s.HealthzServer = healthcheck.NewProxierHealthServer(config.HealthzBindAddress, 2*config.SyncPeriod.Duration)
226225
}
227226

228227
err = s.platformSetup(ctx)
@@ -271,8 +270,7 @@ func checkBadConfig(s *ProxyServer) error {
271270
// we can at least take note of whether there is any explicitly-dual-stack
272271
// configuration.
273272
anyDualStackConfig := false
274-
clusterCIDRs := strings.Split(s.Config.ClusterCIDR, ",")
275-
for _, config := range [][]string{clusterCIDRs, s.Config.NodePortAddresses, s.Config.IPVS.ExcludeCIDRs, s.podCIDRs} {
273+
for _, config := range [][]string{s.Config.DetectLocal.ClusterCIDRs, s.Config.NodePortAddresses, s.Config.IPVS.ExcludeCIDRs, s.podCIDRs} {
276274
if dual, _ := netutils.IsDualStackCIDRStrings(config); dual {
277275
anyDualStackConfig = true
278276
break
@@ -314,14 +312,11 @@ func checkBadIPConfig(s *ProxyServer, dualStackSupported bool) (err error, fatal
314312
clusterType = fmt.Sprintf("%s-only", s.PrimaryIPFamily)
315313
}
316314

317-
if s.Config.ClusterCIDR != "" {
318-
clusterCIDRs := strings.Split(s.Config.ClusterCIDR, ",")
319-
if badCIDRs(clusterCIDRs, badFamily) {
320-
errors = append(errors, fmt.Errorf("cluster is %s but clusterCIDRs contains only IPv%s addresses", clusterType, badFamily))
321-
if s.Config.DetectLocalMode == kubeproxyconfig.LocalModeClusterCIDR && !dualStackSupported {
322-
// This has always been a fatal error
323-
fatal = true
324-
}
315+
if badCIDRs(s.Config.DetectLocal.ClusterCIDRs, badFamily) {
316+
errors = append(errors, fmt.Errorf("cluster is %s but clusterCIDRs contains only IPv%s addresses", clusterType, badFamily))
317+
if s.Config.DetectLocalMode == kubeproxyconfig.LocalModeClusterCIDR && !dualStackSupported {
318+
// This has always been a fatal error
319+
fatal = true
325320
}
326321
}
327322

cmd/kube-proxy/app/server_linux.go

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"errors"
2727
"fmt"
2828
goruntime "runtime"
29-
"strings"
3029
"time"
3130

3231
"github.com/google/cadvisor/machine"
@@ -178,8 +177,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
178177
ipt,
179178
utilsysctl.New(),
180179
exec.New(),
181-
config.IPTables.SyncPeriod.Duration,
182-
config.IPTables.MinSyncPeriod.Duration,
180+
config.SyncPeriod.Duration,
181+
config.MinSyncPeriod.Duration,
183182
config.Linux.MasqueradeAll,
184183
*config.IPTables.LocalhostNodePorts,
185184
int(*config.IPTables.MasqueradeBit),
@@ -202,8 +201,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
202201
iptInterface,
203202
utilsysctl.New(),
204203
exec.New(),
205-
config.IPTables.SyncPeriod.Duration,
206-
config.IPTables.MinSyncPeriod.Duration,
204+
config.SyncPeriod.Duration,
205+
config.MinSyncPeriod.Duration,
207206
config.Linux.MasqueradeAll,
208207
*config.IPTables.LocalhostNodePorts,
209208
int(*config.IPTables.MasqueradeBit),
@@ -238,8 +237,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
238237
ipsetInterface,
239238
utilsysctl.New(),
240239
execer,
241-
config.IPVS.SyncPeriod.Duration,
242-
config.IPVS.MinSyncPeriod.Duration,
240+
config.SyncPeriod.Duration,
241+
config.MinSyncPeriod.Duration,
243242
config.IPVS.ExcludeCIDRs,
244243
config.IPVS.StrictARP,
245244
config.IPVS.TCPTimeout.Duration,
@@ -266,8 +265,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
266265
ipsetInterface,
267266
utilsysctl.New(),
268267
execer,
269-
config.IPVS.SyncPeriod.Duration,
270-
config.IPVS.MinSyncPeriod.Duration,
268+
config.SyncPeriod.Duration,
269+
config.MinSyncPeriod.Duration,
271270
config.IPVS.ExcludeCIDRs,
272271
config.IPVS.StrictARP,
273272
config.IPVS.TCPTimeout.Duration,
@@ -295,8 +294,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
295294
// TODO this has side effects that should only happen when Run() is invoked.
296295
proxier, err = nftables.NewDualStackProxier(
297296
ctx,
298-
config.NFTables.SyncPeriod.Duration,
299-
config.NFTables.MinSyncPeriod.Duration,
297+
config.SyncPeriod.Duration,
298+
config.MinSyncPeriod.Duration,
300299
config.Linux.MasqueradeAll,
301300
int(*config.NFTables.MasqueradeBit),
302301
localDetectors,
@@ -313,8 +312,8 @@ func (s *ProxyServer) createProxier(ctx context.Context, config *proxyconfigapi.
313312
proxier, err = nftables.NewProxier(
314313
ctx,
315314
s.PrimaryIPFamily,
316-
config.NFTables.SyncPeriod.Duration,
317-
config.NFTables.MinSyncPeriod.Duration,
315+
config.SyncPeriod.Duration,
316+
config.MinSyncPeriod.Duration,
318317
config.Linux.MasqueradeAll,
319318
int(*config.NFTables.MasqueradeBit),
320319
localDetectors[s.PrimaryIPFamily],
@@ -477,12 +476,11 @@ func getLocalDetectors(logger klog.Logger, primaryIPFamily v1.IPFamily, config *
477476

478477
switch config.DetectLocalMode {
479478
case proxyconfigapi.LocalModeClusterCIDR:
480-
clusterCIDRs := strings.Split(strings.TrimSpace(config.ClusterCIDR), ",")
481-
for family, cidrs := range proxyutil.MapCIDRsByIPFamily(clusterCIDRs) {
479+
for family, cidrs := range proxyutil.MapCIDRsByIPFamily(config.DetectLocal.ClusterCIDRs) {
482480
localDetectors[family] = proxyutil.NewDetectLocalByCIDR(cidrs[0].String())
483481
}
484482
if !localDetectors[primaryIPFamily].IsImplemented() {
485-
logger.Info("Detect-local-mode set to ClusterCIDR, but no cluster CIDR specified for primary IP family", "ipFamily", primaryIPFamily, "clusterCIDR", config.ClusterCIDR)
483+
logger.Info("Detect-local-mode set to ClusterCIDR, but no cluster CIDR specified for primary IP family", "ipFamily", primaryIPFamily, "clusterCIDRs", config.DetectLocal.ClusterCIDRs)
486484
}
487485

488486
case proxyconfigapi.LocalModeNodeCIDR:

0 commit comments

Comments
 (0)