pkg/proxy: track localhost nodeport accepted packets
Signed-off-by: Daman Arora <aroradaman@gmail.com>
This commit is contained in:
		@@ -162,7 +162,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            1,
 | 
								services:            1,
 | 
				
			||||||
			epPerService:        1,
 | 
								epPerService:        1,
 | 
				
			||||||
			expectedFilterRules: 5,
 | 
								expectedFilterRules: 5,
 | 
				
			||||||
			expectedNatRules:    17,
 | 
								expectedNatRules:    18,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "1 Services 2 EndpointPerService - LoadBalancer",
 | 
								name: "1 Services 2 EndpointPerService - LoadBalancer",
 | 
				
			||||||
@@ -177,7 +177,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            1,
 | 
								services:            1,
 | 
				
			||||||
			epPerService:        2,
 | 
								epPerService:        2,
 | 
				
			||||||
			expectedFilterRules: 5,
 | 
								expectedFilterRules: 5,
 | 
				
			||||||
			expectedNatRules:    20,
 | 
								expectedNatRules:    21,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "1 Services 10 EndpointPerService - LoadBalancer",
 | 
								name: "1 Services 10 EndpointPerService - LoadBalancer",
 | 
				
			||||||
@@ -192,7 +192,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            1,
 | 
								services:            1,
 | 
				
			||||||
			epPerService:        10,
 | 
								epPerService:        10,
 | 
				
			||||||
			expectedFilterRules: 5,
 | 
								expectedFilterRules: 5,
 | 
				
			||||||
			expectedNatRules:    44,
 | 
								expectedNatRules:    45,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "10 Services 0 EndpointsPerService - LoadBalancer",
 | 
								name: "10 Services 0 EndpointsPerService - LoadBalancer",
 | 
				
			||||||
@@ -222,7 +222,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            10,
 | 
								services:            10,
 | 
				
			||||||
			epPerService:        1,
 | 
								epPerService:        1,
 | 
				
			||||||
			expectedFilterRules: 14,
 | 
								expectedFilterRules: 14,
 | 
				
			||||||
			expectedNatRules:    125,
 | 
								expectedNatRules:    135,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "10 Services 2 EndpointPerService - LoadBalancer",
 | 
								name: "10 Services 2 EndpointPerService - LoadBalancer",
 | 
				
			||||||
@@ -237,7 +237,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            10,
 | 
								services:            10,
 | 
				
			||||||
			epPerService:        2,
 | 
								epPerService:        2,
 | 
				
			||||||
			expectedFilterRules: 14,
 | 
								expectedFilterRules: 14,
 | 
				
			||||||
			expectedNatRules:    155,
 | 
								expectedNatRules:    165,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "10 Services 10 EndpointPerService - LoadBalancer",
 | 
								name: "10 Services 10 EndpointPerService - LoadBalancer",
 | 
				
			||||||
