mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 07:27:21 +00:00
[kube-proxy/ipvs] Add flag to enable strict ARP
This commit is contained in:
@@ -55,6 +55,9 @@ type KubeProxyIPVSConfiguration struct {
|
||||
// excludeCIDRs is a list of CIDR's which the ipvs proxier should not touch
|
||||
// when cleaning up ipvs services.
|
||||
ExcludeCIDRs []string
|
||||
// strict ARP configure arp_ignore and arp_announce to avoid answering ARP queries
|
||||
// from kube-ipvs0 interface
|
||||
StrictARP bool
|
||||
}
|
||||
|
||||
// KubeProxyConntrackConfiguration contains conntrack settings for
|
||||
|
||||
@@ -226,6 +226,7 @@ func autoConvert_v1alpha1_KubeProxyIPVSConfiguration_To_config_KubeProxyIPVSConf
|
||||
out.MinSyncPeriod = in.MinSyncPeriod
|
||||
out.Scheduler = in.Scheduler
|
||||
out.ExcludeCIDRs = *(*[]string)(unsafe.Pointer(&in.ExcludeCIDRs))
|
||||
out.StrictARP = in.StrictARP
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -239,6 +240,7 @@ func autoConvert_config_KubeProxyIPVSConfiguration_To_v1alpha1_KubeProxyIPVSConf
|
||||
out.MinSyncPeriod = in.MinSyncPeriod
|
||||
out.Scheduler = in.Scheduler
|
||||
out.ExcludeCIDRs = *(*[]string)(unsafe.Pointer(&in.ExcludeCIDRs))
|
||||
out.StrictARP = in.StrictARP
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -194,7 +194,9 @@ type Proxier struct {
|
||||
syncPeriod time.Duration
|
||||
minSyncPeriod time.Duration
|
||||
// Values are CIDR's to exclude when cleaning up IPVS rules.
|
||||
excludeCIDRs []string
|
||||
excludeCIDRs []string
|
||||
// Set to true to set sysctls arp_ignore and arp_announce
|
||||
strictARP bool
|
||||
iptables utiliptables.Interface
|
||||
ipvs utilipvs.Interface
|
||||
ipset utilipset.Interface
|
||||
@@ -285,6 +287,7 @@ func NewProxier(ipt utiliptables.Interface,
|
||||
syncPeriod time.Duration,
|
||||
minSyncPeriod time.Duration,
|
||||
excludeCIDRs []string,
|
||||
strictARP bool,
|
||||
masqueradeAll bool,
|
||||
masqueradeBit int,
|
||||
clusterCIDR string,
|
||||
@@ -344,17 +347,19 @@ func NewProxier(ipt utiliptables.Interface,
|
||||
}
|
||||
}
|
||||
|
||||
// Set the arp_ignore sysctl we need for
|
||||
if val, _ := sysctl.GetSysctl(sysctlArpIgnore); val != 1 {
|
||||
if err := sysctl.SetSysctl(sysctlArpIgnore, 1); err != nil {
|
||||
return nil, fmt.Errorf("can't set sysctl %s: %v", sysctlArpIgnore, err)
|
||||
if strictARP {
|
||||
// Set the arp_ignore sysctl we need for
|
||||
if val, _ := sysctl.GetSysctl(sysctlArpIgnore); val != 1 {
|
||||
if err := sysctl.SetSysctl(sysctlArpIgnore, 1); err != nil {
|
||||
return nil, fmt.Errorf("can't set sysctl %s: %v", sysctlArpIgnore, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the arp_announce sysctl we need for
|
||||
if val, _ := sysctl.GetSysctl(sysctlArpAnnounce); val != 2 {
|
||||
if err := sysctl.SetSysctl(sysctlArpAnnounce, 2); err != nil {
|
||||
return nil, fmt.Errorf("can't set sysctl %s: %v", sysctlArpAnnounce, err)
|
||||
// Set the arp_announce sysctl we need for
|
||||
if val, _ := sysctl.GetSysctl(sysctlArpAnnounce); val != 2 {
|
||||
if err := sysctl.SetSysctl(sysctlArpAnnounce, 2); err != nil {
|
||||
return nil, fmt.Errorf("can't set sysctl %s: %v", sysctlArpAnnounce, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -155,6 +155,7 @@ func NewFakeProxier(ipt utiliptables.Interface, ipvs utilipvs.Interface, ipset u
|
||||
ipvs: ipvs,
|
||||
ipset: ipset,
|
||||
clusterCIDR: "10.0.0.0/24",
|
||||
strictARP: false,
|
||||
hostname: testHostname,
|
||||
portsMap: make(map[utilproxy.LocalPort]utilproxy.Closeable),
|
||||
portMapper: &fakePortOpener{[]*utilproxy.LocalPort{}},
|
||||
|
||||
Reference in New Issue
Block a user