@@ -1113,25 +1113,10 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
1113
1113
} else {
1114
1114
ingressRule .matchAllSource = false
1115
1115
var matchingPods []* api.Pod
1116
- var err error
1117
1116
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 {
1135
1120
ingressRule .cidrs = append (ingressRule .cidrs , peer .IPBlock .CIDR )
1136
1121
}
1137
1122
if err == nil {
@@ -1177,25 +1162,10 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
1177
1162
} else {
1178
1163
egressRule .matchAllDestinations = false
1179
1164
var matchingPods []* api.Pod
1180
- var err error
1181
1165
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 {
1199
1169
egressRule .cidrs = append (egressRule .cidrs , peer .IPBlock .CIDR )
1200
1170
}
1201
1171
if err == nil {
@@ -1218,6 +1188,36 @@ func (npc *NetworkPolicyController) buildNetworkPoliciesInfo() (*[]networkPolicy
1218
1188
return & NetworkPolicies , nil
1219
1189
}
1220
1190
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
+
1221
1221
func (npc * NetworkPolicyController ) ListPodsByNamespaceAndLabels (namespace string , labelsToMatch labels.Set ) (ret []* api.Pod , err error ) {
1222
1222
podLister := listers .NewPodLister (npc .podLister )
1223
1223
allMatchedNameSpacePods , err := podLister .Pods (namespace ).List (labelsToMatch .AsSelector ())
0 commit comments