Skip to content

Commit 4320e57

Browse files
authored
Merge pull request kubernetes#91461 from andrewsykim/fix-get-node-addresses
Improvements for proxy utils GetNodeAddresses
2 parents c682b31 + 1874115 commit 4320e57

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

pkg/proxy/ipvs/proxier.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,8 +1104,7 @@ func (proxier *Proxier) syncProxyRules() {
11041104
nodeAddrSet, err := utilproxy.GetNodeAddresses(proxier.nodePortAddresses, proxier.networkInterfacer)
11051105
if err != nil {
11061106
klog.Errorf("Failed to get node ip address matching nodeport cidr: %v", err)
1107-
}
1108-
if err == nil && nodeAddrSet.Len() > 0 {
1107+
} else {
11091108
nodeAddresses = nodeAddrSet.List()
11101109
for _, address := range nodeAddresses {
11111110
if utilproxy.IsZeroCIDR(address) {

pkg/proxy/util/utils.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,29 +181,35 @@ func GetNodeAddresses(cidrs []string, nw NetworkInterfacer) (sets.String, error)
181181
uniqueAddressList.Insert(cidr)
182182
}
183183
}
184+
185+
itfs, err := nw.Interfaces()
186+
if err != nil {
187+
return nil, fmt.Errorf("error listing all interfaces from host, error: %v", err)
188+
}
189+
184190
// Second round of iteration to parse IPs based on cidr.
185191
for _, cidr := range cidrs {
186192
if IsZeroCIDR(cidr) {
187193
continue
188194
}
195+
189196
_, ipNet, _ := net.ParseCIDR(cidr)
190-
itfs, err := nw.Interfaces()
191-
if err != nil {
192-
return nil, fmt.Errorf("error listing all interfaces from host, error: %v", err)
193-
}
194197
for _, itf := range itfs {
195198
addrs, err := nw.Addrs(&itf)
196199
if err != nil {
197200
return nil, fmt.Errorf("error getting address from interface %s, error: %v", itf.Name, err)
198201
}
202+
199203
for _, addr := range addrs {
200204
if addr == nil {
201205
continue
202206
}
207+
203208
ip, _, err := net.ParseCIDR(addr.String())
204209
if err != nil {
205210
return nil, fmt.Errorf("error parsing CIDR for interface %s, error: %v", itf.Name, err)
206211
}
212+
207213
if ipNet.Contains(ip) {
208214
if utilnet.IsIPv6(ip) && !uniqueAddressList.Has(IPv6ZeroCIDR) {
209215
uniqueAddressList.Insert(ip.String())
@@ -215,6 +221,11 @@ func GetNodeAddresses(cidrs []string, nw NetworkInterfacer) (sets.String, error)
215221
}
216222
}
217223
}
224+
225+
if uniqueAddressList.Len() == 0 {
226+
return nil, fmt.Errorf("no addresses found for cidrs %v", cidrs)
227+
}
228+
218229
return uniqueAddressList, nil
219230
}
220231

pkg/proxy/util/utils_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package util
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"net"
2223
"reflect"
2324
"testing"
@@ -260,6 +261,7 @@ func TestGetNodeAddressses(t *testing.T) {
260261
nw *fake.FakeNetwork
261262
itfAddrsPairs []InterfaceAddrsPair
262263
expected sets.String
264+
expectedErr error
263265
}{
264266
{ // case 0
265267
cidrs: []string{"10.20.30.0/24"},
@@ -375,7 +377,8 @@ func TestGetNodeAddressses(t *testing.T) {
375377
addrs: []net.Addr{fake.AddrStruct{Val: "127.0.0.1/8"}},
376378
},
377379
},
378-
expected: sets.NewString(),
380+
expected: nil,
381+
expectedErr: fmt.Errorf("no addresses found for cidrs %v", []string{"10.20.30.0/24", "100.200.201.0/24"}),
379382
},
380383
{ // case 8
381384
cidrs: []string{},
@@ -455,9 +458,10 @@ func TestGetNodeAddressses(t *testing.T) {
455458
testCases[i].nw.AddInterfaceAddr(&pair.itf, pair.addrs)
456459
}
457460
addrList, err := GetNodeAddresses(testCases[i].cidrs, testCases[i].nw)
458-
if err != nil {
461+
if !reflect.DeepEqual(err, testCases[i].expectedErr) {
459462
t.Errorf("case [%d], unexpected error: %v", i, err)
460463
}
464+
461465
if !addrList.Equal(testCases[i].expected) {
462466
t.Errorf("case [%d], unexpected mismatch, expected: %v, got: %v", i, testCases[i].expected, addrList)
463467
}

0 commit comments

Comments
 (0)