@@ -1113,25 +1113,10 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
11131113			} else  {
11141114				ingressRule .matchAllSource  =  false 
11151115				var  matchingPods  []* api.Pod 
1116- 				var  err  error 
11171116				for  _ , peer  :=  range  specIngressRule .From  {
1118- 					// spec must have either of PodSelector or NamespaceSelector 
1119- 					if  peer .PodSelector  !=  nil  {
1120- 						matchingPods , err  =  npc .ListPodsByNamespaceAndLabels (policy .Namespace ,
1121- 							peer .PodSelector .MatchLabels )
1122- 					} else  if  peer .NamespaceSelector  !=  nil  {
1123- 						namespaces , err  :=  npc .ListNamespaceByLabels (peer .NamespaceSelector .MatchLabels )
1124- 						if  err  !=  nil  {
1125- 							return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1126- 						}
1127- 						for  _ , namespace  :=  range  namespaces  {
1128- 							namespacePods , err  :=  npc .ListPodsByNamespaceAndLabels (namespace .Name , nil )
1129- 							if  err  !=  nil  {
1130- 								return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1131- 							}
1132- 							matchingPods  =  append (matchingPods , namespacePods ... )
1133- 						}
1134- 					} else  if  peer .IPBlock  !=  nil  {
1117+ 					peerPods , err  :=  npc .evalPeer (policy , peer )
1118+ 					matchingPods  =  append (matchingPods , peerPods ... )
1119+ 					if  peer .PodSelector  ==  nil  &&  peer .NamespaceSelector  ==  nil  &&  peer .IPBlock  !=  nil  {
11351120						ingressRule .cidrs  =  append (ingressRule .cidrs , peer .IPBlock .CIDR )
11361121					}
11371122					if  err  ==  nil  {
@@ -1177,25 +1162,10 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
11771162			} else  {
11781163				egressRule .matchAllDestinations  =  false 
11791164				var  matchingPods  []* api.Pod 
1180- 				var  err  error 
11811165				for  _ , peer  :=  range  specEgressRule .To  {
1182- 					// spec must have either of PodSelector or NamespaceSelector 
1183- 					if  peer .PodSelector  !=  nil  {
1184- 						matchingPods , err  =  npc .ListPodsByNamespaceAndLabels (policy .Namespace ,
1185- 							peer .PodSelector .MatchLabels )
1186- 					} else  if  peer .NamespaceSelector  !=  nil  {
1187- 						namespaces , err  :=  npc .ListNamespaceByLabels (peer .NamespaceSelector .MatchLabels )
1188- 						if  err  !=  nil  {
1189- 							return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1190- 						}
1191- 						for  _ , namespace  :=  range  namespaces  {
1192- 							namespacePods , err  :=  npc .ListPodsByNamespaceAndLabels (namespace .Name , nil )
1193- 							if  err  !=  nil  {
1194- 								return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1195- 							}
1196- 							matchingPods  =  append (matchingPods , namespacePods ... )
1197- 						}
1198- 					} else  if  peer .IPBlock  !=  nil  {
1166+ 					peerPods , err  :=  npc .evalPeer (policy , peer )
1167+ 					matchingPods  =  append (matchingPods , peerPods ... )
1168+ 					if  peer .PodSelector  ==  nil  &&  peer .NamespaceSelector  ==  nil  &&  peer .IPBlock  !=  nil  {
11991169						egressRule .cidrs  =  append (egressRule .cidrs , peer .IPBlock .CIDR )
12001170					}
12011171					if  err  ==  nil  {
@@ -1218,6 +1188,36 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
12181188	return  & NetworkPolicies , nil 
12191189}
12201190
1191+ func  (npc  * NetworkPolicyController ) evalPeer (policy  * networking.NetworkPolicy , peer  networking.NetworkPolicyPeer ) ([]* api.Pod , error ) {
1192+ 
1193+ 	var  matchingPods  []* api.Pod 
1194+ 	matchingPods  =  make ([]* api.Pod , 0 )
1195+ 	var  err  error 
1196+ 	// spec can have both PodSelector AND NamespaceSelector 
1197+ 	if  peer .NamespaceSelector  !=  nil  {
1198+ 		namespaces , err  :=  npc .ListNamespaceByLabels (peer .NamespaceSelector .MatchLabels )
1199+ 		if  err  !=  nil  {
1200+ 			return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1201+ 		}
1202+ 
1203+ 		var  podSelectorLabels  map [string ]string 
1204+ 		if  peer .PodSelector  !=  nil  {
1205+ 			podSelectorLabels  =  peer .PodSelector .MatchLabels 
1206+ 		}
1207+ 		for  _ , namespace  :=  range  namespaces  {
1208+ 			namespacePods , err  :=  npc .ListPodsByNamespaceAndLabels (namespace .Name , podSelectorLabels )
1209+ 			if  err  !=  nil  {
1210+ 				return  nil , errors .New ("Failed to build network policies info due to "  +  err .Error ())
1211+ 			}
1212+ 			matchingPods  =  append (matchingPods , namespacePods ... )
1213+ 		}
1214+ 	} else  if  peer .PodSelector  !=  nil  {
1215+ 		matchingPods , err  =  npc .ListPodsByNamespaceAndLabels (policy .Namespace , peer .PodSelector .MatchLabels )
1216+ 	}
1217+ 
1218+ 	return  matchingPods , err 
1219+ }
1220+ 
12211221func  (npc  * NetworkPolicyController ) ListPodsByNamespaceAndLabels (namespace  string , labelsToMatch  labels.Set ) (ret  []* api.Pod , err  error ) {
12221222	podLister  :=  listers .NewPodLister (npc .podLister )
12231223	allMatchedNameSpacePods , err  :=  podLister .Pods (namespace ).List (labelsToMatch .AsSelector ())
0 commit comments