• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubeovn / kube-ovn / 14967332477

12 May 2025 08:20AM UTC coverage: 21.616% (-0.1%) from 21.714%
14967332477

Pull #5110

github

zbb88888
use provider network default interface

Signed-off-by: zbb88888 <jmdxjsjgcxy@gmail.com>
Pull Request #5110: enable check vlan conflict

0 of 257 new or added lines in 6 files covered. (0.0%)

218 existing lines in 9 files now uncovered.

10254 of 47436 relevant lines covered (21.62%)

0.25 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/pkg/controller/config.go
1
package controller
2

3
import (
4
        "errors"
5
        "flag"
6
        "fmt"
7
        "os"
8
        "strings"
9
        "time"
10

11
        attachnetclientset "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/client/clientset/versioned"
12
        "github.com/spf13/pflag"
13
        extClientSet "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
14
        "k8s.io/client-go/kubernetes"
15
        "k8s.io/client-go/rest"
16
        "k8s.io/client-go/tools/clientcmd"
17
        "k8s.io/klog/v2"
18
        "kubevirt.io/client-go/kubecli"
19
        anpclientset "sigs.k8s.io/network-policy-api/pkg/client/clientset/versioned"
20

21
        clientset "github.com/kubeovn/kube-ovn/pkg/client/clientset/versioned"
22
        "github.com/kubeovn/kube-ovn/pkg/util"
23
)
24

25
// Configuration is the controller conf
26
type Configuration struct {
27
        OvnNbAddr              string
28
        OvnSbAddr              string
29
        OvnTimeout             int
30
        OvsDbConnectTimeout    int
31
        OvsDbConnectMaxRetry   int
32
        OvsDbInactivityTimeout int
33
        CustCrdRetryMaxDelay   int
34
        CustCrdRetryMinDelay   int
35
        KubeConfigFile         string
36
        KubeRestConfig         *rest.Config
37

38
        KubeClient      kubernetes.Interface
39
        KubeOvnClient   clientset.Interface
40
        AnpClient       anpclientset.Interface
41
        AttachNetClient attachnetclientset.Interface
42
        KubevirtClient  kubecli.KubevirtClient
43
        ExtClient       extClientSet.Interface
44

45
        KubeFactoryClient    kubernetes.Interface
46
        KubeOvnFactoryClient clientset.Interface
47

48
        DefaultLogicalSwitch      string
49
        DefaultCIDR               string
50
        DefaultGateway            string
51
        DefaultExcludeIps         string
52
        DefaultGatewayCheck       bool
53
        DefaultLogicalGateway     bool
54
        DefaultU2OInterconnection bool
55

56
        ClusterRouter     string
57
        NodeSwitch        string
58
        NodeSwitchCIDR    string
59
        NodeSwitchGateway string
60

61
        ServiceClusterIPRange string
62

63
        ClusterTCPLoadBalancer         string
64
        ClusterUDPLoadBalancer         string
65
        ClusterSctpLoadBalancer        string
66
        ClusterTCPSessionLoadBalancer  string
67
        ClusterUDPSessionLoadBalancer  string
68
        ClusterSctpSessionLoadBalancer string
69

70
        PodName      string
71
        PodNamespace string
72
        PodNicType   string
73

74
        WorkerNum       int
75
        PprofPort       int32
76
        EnablePprof     bool
77
        SecureServing   bool
78
        NodePgProbeTime int
79

80
        NetworkType             string
81
        DefaultProviderName     string
82
        DefaultHostInterface    string
83
        DefaultExchangeLinkName bool
84
        DefaultVlanName         string
85
        DefaultVlanID           int
86
        LsDnatModDlDst          bool
87
        LsCtSkipDstLportIPs     bool
88

89
        EnableLb                    bool
90
        EnableNP                    bool
91
        EnableEipSnat               bool
92
        EnableExternalVpc           bool
93
        EnableEcmp                  bool
94
        EnableKeepVMIP              bool
95
        EnableLbSvc                 bool
96
        EnableMetrics               bool
97
        EnableANP                   bool
98
        EnableOVNIPSec              bool
99
        EnableCheckVlanConflict     bool
100
        EnableLiveMigrationOptimize bool
101

102
        ExternalGatewaySwitch   string
103
        ExternalGatewayConfigNS string
104
        ExternalGatewayNet      string
105
        ExternalGatewayVlanID   int
106

107
        GCInterval      int
108
        InspectInterval int
109

110
        BfdMinTx      int
111
        BfdMinRx      int
112
        BfdDetectMult int
113

114
        NodeLocalDNSIPs []string
115

116
        // used to set vpc-egress-gateway image
117
        Image string
118
}
119

