Skip to content

Commit 48f1356

Browse files
committed
pkg/proxy: refactor NodePortAddresses to NodeAddressHandler
Signed-off-by: Daman Arora <[email protected]>
1 parent 4f732a2 commit 48f1356

File tree

12 files changed

+85
-83
lines changed

12 files changed

+85
-83
lines changed

cmd/kube-proxy/app/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ func checkBadConfig(s *ProxyServer) error {
277277
}
278278
}
279279

280-
// Warn if NodePortAddresses does not limit connections on all IP families that
280+
// Warn if NodeAddressHandler does not limit connections on all IP families that
281281
// seem to be in use.
282282
cidrsByFamily := proxyutil.MapCIDRsByIPFamily(s.Config.NodePortAddresses)
283283
if len(s.Config.NodePortAddresses) == 0 {
@@ -347,7 +347,7 @@ func checkBadIPConfig(s *ProxyServer, dualStackSupported bool) (err error, fatal
347347
}
348348
}
349349

350-
// Note that s.Config.NodePortAddresses gets checked as part of checkBadConfig()
350+
// Note that s.Config.NodeAddressHandler gets checked as part of checkBadConfig()
351351
// so it doesn't need to be checked here.
352352

353353
return utilerrors.NewAggregate(errors), fatal

pkg/proxy/healthcheck/healthcheck_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ func (fake fakeProxierHealthChecker) IsHealthy() bool {
149149
func TestServer(t *testing.T) {
150150
listener := newFakeListener()
151151
httpFactory := newFakeHTTPServerFactory()
152-
nodePortAddresses := proxyutil.NewNodePortAddresses(v1.IPv4Protocol, []string{})
152+
nodeAddressHandler := proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, []string{})
153153
proxyChecker := &fakeProxierHealthChecker{true}
154154

155-
hcsi := newServiceHealthServer("hostname", nil, listener, httpFactory, nodePortAddresses, proxyChecker)
155+
hcsi := newServiceHealthServer("hostname", nil, listener, httpFactory, nodeAddressHandler, proxyChecker)
156156
hcs := hcsi.(*server)
157157
if len(hcs.services) != 0 {
158158
t.Errorf("expected 0 services, got %d", len(hcs.services))
@@ -663,9 +663,9 @@ func TestServerWithSelectiveListeningAddress(t *testing.T) {
663663

664664
// limiting addresses to loop back. We don't want any cleverness here around getting IP for
665665
// machine nor testing ipv6 || ipv4. using loop back guarantees the test will work on any machine
666-
nodePortAddresses := proxyutil.NewNodePortAddresses(v1.IPv4Protocol, []string{"127.0.0.0/8"})
666+
nodeAddressHandler := proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, []string{"127.0.0.0/8"})
667667

668-
hcsi := newServiceHealthServer("hostname", nil, listener, httpFactory, nodePortAddresses, proxyChecker)
668+
hcsi := newServiceHealthServer("hostname", nil, listener, httpFactory, nodeAddressHandler, proxyChecker)
669669
hcs := hcsi.(*server)
670670
if len(hcs.services) != 0 {
671671
t.Errorf("expected 0 services, got %d", len(hcs.services))

pkg/proxy/healthcheck/service_health.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,17 @@ type proxierHealthChecker interface {
5858
IsHealthy() bool
5959
}
6060

61-
func newServiceHealthServer(hostname string, recorder events.EventRecorder, listener listener, factory httpServerFactory, nodePortAddresses *proxyutil.NodePortAddresses, healthzServer proxierHealthChecker) ServiceHealthServer {
61+
func newServiceHealthServer(hostname string, recorder events.EventRecorder, listener listener, factory httpServerFactory, nodeAddressHandler *proxyutil.NodeAddressHandler, healthzServer proxierHealthChecker) ServiceHealthServer {
6262
// It doesn't matter whether we listen on "0.0.0.0", "::", or ""; go
6363
// treats them all the same.
6464
nodeIPs := []net.IP{net.IPv4zero}
6565

66-
if !nodePortAddresses.MatchAll() {
67-
ips, err := nodePortAddresses.GetNodeIPs(proxyutil.RealNetwork{})
66+
if !nodeAddressHandler.MatchAll() {
67+
ips, err := nodeAddressHandler.GetNodeIPs(proxyutil.RealNetwork{})
6868
if err == nil {
6969
nodeIPs = ips
7070
} else {
71-
klog.ErrorS(err, "Failed to get node ip address matching node port addresses, health check port will listen to all node addresses", "nodePortAddresses", nodePortAddresses)
71+
klog.ErrorS(err, "Failed to get node ip address matching node port addresses, health check port will listen to all node addresses", "nodeAddresses", nodeAddressHandler)
7272
}
7373
}
7474

@@ -84,7 +84,7 @@ func newServiceHealthServer(hostname string, recorder events.EventRecorder, list
8484
}
8585

8686
// NewServiceHealthServer allocates a new service healthcheck server manager
87-
func NewServiceHealthServer(hostname string, recorder events.EventRecorder, nodePortAddresses *proxyutil.NodePortAddresses, healthzServer proxierHealthChecker) ServiceHealthServer {
87+
func NewServiceHealthServer(hostname string, recorder events.EventRecorder, nodePortAddresses *proxyutil.NodeAddressHandler, healthzServer proxierHealthChecker) ServiceHealthServer {
8888
return newServiceHealthServer(hostname, recorder, stdNetListener{}, stdHTTPServerFactory{}, nodePortAddresses, healthzServer)
8989
}
9090

pkg/proxy/iptables/proxier.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ type Proxier struct {
205205
// conntrackTCPLiberal indicates whether the system sets the kernel nf_conntrack_tcp_be_liberal
206206
conntrackTCPLiberal bool
207207

208-
// nodePortAddresses selects the interfaces where nodePort works.
209-
nodePortAddresses *proxyutil.NodePortAddresses
208+
// nodeAddressHandler selects the interfaces where nodePort works.
209+
nodeAddressHandler *proxyutil.NodeAddressHandler
210210
// networkInterfacer defines an interface for several net library functions.
211211
// Inject for test purpose.
212212
networkInterfacer proxyutil.NetworkInterfacer
@@ -244,9 +244,9 @@ func NewProxier(ctx context.Context,
244244
initOnly bool,
245245
) (*Proxier, error) {
246246
logger := klog.LoggerWithValues(klog.FromContext(ctx), "ipFamily", ipFamily)
247-
nodePortAddresses := proxyutil.NewNodePortAddresses(ipFamily, nodePortAddressStrings)
247+
nodeAddressHandler := proxyutil.NewNodeAddressHandler(ipFamily, nodePortAddressStrings)
248248

249-
if !nodePortAddresses.ContainsIPv4Loopback() {
249+
if !nodeAddressHandler.ContainsIPv4Loopback() {
250250
localhostNodePorts = false
251251
}
252252
if localhostNodePorts {
@@ -277,7 +277,7 @@ func NewProxier(ctx context.Context,
277277
masqueradeMark := fmt.Sprintf("%#08x", masqueradeValue)
278278
logger.V(2).Info("Using iptables mark for masquerade", "mark", masqueradeMark)
279279

280-
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodePortAddresses, healthzServer)
280+
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodeAddressHandler, healthzServer)
281281
nfacctRunner, err := nfacct.New()
282282
if err != nil {
283283
logger.Error(err, "Failed to create nfacct runner, nfacct based metrics won't be available")
@@ -310,7 +310,7 @@ func NewProxier(ctx context.Context,
310310
natChains: proxyutil.NewLineBuffer(),
311311
natRules: proxyutil.NewLineBuffer(),
312312
localhostNodePorts: localhostNodePorts,
313-
nodePortAddresses: nodePortAddresses,
313+
nodeAddressHandler: nodeAddressHandler,
314314
networkInterfacer: proxyutil.RealNetwork{},
315315
conntrackTCPLiberal: conntrackTCPLiberal,
316316
logger: logger,
@@ -1447,7 +1447,7 @@ func (proxier *Proxier) syncProxyRules() {
14471447

14481448
// Finally, tail-call to the nodePorts chain. This needs to be after all
14491449
// other service portal rules.
1450-
if proxier.nodePortAddresses.MatchAll() {
1450+
if proxier.nodeAddressHandler.MatchAll() {
14511451
destinations := []string{"-m", "addrtype", "--dst-type", "LOCAL"}
14521452
// Block localhost nodePorts if they are not supported. (For IPv6 they never
14531453
// work, and for IPv4 they only work if we previously set `route_localnet`.)
@@ -1463,9 +1463,9 @@ func (proxier *Proxier) syncProxyRules() {
14631463
destinations,
14641464
"-j", string(kubeNodePortsChain))
14651465
} else {
1466-
nodeIPs, err := proxier.nodePortAddresses.GetNodeIPs(proxier.networkInterfacer)
1466+
nodeIPs, err := proxier.nodeAddressHandler.GetNodeIPs(proxier.networkInterfacer)
14671467
if err != nil {
1468-
proxier.logger.Error(err, "Failed to get node ip address matching nodeport cidrs, services with nodeport may not work as intended", "CIDRs", proxier.nodePortAddresses)
1468+
proxier.logger.Error(err, "Failed to get node ip address matching nodeport cidrs, services with nodeport may not work as intended", "CIDRs", proxier.nodeAddressHandler)
14691469
}
14701470
for _, ip := range nodeIPs {
14711471
if ip.IsLoopback() {

pkg/proxy/iptables/proxier_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func NewFakeProxier(ipt utiliptables.Interface) *Proxier {
134134
natRules: proxyutil.NewLineBuffer(),
135135
nodeIP: netutils.ParseIPSloppy(testNodeIP),
136136
localhostNodePorts: true,
137-
nodePortAddresses: proxyutil.NewNodePortAddresses(ipfamily, nil),
137+
nodeAddressHandler: proxyutil.NewNodeAddressHandler(ipfamily, nil),
138138
networkInterfacer: networkInterfacer,
139139
nfAcctCounters: map[string]bool{
140140
metrics.IPTablesCTStateInvalidDroppedNFAcctCounter: true,
@@ -2351,7 +2351,7 @@ func TestNodePorts(t *testing.T) {
23512351
fp := NewFakeProxier(ipt)
23522352
fp.localhostNodePorts = tc.localhostNodePorts
23532353
if tc.nodePortAddresses != nil {
2354-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(tc.family, tc.nodePortAddresses)
2354+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(tc.family, tc.nodePortAddresses)
23552355
}
23562356

23572357
makeServiceMap(fp,
@@ -2499,7 +2499,7 @@ func TestNodePorts(t *testing.T) {
24992499
func TestHealthCheckNodePort(t *testing.T) {
25002500
ipt := iptablestest.NewFake()
25012501
fp := NewFakeProxier(ipt)
2502-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(v1.IPv4Protocol, []string{"127.0.0.0/8"})
2502+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, []string{"127.0.0.0/8"})
25032503

25042504
svcIP := "172.30.0.42"
25052505
svcPort := 80

pkg/proxy/ipvs/proxier.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ type Proxier struct {
227227
netlinkHandle NetLinkHandle
228228
// ipsetList is the list of ipsets that ipvs proxier used.
229229
ipsetList map[string]*IPSet
230-
// nodePortAddresses selects the interfaces where nodePort works.
231-
nodePortAddresses *proxyutil.NodePortAddresses
230+
// nodeAddressHandler selects the interfaces where nodePort works.
231+
nodeAddressHandler *proxyutil.NodeAddressHandler
232232
// networkInterfacer defines an interface for several net library functions.
233233
// Inject for test purpose.
234234
networkInterfacer proxyutil.NetworkInterfacer
@@ -365,9 +365,9 @@ func NewProxier(
365365
scheduler = defaultScheduler
366366
}
367367

368-
nodePortAddresses := proxyutil.NewNodePortAddresses(ipFamily, nodePortAddressStrings)
368+
nodeAddressHandler := proxyutil.NewNodeAddressHandler(ipFamily, nodePortAddressStrings)
369369

370-
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodePortAddresses, healthzServer)
370+
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodeAddressHandler, healthzServer)
371371

372372
// excludeCIDRs has been validated before, here we just parse it to IPNet list
373373
parsedExcludeCIDRs, _ := netutils.ParseCIDRs(excludeCIDRs)
@@ -402,7 +402,7 @@ func NewProxier(
402402
filterRules: proxyutil.NewLineBuffer(),
403403
netlinkHandle: NewNetLinkHandle(ipFamily == v1.IPv6Protocol),
404404
ipset: ipset,
405-
nodePortAddresses: nodePortAddresses,
405+
nodeAddressHandler: nodeAddressHandler,
406406
networkInterfacer: proxyutil.RealNetwork{},
407407
gracefuldeleteManager: NewGracefulTerminationManager(ipvs),
408408
logger: logger,
@@ -1000,12 +1000,12 @@ func (proxier *Proxier) syncProxyRules() {
10001000
// can be reused for all nodePort services.
10011001
var nodeIPs []net.IP
10021002
if hasNodePort {
1003-
if proxier.nodePortAddresses.MatchAll() {
1003+
if proxier.nodeAddressHandler.MatchAll() {
10041004
for _, ipStr := range nodeAddressSet.UnsortedList() {
10051005
nodeIPs = append(nodeIPs, netutils.ParseIPSloppy(ipStr))
10061006
}
10071007
} else {
1008-
allNodeIPs, err := proxier.nodePortAddresses.GetNodeIPs(proxier.networkInterfacer)
1008+
allNodeIPs, err := proxier.nodeAddressHandler.GetNodeIPs(proxier.networkInterfacer)
10091009
if err != nil {
10101010
proxier.logger.Error(err, "Failed to get node IP address matching nodeport cidr")
10111011
} else {

pkg/proxy/ipvs/proxier_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ func NewFakeProxier(ctx context.Context, ipt utiliptables.Interface, ipvs utilip
160160
filterRules: proxyutil.NewLineBuffer(),
161161
netlinkHandle: netlinkHandle,
162162
ipsetList: ipsetList,
163-
nodePortAddresses: proxyutil.NewNodePortAddresses(ipFamily, nil),
163+
nodeAddressHandler: proxyutil.NewNodeAddressHandler(ipFamily, nil),
164164
networkInterfacer: proxyutiltest.NewFakeNetwork(),
165165
gracefuldeleteManager: NewGracefulTerminationManager(ipvs),
166166
ipFamily: ipFamily,
@@ -950,7 +950,7 @@ func TestNodePortIPv4(t *testing.T) {
950950
ipvs := ipvstest.NewFake()
951951
ipset := ipsettest.NewFake(testIPSetVersion)
952952
fp := NewFakeProxier(ctx, ipt, ipvs, ipset, test.nodeIPs, nil, v1.IPv4Protocol)
953-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(v1.IPv4Protocol, test.nodePortAddresses)
953+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, test.nodePortAddresses)
954954

955955
makeServiceMap(fp, test.services...)
956956
populateEndpointSlices(fp, test.endpoints...)
@@ -1293,7 +1293,7 @@ func TestNodePortIPv6(t *testing.T) {
12931293
ipvs := ipvstest.NewFake()
12941294
ipset := ipsettest.NewFake(testIPSetVersion)
12951295
fp := NewFakeProxier(ctx, ipt, ipvs, ipset, test.nodeIPs, nil, v1.IPv6Protocol)
1296-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(v1.IPv6Protocol, test.nodePortAddresses)
1296+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(v1.IPv6Protocol, test.nodePortAddresses)
12971297

12981298
makeServiceMap(fp, test.services...)
12991299
populateEndpointSlices(fp, test.endpoints...)
@@ -2053,7 +2053,7 @@ func TestOnlyLocalNodePorts(t *testing.T) {
20532053
addrs1 := []net.Addr{&net.IPNet{IP: netutils.ParseIPSloppy("2001:db8::"), Mask: net.CIDRMask(64, 128)}}
20542054
fp.networkInterfacer.(*proxyutiltest.FakeNetwork).AddInterfaceAddr(&itf, addrs)
20552055
fp.networkInterfacer.(*proxyutiltest.FakeNetwork).AddInterfaceAddr(&itf1, addrs1)
2056-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(v1.IPv4Protocol, []string{"100.101.102.0/24"})
2056+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, []string{"100.101.102.0/24"})
20572057

20582058
fp.syncProxyRules()
20592059

@@ -2141,7 +2141,7 @@ func TestHealthCheckNodePort(t *testing.T) {
21412141
addrs1 := []net.Addr{&net.IPNet{IP: netutils.ParseIPSloppy("2001:db8::"), Mask: net.CIDRMask(64, 128)}}
21422142
fp.networkInterfacer.(*proxyutiltest.FakeNetwork).AddInterfaceAddr(&itf, addrs)
21432143
fp.networkInterfacer.(*proxyutiltest.FakeNetwork).AddInterfaceAddr(&itf1, addrs1)
2144-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(v1.IPv4Protocol, []string{"100.101.102.0/24"})
2144+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(v1.IPv4Protocol, []string{"100.101.102.0/24"})
21452145

21462146
fp.syncProxyRules()
21472147

pkg/proxy/nftables/proxier.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ type Proxier struct {
180180
serviceHealthServer healthcheck.ServiceHealthServer
181181
healthzServer *healthcheck.ProxierHealthServer
182182

183-
// nodePortAddresses selects the interfaces where nodePort works.
184-
nodePortAddresses *proxyutil.NodePortAddresses
183+
// nodeAddressHandler selects the interfaces where nodePort works.
184+
nodeAddressHandler *proxyutil.NodeAddressHandler
185185
// networkInterfacer defines an interface for several net library functions.
186186
// Inject for test purpose.
187187
networkInterfacer proxyutil.NetworkInterfacer
@@ -240,9 +240,9 @@ func NewProxier(ctx context.Context,
240240
masqueradeMark := fmt.Sprintf("%#08x", masqueradeValue)
241241
logger.V(2).Info("Using nftables mark for masquerade", "mark", masqueradeMark)
242242

243-
nodePortAddresses := proxyutil.NewNodePortAddresses(ipFamily, nodePortAddressStrings)
243+
nodeAddressHandler := proxyutil.NewNodeAddressHandler(ipFamily, nodePortAddressStrings)
244244

245-
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodePortAddresses, healthzServer)
245+
serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder, nodeAddressHandler, healthzServer)
246246

247247
proxier := &Proxier{
248248
ipFamily: ipFamily,
@@ -262,7 +262,7 @@ func NewProxier(ctx context.Context,
262262
recorder: recorder,
263263
serviceHealthServer: serviceHealthServer,
264264
healthzServer: healthzServer,
265-
nodePortAddresses: nodePortAddresses,
265+
nodeAddressHandler: nodeAddressHandler,
266266
networkInterfacer: proxyutil.RealNetwork{},
267267
staleChains: make(map[string]time.Time),
268268
logger: logger,
@@ -574,17 +574,17 @@ func (proxier *Proxier) setupNFTables(tx *knftables.Transaction) {
574574
Type: ipvX_addr,
575575
Comment: ptr.To("IPs that accept NodePort traffic"),
576576
})
577-
if proxier.nodePortAddresses.MatchAll() {
577+
if proxier.nodeAddressHandler.MatchAll() {
578578
tx.Delete(&knftables.Set{
579579
Name: nodePortIPsSet,
580580
})
581581
} else {
582582
tx.Flush(&knftables.Set{
583583
Name: nodePortIPsSet,
584584
})
585-
nodeIPs, err := proxier.nodePortAddresses.GetNodeIPs(proxier.networkInterfacer)
585+
nodeIPs, err := proxier.nodeAddressHandler.GetNodeIPs(proxier.networkInterfacer)
586586
if err != nil {
587-
proxier.logger.Error(err, "Failed to get node ip address matching nodeport cidrs, services with nodeport may not work as intended", "CIDRs", proxier.nodePortAddresses)
587+
proxier.logger.Error(err, "Failed to get node ip address matching nodeport cidrs, services with nodeport may not work as intended", "CIDRs", proxier.nodeAddressHandler)
588588
}
589589
for _, ip := range nodeIPs {
590590
if ip.IsLoopback() {
@@ -632,7 +632,7 @@ func (proxier *Proxier) setupNFTables(tx *knftables.Transaction) {
632632
),
633633
})
634634

635-
if proxier.nodePortAddresses.MatchAll() {
635+
if proxier.nodeAddressHandler.MatchAll() {
636636
tx.Add(&knftables.Rule{
637637
Chain: nodePortEndpointsCheckChain,
638638
Rule: knftables.Concat(
@@ -686,7 +686,7 @@ func (proxier *Proxier) setupNFTables(tx *knftables.Transaction) {
686686
"vmap", "@", serviceIPsMap,
687687
),
688688
})
689-
if proxier.nodePortAddresses.MatchAll() {
689+
if proxier.nodeAddressHandler.MatchAll() {
690690
tx.Add(&knftables.Rule{
691691
Chain: servicesChain,
692692
Rule: knftables.Concat(

pkg/proxy/nftables/proxier_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func NewFakeProxier(ipFamily v1.IPFamily) (*knftables.Fake, *Proxier) {
127127
hostname: testHostname,
128128
serviceHealthServer: healthcheck.NewFakeServiceHealthServer(),
129129
nodeIP: nodeIP,
130-
nodePortAddresses: proxyutil.NewNodePortAddresses(ipFamily, nodePortAddresses),
130+
nodeAddressHandler: proxyutil.NewNodeAddressHandler(ipFamily, nodePortAddresses),
131131
networkInterfacer: networkInterfacer,
132132
staleChains: make(map[string]time.Time),
133133
serviceCIDRs: serviceCIDRs,
@@ -958,7 +958,7 @@ func TestNodePorts(t *testing.T) {
958958
nodeIP = testNodeIPv6
959959
}
960960
if tc.nodePortAddresses != nil {
961-
fp.nodePortAddresses = proxyutil.NewNodePortAddresses(tc.family, tc.nodePortAddresses)
961+
fp.nodeAddressHandler = proxyutil.NewNodeAddressHandler(tc.family, tc.nodePortAddresses)
962962
}
963963

964964
makeServiceMap(fp,

0 commit comments

Comments
 (0)