in controllers/policyendpoints_controller.go [361:426]
func (r *PolicyEndpointsReconciler) cleanupPod(ctx context.Context, targetPod types.NamespacedName,
policyEndpoint string, isDeleteFlow bool) error {
var err error
var ingressRules, egressRules []ebpf.EbpfFirewallRules
var isIngressIsolated, isEgressIsolated bool
noActiveIngressPolicies, noActiveEgressPolicies := false, false
podIdentifier := utils.GetPodIdentifier(targetPod.Name, targetPod.Namespace, r.log)
// Detach eBPF probes attached to the local pods (if required). We should detach eBPF probes if this
// is the only PolicyEndpoint resource that applies to this pod. If not, just update the Ingress/Egress Map contents
if _, ok := r.podIdentifierToPolicyEndpointMap.Load(podIdentifier); ok {
ingressRules, egressRules, isIngressIsolated, isEgressIsolated, err = r.deriveIngressAndEgressFirewallRules(ctx, podIdentifier, targetPod.Namespace,
policyEndpoint, isDeleteFlow)
if err != nil {
r.log.Error(err, "Error Parsing policy Endpoint resource", "name ", policyEndpoint)
return err
}
if len(ingressRules) == 0 && !isIngressIsolated {
noActiveIngressPolicies = true
}
if len(egressRules) == 0 && !isEgressIsolated {
noActiveEgressPolicies = true
}
// We update pod_state to default allow/deny if there are no other policies applied
if noActiveIngressPolicies && noActiveEgressPolicies {
state := DEFAULT_ALLOW
if utils.IsStrictMode(r.networkPolicyMode) {
state = DEFAULT_DENY
}
r.log.Info("No active policies. Updating pod_state map for ", "podIdentifier: ", podIdentifier, "networkPolicyMode: ", r.networkPolicyMode)
err = r.GeteBPFClient().UpdatePodStateEbpfMaps(podIdentifier, state, true, true)
if err != nil {
r.log.Error(err, "Map update(s) failed for, ", "podIdentifier ", podIdentifier)
return err
}
} else {
// We've additional PolicyEndpoint resources configured against this pod
// Update the Maps and move on
r.log.Info("Active policies against this pod. Skip Detaching probes and Update Maps... ")
if noActiveIngressPolicies {
// No active ingress rules for this pod, but we only should land here
// if there are active egress rules. So, we need to add an allow-all entry to ingress rule set
r.log.Info("No Ingress rules and no ingress isolation - Appending catch all entry")
r.addCatchAllEntry(ctx, &ingressRules)
}
if noActiveEgressPolicies {
// No active egress rules for this pod but we only should land here
// if there are active ingress rules. So, we need to add an allow-all entry to egress rule set
r.log.Info("No Egress rules and no egress isolation - Appending catch all entry")
r.addCatchAllEntry(ctx, &egressRules)
}
err = r.updateeBPFMaps(ctx, podIdentifier, ingressRules, egressRules)
if err != nil {
r.log.Info("Map Update failed for ", "policyEndpoint: ")
return err
}
}
}
return nil
}