120
// ParseFlags parses cmd args then init kubeclient and conf
121
// TODO: validate configuration
122
func ParseFlags() (*Configuration, error) {
123
        var (
×
124
                argOvnNbAddr              = pflag.String("ovn-nb-addr", "", "ovn-nb address")
×
125
                argOvnSbAddr              = pflag.String("ovn-sb-addr", "", "ovn-sb address")
×
126
                argOvnTimeout             = pflag.Int("ovn-timeout", 60, "The seconds to wait ovn command timeout")
×
127
                argOvsDbConTimeout        = pflag.Int("ovsdb-con-timeout", 3, "The seconds to wait ovsdb connect timeout")
×
128
                argOvsDbConnectMaxRetry   = pflag.Int("ovsdb-con-maxretry", 60, "The maximum number of retries for connecting to ovsdb")
×
129
                argOvsDbInactivityTimeout = pflag.Int("ovsdb-inactivity-timeout", 10, "The seconds to wait ovsdb inactivity check timeout")
×
130
                argCustCrdRetryMinDelay   = pflag.Int("cust-crd-retry-min-delay", 1, "The min delay seconds between custom crd two retries")
×
131
                argCustCrdRetryMaxDelay   = pflag.Int("cust-crd-retry-max-delay", 20, "The max delay seconds between custom crd two retries")
×
132
                argKubeConfigFile         = pflag.String("kubeconfig", "", "Path to kubeconfig file with authorization and master location information. If not set use the inCluster token.")
×
133

×
134
                argDefaultLogicalSwitch  = pflag.String("default-ls", util.DefaultSubnet, "The default logical switch name")
×
135
                argDefaultCIDR           = pflag.String("default-cidr", "10.16.0.0/16", "Default CIDR for namespace with no logical switch annotation")
×
136
                argDefaultGateway        = pflag.String("default-gateway", "", "Default gateway for default-cidr (default the first ip in default-cidr)")
×
137
                argDefaultGatewayCheck   = pflag.Bool("default-gateway-check", true, "Check switch for the default subnet's gateway")
×
138
                argDefaultLogicalGateway = pflag.Bool("default-logical-gateway", false, "Create a logical gateway for the default subnet instead of using underlay gateway. Take effect only when the default subnet is in underlay mode. (default false)")
×
139
                argDefaultExcludeIps     = pflag.String("default-exclude-ips", "", "Exclude ips in default switch (default gateway address)")
×
140

×
141
                argDefaultU2OInterconnection = pflag.Bool("default-u2o-interconnection", false, "usage for underlay to overlay interconnection")
×
142

×
143
                argClusterRouter     = pflag.String("cluster-router", util.DefaultVpc, "The router name for cluster router")
×
144
                argNodeSwitch        = pflag.String("node-switch", "join", "The name of node gateway switch which help node to access pod network")
×
145
                argNodeSwitchCIDR    = pflag.String("node-switch-cidr", "100.64.0.0/16", "The cidr for node switch")
×
146
                argNodeSwitchGateway = pflag.String("node-switch-gateway", "", "The gateway for node switch (default the first ip in node-switch-cidr)")
×
147

×
148
                argServiceClusterIPRange = pflag.String("service-cluster-ip-range", "10.96.0.0/12", "The kubernetes service cluster ip range")
×
149

×
150
                argClusterTCPLoadBalancer         = pflag.String("cluster-tcp-loadbalancer", "cluster-tcp-loadbalancer", "The name for cluster tcp loadbalancer")
×
151
                argClusterUDPLoadBalancer         = pflag.String("cluster-udp-loadbalancer", "cluster-udp-loadbalancer", "The name for cluster udp loadbalancer")
×
152
                argClusterSctpLoadBalancer        = pflag.String("cluster-sctp-loadbalancer", "cluster-sctp-loadbalancer", "The name for cluster sctp loadbalancer")
×
153
                argClusterTCPSessionLoadBalancer  = pflag.String("cluster-tcp-session-loadbalancer", "cluster-tcp-session-loadbalancer", "The name for cluster tcp session loadbalancer")
×
154
                argClusterUDPSessionLoadBalancer  = pflag.String("cluster-udp-session-loadbalancer", "cluster-udp-session-loadbalancer", "The name for cluster udp session loadbalancer")
×
155
                argClusterSctpSessionLoadBalancer = pflag.String("cluster-sctp-session-loadbalancer", "cluster-sctp-session-loadbalancer", "The name for cluster sctp session loadbalancer")
×
156

×
157
                argWorkerNum       = pflag.Int("worker-num", 3, "The parallelism of each worker")
×
158
                argEnablePprof     = pflag.Bool("enable-pprof", false, "Enable pprof")
×
159
                argPprofPort       = pflag.Int32("pprof-port", 10660, "The port to get profiling data")
×
160
                argSecureServing   = pflag.Bool("secure-serving", false, "Enable secure serving")
×
161
                argNodePgProbeTime = pflag.Int("nodepg-probe-time", 1, "The probe interval for node port-group, the unit is minute")
×
162

×
163
                argNetworkType                 = pflag.String("network-type", util.NetworkTypeGeneve, "The ovn network type")
×
164
                argDefaultProviderName         = pflag.String("default-provider-name", "provider", "The vlan or vxlan type default provider interface name")
×
165
                argDefaultInterfaceName        = pflag.String("default-interface-name", "", "The default host interface name in the vlan/vxlan type")
×
166
                argDefaultExchangeLinkName     = pflag.Bool("default-exchange-link-name", false, "exchange link names of OVS bridge and the provider nic in the default provider-network")
×
167
                argDefaultVlanName             = pflag.String("default-vlan-name", "ovn-vlan", "The default vlan name")
×
168
                argDefaultVlanID               = pflag.Int("default-vlan-id", 1, "The default vlan id")
×
169
                argLsDnatModDlDst              = pflag.Bool("ls-dnat-mod-dl-dst", true, "Set ethernet destination address for DNAT on logical switch")
×
170
                argLsCtSkipDstLportIPs         = pflag.Bool("ls-ct-skip-dst-lport-ips", true, "Skip conntrack for direct traffic between lports")
×
171
                argPodNicType                  = pflag.String("pod-nic-type", "veth-pair", "The default pod network nic implementation type")
×
172
                argEnableLb                    = pflag.Bool("enable-lb", true, "Enable load balancer")
×
173
                argEnableNP                    = pflag.Bool("enable-np", true, "Enable network policy support")
×
174
                argEnableEipSnat               = pflag.Bool("enable-eip-snat", true, "Enable EIP and SNAT")
×
175
                argEnableExternalVpc           = pflag.Bool("enable-external-vpc", true, "Enable external vpc support")
×
176
                argEnableEcmp                  = pflag.Bool("enable-ecmp", false, "Enable ecmp route for centralized subnet")
×
177
                argKeepVMIP                    = pflag.Bool("keep-vm-ip", true, "Whether to keep ip for kubevirt pod when pod is rebuild")
×
178
                argEnableLbSvc                 = pflag.Bool("enable-lb-svc", false, "Whether to support loadbalancer service")
×
179
                argEnableMetrics               = pflag.Bool("enable-metrics", true, "Whether to support metrics query")
×
180
                argEnableANP                   = pflag.Bool("enable-anp", false, "Enable support for admin network policy and baseline admin network policy")
×
181
                argEnableOVNIPSec              = pflag.Bool("enable-ovn-ipsec", false, "Whether to enable ovn ipsec")
×
NEW
182
                argEnableCheckVlanConflict     = pflag.Bool("enable-check-vlan-conflict", false, "Whether to enable check vlan conflict")
×
183
                argEnableLiveMigrationOptimize = pflag.Bool("enable-live-migration-optimize", true, "Whether to enable kubevirt live migration optimize")
×
184

×
185
                argExternalGatewayConfigNS = pflag.String("external-gateway-config-ns", "kube-system", "The namespace of configmap external-gateway-config, default: kube-system")
×
186
                argExternalGatewaySwitch   = pflag.String("external-gateway-switch", "external", "The name of the external gateway switch which is a ovs bridge to provide external network, default: external")
×
187
                argExternalGatewayNet      = pflag.String("external-gateway-net", "external", "The name of the external network which mappings with an ovs bridge, default: external")
×
188
                argExternalGatewayVlanID   = pflag.Int("external-gateway-vlanid", 0, "The vlanId of port ln-ovn-external, default: 0")
×
189
                argNodeLocalDNSIP          = pflag.String("node-local-dns-ip", "", "Comma-separated string of nodelocal DNS ip addresses")
×
190

×
191
                argGCInterval      = pflag.Int("gc-interval", 360, "The interval between GC processes, default 360 seconds. If set to 0, GC will be disabled")
×
192
                argInspectInterval = pflag.Int("inspect-interval", 20, "The interval between inspect processes, default 20 seconds")
×
193

×
194
                argBfdMinTx      = pflag.Int("bfd-min-tx", 100, "This is the minimum interval, in milliseconds, ovn would like to use when transmitting BFD Control packets")
×
195
                argBfdMinRx      = pflag.Int("bfd-min-rx", 100, "This is the minimum interval, in milliseconds, between received BFD Control packets")
×
196
                argBfdDetectMult = pflag.Int("detect-mult", 3, "The negotiated transmit interval, multiplied by this value, provides the Detection Time for the receiving system in Asynchronous mode.")
×
197

×
198
                argImage = pflag.String("image", "", "The image for vpc-egress-gateway")
×
199
        )
×
200

×
201
        klogFlags := flag.NewFlagSet("klog", flag.ExitOnError)
×
202
        klog.InitFlags(klogFlags)
×
203

×
204
        // sync the glog and klog flags.
×
205
        pflag.CommandLine.VisitAll(func(f1 *pflag.Flag) {
×
206
                f2 := klogFlags.Lookup(f1.Name)
×
207
                if f2 != nil {
×
208
                        value := f1.Value.String()
×
209
                        if err := f2.Value.Set(value); err != nil {
×
210
                                util.LogFatalAndExit(err, "failed to set pflag")
×
211
                        }
×
212
                }
×
213
        })
×
214

215
        pflag.CommandLine.AddGoFlagSet(klogFlags)
216
        pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
217
        pflag.Parse()
×
218

×
219
        config := &Configuration{
×
220
                OvnNbAddr:                      *argOvnNbAddr,
×
221
                OvnSbAddr:                      *argOvnSbAddr,
×
222
                OvnTimeout:                     *argOvnTimeout,
×
223
                OvsDbConnectTimeout:            *argOvsDbConTimeout,
×
224
                OvsDbConnectMaxRetry:           *argOvsDbConnectMaxRetry,
×
225
                OvsDbInactivityTimeout:         *argOvsDbInactivityTimeout,
×
226
                CustCrdRetryMinDelay:           *argCustCrdRetryMinDelay,
×
227
                CustCrdRetryMaxDelay:           *argCustCrdRetryMaxDelay,
×
228
                KubeConfigFile:                 *argKubeConfigFile,
×
229
                DefaultLogicalSwitch:           *argDefaultLogicalSwitch,
×
230
                DefaultCIDR:                    *argDefaultCIDR,
×
231
                DefaultGateway:                 *argDefaultGateway,
×
232
                DefaultGatewayCheck:            *argDefaultGatewayCheck,
×
233
                DefaultLogicalGateway:          *argDefaultLogicalGateway,
×
234
                DefaultU2OInterconnection:      *argDefaultU2OInterconnection,
×
235
                DefaultExcludeIps:              *argDefaultExcludeIps,
×
236
                ClusterRouter:                  *argClusterRouter,
×
237
                NodeSwitch:                     *argNodeSwitch,
×
238
                NodeSwitchCIDR:                 *argNodeSwitchCIDR,
×
239
                NodeSwitchGateway:              *argNodeSwitchGateway,
×
240
                ServiceClusterIPRange:          *argServiceClusterIPRange,
×
241
                ClusterTCPLoadBalancer:         *argClusterTCPLoadBalancer,
×
242
                ClusterUDPLoadBalancer:         *argClusterUDPLoadBalancer,
×
243
                ClusterSctpLoadBalancer:        *argClusterSctpLoadBalancer,
×
244
                ClusterTCPSessionLoadBalancer:  *argClusterTCPSessionLoadBalancer,
×
245
                ClusterUDPSessionLoadBalancer:  *argClusterUDPSessionLoadBalancer,
×
246
                ClusterSctpSessionLoadBalancer: *argClusterSctpSessionLoadBalancer,
×
247
                WorkerNum:                      *argWorkerNum,
×
248
                EnablePprof:                    *argEnablePprof,
×
249
                PprofPort:                      *argPprofPort,
×
250
                SecureServing:                  *argSecureServing,
×
251
                NetworkType:                    *argNetworkType,
×
252
                DefaultVlanID:                  *argDefaultVlanID,
×
253
                LsDnatModDlDst:                 *argLsDnatModDlDst,
×
254
                LsCtSkipDstLportIPs:            *argLsCtSkipDstLportIPs,
×
255
                DefaultProviderName:            *argDefaultProviderName,
×
256
                DefaultHostInterface:           *argDefaultInterfaceName,
×
257
                DefaultExchangeLinkName:        *argDefaultExchangeLinkName,
×
258
                DefaultVlanName:                *argDefaultVlanName,
×
259
                PodName:                        os.Getenv("POD_NAME"),
×
260
                PodNamespace:                   os.Getenv("KUBE_NAMESPACE"),
×
261
                PodNicType:                     *argPodNicType,
×
262
                EnableLb:                       *argEnableLb,
×
263
                EnableNP:                       *argEnableNP,
×
264
                EnableEipSnat:                  *argEnableEipSnat,
×
265
                EnableExternalVpc:              *argEnableExternalVpc,
×
266
                ExternalGatewayConfigNS:        *argExternalGatewayConfigNS,
×
267
                ExternalGatewaySwitch:          *argExternalGatewaySwitch,
×
268
                ExternalGatewayNet:             *argExternalGatewayNet,
×
269
                ExternalGatewayVlanID:          *argExternalGatewayVlanID,
×
270
                EnableEcmp:                     *argEnableEcmp,
×
271
                EnableKeepVMIP:                 *argKeepVMIP,
×
272
                NodePgProbeTime:                *argNodePgProbeTime,
×
273
                GCInterval:                     *argGCInterval,
×
274
                InspectInterval:                *argInspectInterval,
×
275
                EnableLbSvc:                    *argEnableLbSvc,
×
276
                EnableMetrics:                  *argEnableMetrics,
×
277
                EnableOVNIPSec:                 *argEnableOVNIPSec,
×
NEW
278
                EnableCheckVlanConflict:        *argEnableCheckVlanConflict,
×
279
                EnableLiveMigrationOptimize:    *argEnableLiveMigrationOptimize,
×
280
                BfdMinTx:                       *argBfdMinTx,
×
281
                BfdMinRx:                       *argBfdMinRx,
×
282
                BfdDetectMult:                  *argBfdDetectMult,
×
283
                EnableANP:                      *argEnableANP,
×
284
                Image:                          *argImage,
×
285
        }
×
286

×
287
        if config.NetworkType == util.NetworkTypeVlan && config.DefaultHostInterface == "" {
×
288
                return nil, errors.New("no host nic for vlan")
×
289
        }
×
290

×
291
        if config.DefaultGateway == "" {
×
292
                gw, err := util.GetGwByCidr(config.DefaultCIDR)
×
293
                if err != nil {
294
                        klog.Error(err)
×
295
                        return nil, err
×
296
                }
×
297
                config.DefaultGateway = gw
×
298
        }
×
299

×
300
        if config.DefaultExcludeIps == "" {
×
301
                config.DefaultExcludeIps = config.DefaultGateway
302
        }
303

×
304
        if config.NodeSwitchGateway == "" {
×
305
                gw, err := util.GetGwByCidr(config.NodeSwitchCIDR)
×
306
                if err != nil {
307
                        klog.Error(err)
×
308
                        return nil, err
×
309
                }
×
310
                config.NodeSwitchGateway = gw
×
311
        }
×
312

×
313
        if err := config.initKubeClient(); err != nil {
×
314
                klog.Error(err)
315
                return nil, err
316
        }
×
317

×
318
        if err := config.initKubeFactoryClient(); err != nil {
×
319
                klog.Error(err)
×
320
                return nil, err
321
        }
×
322

×
323
        if err := util.CheckSystemCIDR([]string{config.NodeSwitchCIDR, config.DefaultCIDR, config.ServiceClusterIPRange}); err != nil {
×
324
                klog.Error(err)
×
325
                return nil, fmt.Errorf("check system cidr failed, %w", err)
326
        }
×
327

×
328
        for _, ip := range strings.Split(*argNodeLocalDNSIP, ",") {
×
329
                if err := util.CheckNodeDNSIP(ip); err != nil {
×
330
                        klog.Error(err)
331
                        return nil, err
×
332
                }
×
333
                config.NodeLocalDNSIPs = append(config.NodeLocalDNSIPs, ip)
×
334
        }
×
335

×
336
        klog.Infof("config is %+v", config)
×
337
        return config, nil
338
}
339

