mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 02:41:25 +00:00
Merge pull request #91461 from andrewsykim/fix-get-node-addresses
Improvements for proxy utils GetNodeAddresses
This commit is contained in:
commit
4320e57494
@ -1104,8 +1104,7 @@ func (proxier *Proxier) syncProxyRules() {
|
|||||||
nodeAddrSet, err := utilproxy.GetNodeAddresses(proxier.nodePortAddresses, proxier.networkInterfacer)
|
nodeAddrSet, err := utilproxy.GetNodeAddresses(proxier.nodePortAddresses, proxier.networkInterfacer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("Failed to get node ip address matching nodeport cidr: %v", err)
|
klog.Errorf("Failed to get node ip address matching nodeport cidr: %v", err)
|
||||||
}
|
} else {
|
||||||
if err == nil && nodeAddrSet.Len() > 0 {
|
|
||||||
nodeAddresses = nodeAddrSet.List()
|
nodeAddresses = nodeAddrSet.List()
|
||||||
for _, address := range nodeAddresses {
|
for _, address := range nodeAddresses {
|
||||||
if utilproxy.IsZeroCIDR(address) {
|
if utilproxy.IsZeroCIDR(address) {
|
||||||
|
@ -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())
|
||||||
@ -215,6 +221,11 @@ func GetNodeAddresses(cidrs []string, nw NetworkInterfacer) (sets.String, error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if uniqueAddressList.Len() == 0 {
|
||||||
|
return nil, fmt.Errorf("no addresses found for cidrs %v", cidrs)
|
||||||
|
}
|
||||||
|
|
||||||
return uniqueAddressList, nil
|
return uniqueAddressList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ package util
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
@ -260,6 +261,7 @@ func TestGetNodeAddressses(t *testing.T) {
|
|||||||
nw *fake.FakeNetwork
|
nw *fake.FakeNetwork
|
||||||
itfAddrsPairs []InterfaceAddrsPair
|
itfAddrsPairs []InterfaceAddrsPair
|
||||||
expected sets.String
|
expected sets.String
|
||||||
|
expectedErr error
|
||||||
}{
|
}{
|
||||||
{ // case 0
|
{ // case 0
|
||||||
cidrs: []string{"10.20.30.0/24"},
|
cidrs: []string{"10.20.30.0/24"},
|
||||||
@ -375,7 +377,8 @@ func TestGetNodeAddressses(t *testing.T) {
|
|||||||
addrs: []net.Addr{fake.AddrStruct{Val: "127.0.0.1/8"}},
|
addrs: []net.Addr{fake.AddrStruct{Val: "127.0.0.1/8"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: sets.NewString(),
|
expected: nil,
|
||||||
|
expectedErr: fmt.Errorf("no addresses found for cidrs %v", []string{"10.20.30.0/24", "100.200.201.0/24"}),
|
||||||
},
|
},
|
||||||
{ // case 8
|
{ // case 8
|
||||||
cidrs: []string{},
|
cidrs: []string{},
|
||||||
@ -455,9 +458,10 @@ func TestGetNodeAddressses(t *testing.T) {
|
|||||||
testCases[i].nw.AddInterfaceAddr(&pair.itf, pair.addrs)
|
testCases[i].nw.AddInterfaceAddr(&pair.itf, pair.addrs)
|
||||||
}
|
}
|
||||||
addrList, err := GetNodeAddresses(testCases[i].cidrs, testCases[i].nw)
|
addrList, err := GetNodeAddresses(testCases[i].cidrs, testCases[i].nw)
|
||||||
if err != nil {
|
if !reflect.DeepEqual(err, testCases[i].expectedErr) {
|
||||||
t.Errorf("case [%d], unexpected error: %v", i, err)
|
t.Errorf("case [%d], unexpected error: %v", i, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !addrList.Equal(testCases[i].expected) {
|
if !addrList.Equal(testCases[i].expected) {
|
||||||
t.Errorf("case [%d], unexpected mismatch, expected: %v, got: %v", i, testCases[i].expected, addrList)
|
t.Errorf("case [%d], unexpected mismatch, expected: %v, got: %v", i, testCases[i].expected, addrList)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user