in pkg/resolvers/policies_for_pod.go [17:70]
func (r *defaultPolicyReferenceResolver) getReferredPoliciesForPod(ctx context.Context, pod *corev1.Pod, podOld *corev1.Pod) ([]networking.NetworkPolicy, error) {
policyList := &networking.NetworkPolicyList{}
if err := r.k8sClient.List(ctx, policyList, client.InNamespace(pod.Namespace)); err != nil {
return nil, errors.Wrap(err, "failed to fetch policies")
}
processedPolicies := sets.Set[types.NamespacedName]{}
var referredPolicies []networking.NetworkPolicy
for _, pol := range policyList.Items {
if r.isPodMatchesPolicySelector(pod, podOld, &pol) {
referredPolicies = append(referredPolicies, pol)
processedPolicies.Insert(k8s.NamespacedName(&pol))
continue
}
if r.isPodReferredOnIngressEgress(ctx, pod, &pol) {
referredPolicies = append(referredPolicies, pol)
processedPolicies.Insert(k8s.NamespacedName(&pol))
continue
}
if podOld != nil && r.isPodReferredOnIngressEgress(ctx, podOld, &pol) {
referredPolicies = append(referredPolicies, pol)
processedPolicies.Insert(k8s.NamespacedName(&pol))
}
}
r.logger.V(1).Info("Policies referred on the same namespace", "pod", k8s.NamespacedName(pod),
"policies", referredPolicies)
for _, ref := range r.policyTracker.GetPoliciesWithNamespaceReferences().UnsortedList() {
r.logger.V(1).Info("Policy containing namespace selectors", "ref", ref)
if processedPolicies.Has(ref) {
continue
}
policy := &networking.NetworkPolicy{}
if err := r.k8sClient.Get(ctx, ref, policy); err != nil {
if client.IgnoreNotFound(err) != nil {
return nil, errors.Wrap(err, "failed to get policy")
}
r.logger.V(1).Info("Policy not found", "reference", ref)
continue
}
if r.isPodReferredOnIngressEgress(ctx, pod, policy) {
referredPolicies = append(referredPolicies, *policy)
processedPolicies.Insert(k8s.NamespacedName(policy))
continue
}
if podOld != nil && r.isPodReferredOnIngressEgress(ctx, podOld, policy) {
referredPolicies = append(referredPolicies, *policy)
processedPolicies.Insert(k8s.NamespacedName(policy))
}
}
r.logger.V(1).Info("All referred policies", "pod", k8s.NamespacedName(pod), "policies", referredPolicies)
return referredPolicies, nil
}