×
340
func (config *Configuration) initKubeClient() error {
×
341
        var cfg *rest.Config
342
        var err error
343
        if config.KubeConfigFile == "" {
×
344
                klog.Infof("no --kubeconfig, use in-cluster kubernetes config")
×
345
                cfg, err = rest.InClusterConfig()
×
346
        } else {
×
347
                cfg, err = clientcmd.BuildConfigFromFlags("", config.KubeConfigFile)
×
348
        }
×
349
        if err != nil {
×
350
                klog.Errorf("failed to build kubeconfig %v", err)
×
351
                return err
×
352
        }
×
353

×
354
        // try to connect to apiserver's tcp port
×
355
        if err = util.DialAPIServer(cfg.Host, 3*time.Second, 10); err != nil {
×
356
                klog.Errorf("failed to dial apiserver: %v", err)
357
                return err
358
        }
×
359

×
360
        cfg.QPS = 1000
×
361
        cfg.Burst = 2000
×
362
        // use cmd arg to modify timeout later
363
        cfg.Timeout = 30 * time.Second
×
364

×
365
        AttachNetClient, err := attachnetclientset.NewForConfig(cfg)
×
366
        if err != nil {
×
367
                klog.Errorf("init attach network client failed %v", err)
×
368
                return err
×
369
        }
×
370
        config.AttachNetClient = AttachNetClient
×
371

×
372
        // get the kubevirt client, using which kubevirt resources can be managed.
×
373
        virtClient, err := kubecli.GetKubevirtClientFromRESTConfig(cfg)
×
374
        if err != nil {
×
375
                klog.Errorf("init kubevirt client failed %v", err)
×
376
                return err
×
377
        }
×
378
        config.KubevirtClient = virtClient
×
379

×
380
        AnpClient, err := anpclientset.NewForConfig(cfg)
×
381
        if err != nil {
×
382
                klog.Errorf("init admin network policy client failed %v", err)
×
383
                return err
×
384
        }
×
385
        config.AnpClient = AnpClient
×
386

×
387
        kubeOvnClient, err := clientset.NewForConfig(cfg)
×
388
        if err != nil {
×
389
                klog.Errorf("init kubeovn client failed %v", err)
×
390
                return err
×
391
        }
×
392
        config.KubeOvnClient = kubeOvnClient
×
393

×
394
        ExtClient, err := extClientSet.NewForConfig(cfg)
×
395
        if err != nil {
×
396
                klog.Errorf("init extentsion client failed %v", err)
×
397
                return err
×
398
        }
×
399
        config.ExtClient = ExtClient
×
400

×
401
        cfg.ContentType = "application/vnd.kubernetes.protobuf"
×
402
        cfg.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json"
×
403
        kubeClient, err := kubernetes.NewForConfig(cfg)
×
404
        if err != nil {
×
405
                klog.Errorf("init kubernetes client failed %v", err)
×
406
                return err
×
407
        }
×
408
        config.KubeClient = kubeClient
×
409
        return nil
×
410
}
×
411

