proxy utils: check network interfaces only once

Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
Andrew Sy Kim 2020-05-26 12:09:27 -04:00
parent 3a95b1130a
commit a99321c87c

View File

@ -181,29 +181,35 @@ func GetNodeAddresses(cidrs []string, nw NetworkInterfacer) (sets.String, error)
uniqueAddressList.Insert(cidr) uniqueAddressList.Insert(cidr)
} }
} }
itfs, err := nw.Interfaces()
if err != nil {
return nil, fmt.Errorf("error listing all interfaces from host, error: %v", err)
}
// Second round of iteration to parse IPs based on cidr. // Second round of iteration to parse IPs based on cidr.
for _, cidr := range cidrs { for _, cidr := range cidrs {
if IsZeroCIDR(cidr) { if IsZeroCIDR(cidr) {
continue continue
} }
_, ipNet, _ := net.ParseCIDR(cidr) _, ipNet, _ := net.ParseCIDR(cidr)
itfs, err := nw.Interfaces()
if err != nil {
return nil, fmt.Errorf("error listing all interfaces from host, error: %v", err)
}
for _, itf := range itfs { for _, itf := range itfs {
addrs, err := nw.Addrs(&itf) addrs, err := nw.Addrs(&itf)
if err != nil { if err != nil {
return nil, fmt.Errorf("error getting address from interface %s, error: %v", itf.Name, err) return nil, fmt.Errorf("error getting address from interface %s, error: %v", itf.Name, err)
} }
for _, addr := range addrs { for _, addr := range addrs {
if addr == nil { if addr == nil {
continue continue
} }
ip, _, err := net.ParseCIDR(addr.String()) ip, _, err := net.ParseCIDR(addr.String())
if err != nil { if err != nil {
return nil, fmt.Errorf("error parsing CIDR for interface %s, error: %v", itf.Name, err) return nil, fmt.Errorf("error parsing CIDR for interface %s, error: %v", itf.Name, err)
} }
if ipNet.Contains(ip) { if ipNet.Contains(ip) {
if utilnet.IsIPv6(ip) && !uniqueAddressList.Has(IPv6ZeroCIDR) { if utilnet.IsIPv6(ip) && !uniqueAddressList.Has(IPv6ZeroCIDR) {
uniqueAddressList.Insert(ip.String()) uniqueAddressList.Insert(ip.String())