mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	proxy/iptables: Don't create unused chains, and enable the unit test for that
This commit is contained in:
		@@ -1101,7 +1101,7 @@ func (proxier *Proxier) syncProxyRules() {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		svcXlbChain := svcInfo.serviceLBChainName
 | 
							svcXlbChain := svcInfo.serviceLBChainName
 | 
				
			||||||
		if svcInfo.NodeLocalExternal() {
 | 
							if hasEndpoints && svcInfo.NodeLocalExternal() {
 | 
				
			||||||
			// Only for services request OnlyLocal traffic
 | 
								// Only for services request OnlyLocal traffic
 | 
				
			||||||
			// create the per-service LB chain, retaining counters if possible.
 | 
								// create the per-service LB chain, retaining counters if possible.
 | 
				
			||||||
			if lbChain, ok := existingNATChains[svcXlbChain]; ok {
 | 
								if lbChain, ok := existingNATChains[svcXlbChain]; ok {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -721,6 +721,10 @@ func checkIPTablesRuleJumps(ruleData string) error {
 | 
				
			|||||||
		// Find all of the lines like ":KUBE-SERVICES", indicating chains that
 | 
							// Find all of the lines like ":KUBE-SERVICES", indicating chains that
 | 
				
			||||||
		// iptables-restore would create when loading the data.
 | 
							// iptables-restore would create when loading the data.
 | 
				
			||||||
		createdChains := sets.NewString(findAllMatches(lines, `^:([^ ]*)`)...)
 | 
							createdChains := sets.NewString(findAllMatches(lines, `^:([^ ]*)`)...)
 | 
				
			||||||
 | 
							// Find all of the lines like "-X KUBE-SERVICES ..." indicating chains
 | 
				
			||||||
 | 
							// that we are deleting because they are no longer used, and remove
 | 
				
			||||||
 | 
							// those chains from createdChains.
 | 
				
			||||||
 | 
							createdChains = createdChains.Delete(findAllMatches(lines, `-X ([^ ]*)`)...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Find all of the lines like "-A KUBE-SERVICES ..." indicating chains
 | 
							// Find all of the lines like "-A KUBE-SERVICES ..." indicating chains
 | 
				
			||||||
		// that we are adding at least one rule to.
 | 
							// that we are adding at least one rule to.
 | 
				
			||||||
@@ -754,12 +758,11 @@ func checkIPTablesRuleJumps(ruleData string) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Find cases where we have ":BAR" but no "-A FOO ... -j BAR", meaning
 | 
							// Find cases where we have ":BAR" but no "-A FOO ... -j BAR", meaning
 | 
				
			||||||
		// that we are creating an empty chain but not using it for anything.
 | 
							// that we are creating an empty chain but not using it for anything.
 | 
				
			||||||
		// FIXME: This currently fails
 | 
							extraChains := createdChains.Difference(jumpedChains)
 | 
				
			||||||
		// extraChains := createdChains.Difference(jumpedChains)
 | 
							extraChains.Delete(string(kubeServicesChain), string(kubeExternalServicesChain), string(kubeNodePortsChain), string(kubePostroutingChain), string(kubeForwardChain), string(KubeMarkMasqChain))
 | 
				
			||||||
		// extraChains.Delete(string(kubeServicesChain), string(kubeExternalServicesChain), string(kubeNodePortsChain), string(kubePostroutingChain), string(kubeForwardChain), string(KubeMarkMasqChain))
 | 
							if len(extraChains) > 0 {
 | 
				
			||||||
		// if len(extraChains) > 0 {
 | 
								return fmt.Errorf("some chains in %s are created but not used: %v", tableName, extraChains.List())
 | 
				
			||||||
		// 	return fmt.Errorf("some chains in %s are created but not used: %v", tableName, extraChains.List())
 | 
							}
 | 
				
			||||||
		// }
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@@ -826,6 +829,20 @@ COMMIT
 | 
				
			|||||||
`,
 | 
					`,
 | 
				
			||||||
			error: "some chains in nat are used but were not created: [KUBE-SVC-XPGD46QRK7WJZT7O]",
 | 
								error: "some chains in nat are used but were not created: [KUBE-SVC-XPGD46QRK7WJZT7O]",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "can't create chain and then not use it",
 | 
				
			||||||
 | 
								input: `
 | 
				
			||||||
 | 
					*filter
 | 
				
			||||||
 | 
					COMMIT
 | 
				
			||||||
 | 
					*nat
 | 
				
			||||||
 | 
					:KUBE-MARK-MASQ - [0:0]
 | 
				
			||||||
 | 
					:KUBE-SERVICES - [0:0]
 | 
				
			||||||
 | 
					:KUBE-SVC-XPGD46QRK7WJZT7O - [0:0]
 | 
				
			||||||
 | 
					-A KUBE-SERVICES -m comment --comment "ns1/svc1:p80 cluster IP" ...
 | 
				
			||||||
 | 
					COMMIT
 | 
				
			||||||
 | 
					`,
 | 
				
			||||||
 | 
								error: "some chains in nat are created but not used: [KUBE-SVC-XPGD46QRK7WJZT7O]",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	} {
 | 
						} {
 | 
				
			||||||
		t.Run(tc.name, func(t *testing.T) {
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
			err := checkIPTablesRuleJumps(tc.input)
 | 
								err := checkIPTablesRuleJumps(tc.input)
 | 
				
			||||||
@@ -1899,7 +1916,6 @@ COMMIT
 | 
				
			|||||||
:KUBE-NODEPORTS - [0:0]
 | 
					:KUBE-NODEPORTS - [0:0]
 | 
				
			||||||
:KUBE-POSTROUTING - [0:0]
 | 
					:KUBE-POSTROUTING - [0:0]
 | 
				
			||||||
:KUBE-MARK-MASQ - [0:0]
 | 
					:KUBE-MARK-MASQ - [0:0]
 | 
				
			||||||
:KUBE-XLB-XPGD46QRK7WJZT7O - [0:0]
 | 
					 | 
				
			||||||
-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
					-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
				
			||||||
-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
					-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
				
			||||||
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
					-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
				
			||||||
@@ -2289,7 +2305,6 @@ COMMIT
 | 
				
			|||||||
:KUBE-NODEPORTS - [0:0]
 | 
					:KUBE-NODEPORTS - [0:0]
 | 
				
			||||||
:KUBE-POSTROUTING - [0:0]
 | 
					:KUBE-POSTROUTING - [0:0]
 | 
				
			||||||
:KUBE-MARK-MASQ - [0:0]
 | 
					:KUBE-MARK-MASQ - [0:0]
 | 
				
			||||||
:KUBE-XLB-XPGD46QRK7WJZT7O - [0:0]
 | 
					 | 
				
			||||||
-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
					-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
				
			||||||
-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
					-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
				
			||||||
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
					-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
				
			||||||
@@ -5117,7 +5132,6 @@ COMMIT
 | 
				
			|||||||
:KUBE-NODEPORTS - [0:0]
 | 
					:KUBE-NODEPORTS - [0:0]
 | 
				
			||||||
:KUBE-POSTROUTING - [0:0]
 | 
					:KUBE-POSTROUTING - [0:0]
 | 
				
			||||||
:KUBE-MARK-MASQ - [0:0]
 | 
					:KUBE-MARK-MASQ - [0:0]
 | 
				
			||||||
:KUBE-XLB-AQI2S6QIMU7PVVRP - [0:0]
 | 
					 | 
				
			||||||
-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
					-A KUBE-POSTROUTING -m mark ! --mark 0x4000/0x4000 -j RETURN
 | 
				
			||||||
-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
					-A KUBE-POSTROUTING -j MARK --xor-mark 0x4000
 | 
				
			||||||
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
					-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -j MASQUERADE
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user