×
412
func (config *Configuration) initKubeFactoryClient() error {
×
413
        var cfg *rest.Config
414
        var err error
415
        if config.KubeConfigFile == "" {
×
416
                klog.Infof("no --kubeconfig, use in-cluster kubernetes config")
×
417
                cfg, err = rest.InClusterConfig()
×
418
        } else {
×
419
                cfg, err = clientcmd.BuildConfigFromFlags("", config.KubeConfigFile)
×
420
        }
×
421
        if err != nil {
×
422
                klog.Errorf("failed to build kubeconfig %v", err)
×
423
                return err
×
424
        }
×
425
        cfg.QPS = 1000
×
426
        cfg.Burst = 2000
×
427

×
428
        config.KubeRestConfig = cfg
×
429

×
430
        kubeOvnClient, err := clientset.NewForConfig(cfg)
×
431
        if err != nil {
×
432
                klog.Errorf("init kubeovn client failed %v", err)
×
433
                return err
×
434
        }
×
435
        config.KubeOvnFactoryClient = kubeOvnClient
×
436

×
437
        cfg.ContentType = "application/vnd.kubernetes.protobuf"
×
438
        cfg.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json"
×
439
        kubeClient, err := kubernetes.NewForConfig(cfg)
×
440
        if err != nil {
×
441
                klog.Errorf("init kubernetes client failed %v", err)
×
442
                return err
×
443
        }
×
444
        config.KubeFactoryClient = kubeClient
×
445
        return nil
×
446
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc