Skip to content

Commit 655d5ff

Browse files
committed
support disable arp check ip conflict in vlan provider network (#2760)
1 parent a5720d6 commit 655d5ff

File tree

3 files changed

+68
-63
lines changed

3 files changed

+68
-63
lines changed

dist/images/install.sh

100755100644
+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ ENABLE_EXTERNAL_VPC=${ENABLE_EXTERNAL_VPC:-true}
1919
CNI_CONFIG_PRIORITY=${CNI_CONFIG_PRIORITY:-01}
2020
ENABLE_LB_SVC=${ENABLE_LB_SVC:-false}
2121
ENABLE_KEEP_VM_IP=${ENABLE_KEEP_VM_IP:-true}
22+
2223
# exchange link names of OVS bridge and the provider nic
2324
# in the default provider-network
2425
EXCHANGE_LINK_NAME=${EXCHANGE_LINK_NAME:-false}

pkg/daemon/config.go

+64-61
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,35 @@ import (
2929
// Configuration is the daemon conf
3030
type Configuration struct {
3131
// interface being used for tunnel
32-
tunnelIface string
33-
Iface string
34-
DPDKTunnelIface string
35-
MTU int
36-
MSS int
37-
EnableMirror bool
38-
MirrorNic string
39-
BindSocket string
40-
OvsSocket string
41-
KubeConfigFile string
42-
KubeClient kubernetes.Interface
43-
KubeOvnClient clientset.Interface
44-
NodeName string
45-
ServiceClusterIPRange string
46-
NodeLocalDnsIP string
47-
EncapChecksum bool
48-
EnablePprof bool
49-
MacLearningFallback bool
50-
PprofPort int
51-
NetworkType string
52-
CniConfDir string
53-
CniConfFile string
54-
CniConfName string
55-
DefaultProviderName string
56-
DefaultInterfaceName string
57-
ExternalGatewayConfigNS string
58-
ExternalGatewaySwitch string // provider network underlay vlan subnet
59-
EnableMetrics bool
32+
tunnelIface string
33+
Iface string
34+
DPDKTunnelIface string
35+
MTU int
36+
MSS int
37+
EnableMirror bool
38+
MirrorNic string
39+
BindSocket string
40+
OvsSocket string
41+
KubeConfigFile string
42+
KubeClient kubernetes.Interface
43+
KubeOvnClient clientset.Interface
44+
NodeName string
45+
ServiceClusterIPRange string
46+
NodeLocalDnsIP string
47+
EncapChecksum bool
48+
EnablePprof bool
49+
MacLearningFallback bool
50+
PprofPort int
51+
NetworkType string
52+
CniConfDir string
53+
CniConfFile string
54+
CniConfName string
55+
DefaultProviderName string
56+
DefaultInterfaceName string
57+
ExternalGatewayConfigNS string
58+
ExternalGatewaySwitch string // provider network underlay vlan subnet
59+
EnableMetrics bool
60+
EnableArpDetectIPConflict bool
6061
}
6162

6263
// ParseFlags will parse cmd args then init kubeClient and configuration
@@ -79,15 +80,16 @@ func ParseFlags() *Configuration {
7980
argPprofPort = pflag.Int("pprof-port", 10665, "The port to get profiling data")
8081
argMacLearningFallback = pflag.Bool("mac-learning-fallback", false, "Fallback to the legacy MAC learning mode")
8182

82-
argsNetworkType = pflag.String("network-type", util.NetworkTypeGeneve, "Tunnel encapsulation protocol in overlay networks")
83-
argCniConfDir = pflag.String("cni-conf-dir", "/etc/cni/net.d", "Path of the CNI config directory.")
84-
argCniConfFile = pflag.String("cni-conf-file", "/kube-ovn/01-kube-ovn.conflist", "Path of the CNI config file.")
85-
argsCniConfName = pflag.String("cni-conf-name", "01-kube-ovn.conflist", "Specify the name of kube ovn conflist name in dir /etc/cni/net.d/, default: 01-kube-ovn.conflist")
86-
argsDefaultProviderName = pflag.String("default-provider-name", "provider", "The vlan or vxlan type default provider interface name")
87-
argsDefaultInterfaceName = pflag.String("default-interface-name", "", "The default host interface name in the vlan/vxlan type")
88-
argExternalGatewayConfigNS = pflag.String("external-gateway-config-ns", "kube-system", "The namespace of configmap external-gateway-config, default: kube-system")
89-
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")
90-
argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query")
83+
argsNetworkType = pflag.String("network-type", util.NetworkTypeGeneve, "Tunnel encapsulation protocol in overlay networks")
84+
argCniConfDir = pflag.String("cni-conf-dir", "/etc/cni/net.d", "Path of the CNI config directory.")
85+
argCniConfFile = pflag.String("cni-conf-file", "/kube-ovn/01-kube-ovn.conflist", "Path of the CNI config file.")
86+
argsCniConfName = pflag.String("cni-conf-name", "01-kube-ovn.conflist", "Specify the name of kube ovn conflist name in dir /etc/cni/net.d/, default: 01-kube-ovn.conflist")
87+
argsDefaultProviderName = pflag.String("default-provider-name", "provider", "The vlan or vxlan type default provider interface name")
88+
argsDefaultInterfaceName = pflag.String("default-interface-name", "", "The default host interface name in the vlan/vxlan type")
89+
argExternalGatewayConfigNS = pflag.String("external-gateway-config-ns", "kube-system", "The namespace of configmap external-gateway-config, default: kube-system")
90+
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")
91+
argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query")
92+
argEnableArpDetectIPConflict = pflag.Bool("enable-arp-detect-ip-conflict", true, "Whether to support arp detect ip conflict in vlan network")
9193
)
9294

9395
// mute info log for ipset lib
@@ -112,30 +114,31 @@ func ParseFlags() *Configuration {
112114
pflag.Parse()
113115

114116
config := &Configuration{
115-
Iface: *argIface,
116-
DPDKTunnelIface: *argDPDKTunnelIface,
117-
MTU: *argMTU,
118-
EnableMirror: *argEnableMirror,
119-
MirrorNic: *argMirrorNic,
120-
BindSocket: *argBindSocket,
121-
OvsSocket: *argOvsSocket,
122-
KubeConfigFile: *argKubeConfigFile,
123-
EnablePprof: *argEnablePprof,
124-
PprofPort: *argPprofPort,
125-
MacLearningFallback: *argMacLearningFallback,
126-
NodeName: strings.ToLower(*argNodeName),
127-
ServiceClusterIPRange: *argServiceClusterIPRange,
128-
NodeLocalDnsIP: *argNodeLocalDnsIP,
129-
EncapChecksum: *argEncapChecksum,
130-
NetworkType: *argsNetworkType,
131-
CniConfDir: *argCniConfDir,
132-
CniConfFile: *argCniConfFile,
133-
CniConfName: *argsCniConfName,
134-
DefaultProviderName: *argsDefaultProviderName,
135-
DefaultInterfaceName: *argsDefaultInterfaceName,
136-
ExternalGatewayConfigNS: *argExternalGatewayConfigNS,
137-
ExternalGatewaySwitch: *argExternalGatewaySwitch,
138-
EnableMetrics: *argEnableMetrics,
117+
Iface: *argIface,
118+
DPDKTunnelIface: *argDPDKTunnelIface,
119+
MTU: *argMTU,
120+
EnableMirror: *argEnableMirror,
121+
MirrorNic: *argMirrorNic,
122+
BindSocket: *argBindSocket,
123+
OvsSocket: *argOvsSocket,
124+
KubeConfigFile: *argKubeConfigFile,
125+
EnablePprof: *argEnablePprof,
126+
PprofPort: *argPprofPort,
127+
MacLearningFallback: *argMacLearningFallback,
128+
NodeName: strings.ToLower(*argNodeName),
129+
ServiceClusterIPRange: *argServiceClusterIPRange,
130+
NodeLocalDnsIP: *argNodeLocalDnsIP,
131+
EncapChecksum: *argEncapChecksum,
132+
NetworkType: *argsNetworkType,
133+
CniConfDir: *argCniConfDir,
134+
CniConfFile: *argCniConfFile,
135+
CniConfName: *argsCniConfName,
136+
DefaultProviderName: *argsDefaultProviderName,
137+
DefaultInterfaceName: *argsDefaultInterfaceName,
138+
ExternalGatewayConfigNS: *argExternalGatewayConfigNS,
139+
ExternalGatewaySwitch: *argExternalGatewaySwitch,
140+
EnableMetrics: *argEnableMetrics,
141+
EnableArpDetectIPConflict: *argEnableArpDetectIPConflict,
139142
}
140143
return config
141144
}

pkg/daemon/handler.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,11 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon
213213
u2oInterconnectionIP = podSubnet.Status.U2OInterconnectionIP
214214
}
215215

216-
detectIPConflict := podSubnet.Spec.Vlan != ""
216+
subnetHasVlan := podSubnet.Spec.Vlan != ""
217+
detectIPConflict := csh.Config.EnableArpDetectIPConflict && subnetHasVlan
217218
// skip ping check gateway for pods during live migration
218219
if pod.Annotations[fmt.Sprintf(util.LiveMigrationAnnotationTemplate, podRequest.Provider)] != "true" {
219-
if podSubnet.Spec.Vlan != "" && !podSubnet.Spec.LogicalGateway {
220+
if subnetHasVlan && !podSubnet.Spec.LogicalGateway {
220221
if podSubnet.Spec.DisableGatewayCheck {
221222
gatewayCheckMode = gatewayCheckModeArpingNotConcerned
222223
} else {

0 commit comments

Comments
 (0)