Skip to content

Commit fe27448

Browse files
authored
Merge pull request kubernetes#130833 from rzlink/master
Add Unit Tests for Windows DSR and Overlay Support
2 parents c766a52 + 6186303 commit fe27448

File tree

4 files changed

+431
-74
lines changed

4 files changed

+431
-74
lines changed

pkg/proxy/winkernel/hcnutils.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type HcnService interface {
4949
DsrSupported() error
5050
// Policy functions
5151
DeleteAllHnsLoadBalancerPolicy()
52+
RemoteSubnetSupported() error
5253
}
5354

5455
type hcnImpl struct{}
@@ -139,3 +140,7 @@ func (hcnObj hcnImpl) DeleteAllHnsLoadBalancerPolicy() {
139140
}
140141
}
141142
}
143+
144+
func (hcnObj hcnImpl) RemoteSubnetSupported() error {
145+
return hcn.RemoteSubnetSupported()
146+
}

pkg/proxy/winkernel/proxier.go

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ type KernelCompatTester interface {
5959
IsCompatible() error
6060
}
6161

62+
type HostMacProvider interface {
63+
GetHostMac(nodeIP net.IP) string
64+
}
65+
6266
// CanUseWinKernelProxier returns true if we should use the Kernel Proxier
6367
// instead of the "classic" userspace Proxier. This is determined by checking
6468
// the windows kernel version and for the existence of kernel features.
@@ -723,6 +727,41 @@ func NewProxier(
723727
}
724728

725729
hcnImpl := newHcnImpl()
730+
proxier, err := newProxierInternal(
731+
ipFamily,
732+
hostname,
733+
nodeIP,
734+
serviceHealthServer,
735+
healthzServer,
736+
healthzPort,
737+
hcnImpl,
738+
&localHostMacProvider{},
739+
config,
740+
true, // waitForHNSOverlay
741+
)
742+
if err != nil {
743+
return nil, err
744+
}
745+
746+
burstSyncs := 2
747+
klog.V(3).InfoS("Record sync param", "minSyncPeriod", minSyncPeriod, "syncPeriod", syncPeriod, "burstSyncs", burstSyncs)
748+
proxier.syncRunner = async.NewBoundedFrequencyRunner("sync-runner", proxier.syncProxyRules, minSyncPeriod, syncPeriod, burstSyncs)
749+
return proxier, nil
750+
}
751+
752+
// allow internal testing of proxier
753+
func newProxierInternal(
754+
ipFamily v1.IPFamily,
755+
hostname string,
756+
nodeIP net.IP,
757+
serviceHealthServer healthcheck.ServiceHealthServer,
758+
healthzServer *healthcheck.ProxyHealthServer,
759+
healthzPort int,
760+
hcnImpl HcnService,
761+
hostMacProvider HostMacProvider,
762+
config config.KubeProxyWinkernelConfiguration,
763+
waitForHNSOverlay bool,
764+
) (*Proxier, error) {
726765
hns, supportedFeatures := newHostNetworkService(hcnImpl)
727766
hnsNetworkName, err := getNetworkName(config.NetworkName)
728767
if err != nil {
@@ -741,7 +780,10 @@ func NewProxier(
741780
// Network could have been detected before Remote Subnet Routes are applied or ManagementIP is updated
742781
// Sleep and update the network to include new information
743782
if isOverlay(hnsNetworkInfo) {
744-
time.Sleep(10 * time.Second)
783+
if waitForHNSOverlay {
784+
time.Sleep(10 * time.Second)
785+
}
786+
745787
hnsNetworkInfo, err = hns.getNetworkByName(hnsNetworkName)
746788
if err != nil {
747789
return nil, fmt.Errorf("could not find HNS network %s", hnsNetworkName)
@@ -765,7 +807,7 @@ func NewProxier(
765807
if !utilfeature.DefaultFeatureGate.Enabled(kubefeatures.WinOverlay) {
766808
return nil, fmt.Errorf("WinOverlay feature gate not enabled")
767809
}
768-
err = hcn.RemoteSubnetSupported()
810+
err = hcnImpl.RemoteSubnetSupported()
769811
if err != nil {
770812
return nil, err
771813
}
@@ -783,17 +825,8 @@ func NewProxier(
783825
}
784826
}
785827

786-
interfaces, _ := net.Interfaces() //TODO create interfaces
787-
for _, inter := range interfaces {
788-
addresses, _ := inter.Addrs()
789-
for _, addr := range addresses {
790-
addrIP, _, _ := netutils.ParseCIDRSloppy(addr.String())
791-
if addrIP.String() == nodeIP.String() {
792-
klog.V(2).InfoS("Record Host MAC address", "addr", inter.HardwareAddr)
793-
hostMac = inter.HardwareAddr.String()
794-
}
795-
}
796-
}
828+
hostMac = hostMacProvider.GetHostMac(nodeIP)
829+
797830
if len(hostMac) == 0 {
798831
return nil, fmt.Errorf("could not find host mac address for %s", nodeIP)
799832
}
@@ -827,9 +860,6 @@ func NewProxier(
827860
proxier.endpointsChanges = endPointChangeTracker
828861
proxier.serviceChanges = serviceChanges
829862

830-
burstSyncs := 2
831-
klog.V(3).InfoS("Record sync param", "minSyncPeriod", minSyncPeriod, "syncPeriod", syncPeriod, "burstSyncs", burstSyncs)
832-
proxier.syncRunner = async.NewBoundedFrequencyRunner("sync-runner", proxier.syncProxyRules, minSyncPeriod, syncPeriod, burstSyncs)
833863
return proxier, nil
834864
}
835865

@@ -1785,3 +1815,21 @@ func (proxier *Proxier) deleteLoadBalancer(hns HostNetworkService, lbHnsID *stri
17851815
*lbHnsID = ""
17861816
return true
17871817
}
1818+
1819+
type localHostMacProvider struct{}
1820+
1821+
func (r *localHostMacProvider) GetHostMac(nodeIP net.IP) string {
1822+
var hostMac string
1823+
interfaces, _ := net.Interfaces()
1824+
for _, inter := range interfaces {
1825+
addresses, _ := inter.Addrs()
1826+
for _, addr := range addresses {
1827+
addrIP, _, _ := netutils.ParseCIDRSloppy(addr.String())
1828+
if addrIP.String() == nodeIP.String() {
1829+
klog.V(2).InfoS("Record Host MAC address", "addr", inter.HardwareAddr)
1830+
hostMac = inter.HardwareAddr.String()
1831+
}
1832+
}
1833+
}
1834+
return hostMac
1835+
}

0 commit comments

Comments
 (0)