@@ -252,7 +252,7 @@ func TestNumberIptablesRules(t *testing.T) {
 | 
				
			|||||||
			services:            10,
 | 
								services:            10,
 | 
				
			||||||
			epPerService:        10,
 | 
								epPerService:        10,
 | 
				
			||||||
			expectedFilterRules: 14,
 | 
								expectedFilterRules: 14,
 | 
				
			||||||
			expectedNatRules:    395,
 | 
								expectedNatRules:    405,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -314,7 +314,10 @@ func NewProxier(ctx context.Context,
 | 
				
			|||||||
		networkInterfacer:        proxyutil.RealNetwork{},
 | 
							networkInterfacer:        proxyutil.RealNetwork{},
 | 
				
			||||||
		conntrackTCPLiberal:      conntrackTCPLiberal,
 | 
							conntrackTCPLiberal:      conntrackTCPLiberal,
 | 
				
			||||||
		logger:                   logger,
 | 
							logger:                   logger,
 | 
				
			||||||
		nfAcctCounters:           map[string]bool{metrics.IPTablesCTStateInvalidDroppedNFAcctCounter: false},
 | 
							nfAcctCounters: map[string]bool{
 | 
				
			||||||
 | 
								metrics.IPTablesCTStateInvalidDroppedNFAcctCounter: false,
 | 
				
			||||||
 | 
								metrics.LocalhostNodePortAcceptedNFAcctCounter:     false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	burstSyncs := 2
 | 
						burstSyncs := 2
 | 
				
			||||||
@@ -1183,6 +1186,16 @@ func (proxier *Proxier) syncProxyRules() {
 | 
				
			|||||||
				// Jump to the external destination chain.  For better or for
 | 
									// Jump to the external destination chain.  For better or for
 | 
				
			||||||
				// worse, nodeports are not subect to loadBalancerSourceRanges,
 | 
									// worse, nodeports are not subect to loadBalancerSourceRanges,
 | 
				
			||||||
				// and we can't change that.
 | 
									// and we can't change that.
 | 
				
			||||||
 | 
									if proxier.localhostNodePorts && proxier.ipFamily == v1.IPv4Protocol && proxier.nfAcctCounters[metrics.LocalhostNodePortAcceptedNFAcctCounter] {
 | 
				
			||||||
 | 
										natRules.Write(
 | 
				
			||||||
 | 
											"-A", string(kubeNodePortsChain),
 | 
				
			||||||
 | 
											"-m", "comment", "--comment", svcPortNameString,
 | 
				
			||||||
 | 
											"-m", protocol, "-p", protocol,
 | 
				
			||||||
 | 
											"-d", "127.0.0.0/8",
 | 
				
			||||||
 | 
											"--dport", strconv.Itoa(svcInfo.NodePort()),
 | 
				
			||||||
 | 
											"-m", "nfacct", "--nfacct-name", metrics.LocalhostNodePortAcceptedNFAcctCounter,
 | 
				
			||||||
 | 
											"-j", string(externalTrafficChain))
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				natRules.Write(
 | 
									natRules.Write(
 | 
				
			||||||
					"-A", string(kubeNodePortsChain),
 | 
										"-A", string(kubeNodePortsChain),
 | 
				
			||||||
					"-m", "comment", "--comment", svcPortNameString,
 | 
										"-m", "comment", "--comment", svcPortNameString,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,6 +113,7 @@ func NewFakeProxier(ipt utiliptables.Interface) *Proxier {
 | 
				
			|||||||
	networkInterfacer.AddInterfaceAddr(&itf1, addrs1)
 | 
						networkInterfacer.AddInterfaceAddr(&itf1, addrs1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	p := &Proxier{
 | 
						p := &Proxier{
 | 
				
			||||||
 | 
							ipFamily:                 ipfamily,
 | 
				
			||||||
		svcPortMap:               make(proxy.ServicePortMap),
 | 
							svcPortMap:               make(proxy.ServicePortMap),
 | 
				
			||||||
		serviceChanges:           proxy.NewServiceChangeTracker(newServiceInfo, ipfamily, nil, nil),
 | 
							serviceChanges:           proxy.NewServiceChangeTracker(newServiceInfo, ipfamily, nil, nil),
 | 
				
			||||||
		endpointsMap:             make(proxy.EndpointsMap),
 | 
							endpointsMap:             make(proxy.EndpointsMap),
 | 
				
			||||||
@@ -137,6 +138,7 @@ func NewFakeProxier(ipt utiliptables.Interface) *Proxier {
 | 
				
			|||||||
		networkInterfacer:        networkInterfacer,
 | 
							networkInterfacer:        networkInterfacer,
 | 
				
			||||||
		nfAcctCounters: map[string]bool{
 | 
							nfAcctCounters: map[string]bool{
 | 
				
			||||||
			metrics.IPTablesCTStateInvalidDroppedNFAcctCounter: true,
 | 
								metrics.IPTablesCTStateInvalidDroppedNFAcctCounter: true,
 | 
				
			||||||
 | 
								metrics.LocalhostNodePortAcceptedNFAcctCounter:     true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	p.setInitialized(true)
 | 
						p.setInitialized(true)
 | 
				
			||||||
@@ -1746,8 +1748,11 @@ func TestOverallIPTablesRules(t *testing.T) {
 | 
				
			|||||||
		:KUBE-SVC-NUKIZ6OKUXPJNT4C - [0:0]
 | 
							:KUBE-SVC-NUKIZ6OKUXPJNT4C - [0:0]
 | 
				
			||||||
		:KUBE-SVC-X27LE4BHSL4DOUIK - [0:0]
 | 
							:KUBE-SVC-X27LE4BHSL4DOUIK - [0:0]
 | 
				
			||||||
		:KUBE-SVC-XPGD46QRK7WJZT7O - [0:0]
 | 
							:KUBE-SVC-XPGD46QRK7WJZT7O - [0:0]
 | 
				
			||||||
 | 
							-A KUBE-NODEPORTS -m comment --comment ns2/svc2:p80 -m tcp -p tcp -d 127.0.0.0/8 --dport 3001 -m nfacct --nfacct-name localhost_nps_accepted_pkts -j KUBE-EXT-GNZBNJ2PO5MGZ6GT
 | 
				
			||||||
		-A KUBE-NODEPORTS -m comment --comment ns2/svc2:p80 -m tcp -p tcp --dport 3001 -j KUBE-EXT-GNZBNJ2PO5MGZ6GT
 | 
							-A KUBE-NODEPORTS -m comment --comment ns2/svc2:p80 -m tcp -p tcp --dport 3001 -j KUBE-EXT-GNZBNJ2PO5MGZ6GT
 | 
				
			||||||
 | 
							-A KUBE-NODEPORTS -m comment --comment ns3/svc3:p80 -m tcp -p tcp -d 127.0.0.0/8 --dport 3003 -m nfacct --nfacct-name localhost_nps_accepted_pkts -j KUBE-EXT-X27LE4BHSL4DOUIK
 | 
				
			||||||
		-A KUBE-NODEPORTS -m comment --comment ns3/svc3:p80 -m tcp -p tcp --dport 3003 -j KUBE-EXT-X27LE4BHSL4DOUIK
 | 
							-A KUBE-NODEPORTS -m comment --comment ns3/svc3:p80 -m tcp -p tcp --dport 3003 -j KUBE-EXT-X27LE4BHSL4DOUIK
 | 
				
			||||||
 | 
							-A KUBE-NODEPORTS -m comment --comment ns5/svc5:p80 -m tcp -p tcp -d 127.0.0.0/8 --dport 3002 -m nfacct --nfacct-name localhost_nps_accepted_pkts -j KUBE-EXT-NUKIZ6OKUXPJNT4C
 | 
				
			||||||
		-A KUBE-NODEPORTS -m comment --comment ns5/svc5:p80 -m tcp -p tcp --dport 3002 -j KUBE-EXT-NUKIZ6OKUXPJNT4C
 | 
							-A KUBE-NODEPORTS -m comment --comment ns5/svc5:p80 -m tcp -p tcp --dport 3002 -j KUBE-EXT-NUKIZ6OKUXPJNT4C
 | 
				
			||||||
		-A KUBE-SERVICES -m comment --comment "ns1/svc1:p80 cluster IP" -m tcp -p tcp -d 172.30.0.41 --dport 80 -j KUBE-SVC-XPGD46QRK7WJZT7O
 | 
							-A KUBE-SERVICES -m comment --comment "ns1/svc1:p80 cluster IP" -m tcp -p tcp -d 172.30.0.41 --dport 80 -j KUBE-SVC-XPGD46QRK7WJZT7O
 | 
				
			||||||
		-A KUBE-SERVICES -m comment --comment "ns2/svc2:p80 cluster IP" -m tcp -p tcp -d 172.30.0.42 --dport 80 -j KUBE-SVC-GNZBNJ2PO5MGZ6GT
 | 
							-A KUBE-SERVICES -m comment --comment "ns2/svc2:p80 cluster IP" -m tcp -p tcp -d 172.30.0.42 --dport 80 -j KUBE-SVC-GNZBNJ2PO5MGZ6GT
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -266,6 +266,15 @@ var (
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		[]string{"traffic_policy"},
 | 
							[]string{"traffic_policy"},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// localhostNodePortsAcceptedPacketsDescription describe the metrics for the number of packets accepted
 | 
				
			||||||
 | 
						// by iptables which were destined for nodeports on loopback interface.
 | 
				
			||||||
 | 
						localhostNodePortsAcceptedPacketsDescription = metrics.NewDesc(
 | 
				
			||||||
 | 
							"kubeproxy_iptables_localhost_nodeports_accepted_packets_total",
 | 
				
			||||||
 | 
							"Number of packets accepted on nodeports of loopback interface",
 | 
				
			||||||
 | 
							nil, nil, metrics.ALPHA, "")
 | 
				
			||||||
 | 
						LocalhostNodePortAcceptedNFAcctCounter     = "localhost_nps_accepted_pkts"
 | 
				
			||||||
 | 
						localhostNodePortsAcceptedMetricsCollector = newNFAcctMetricCollector(LocalhostNodePortAcceptedNFAcctCounter, localhostNodePortsAcceptedPacketsDescription)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var registerMetricsOnce sync.Once
 | 
					var registerMetricsOnce sync.Once
 | 
				
			||||||
@@ -291,6 +300,7 @@ func RegisterMetrics(mode kubeproxyconfig.ProxyMode) {
 | 
				
			|||||||
		switch mode {
 | 
							switch mode {
 | 
				
			||||||
		case kubeproxyconfig.ProxyModeIPTables:
 | 
							case kubeproxyconfig.ProxyModeIPTables:
 | 
				
			||||||
			legacyregistry.CustomMustRegister(iptablesCTStateInvalidDroppedMetricCollector)
 | 
								legacyregistry.CustomMustRegister(iptablesCTStateInvalidDroppedMetricCollector)
 | 
				
			||||||
 | 
								legacyregistry.CustomMustRegister(localhostNodePortsAcceptedMetricsCollector)
 | 
				
			||||||
			legacyregistry.MustRegister(SyncFullProxyRulesLatency)
 | 
								legacyregistry.MustRegister(SyncFullProxyRulesLatency)
 | 
				
			||||||
			legacyregistry.MustRegister(SyncPartialProxyRulesLatency)
 | 
								legacyregistry.MustRegister(SyncPartialProxyRulesLatency)
 | 
				
			||||||
			legacyregistry.MustRegister(IPTablesRestoreFailuresTotal)
 | 
								legacyregistry.MustRegister(IPTablesRestoreFailuresTotal)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user