mirror of
https://github.com/cloudnativelabs/kube-router.git
synced 2025-10-07 07:51:26 +02:00
change ACCEPT to RETURN with mark when a netpol is matched so that we run through (#915)
all the applicable network policies for a flow
This commit is contained in:
parent
4d6b0b818f
commit
e858e2626f
@ -756,11 +756,21 @@ func (npc *NetworkPolicyController) appendRuleToPolicyChain(iptablesCmdHandler *
|
|||||||
if dPort != "" {
|
if dPort != "" {
|
||||||
args = append(args, "--dport", dPort)
|
args = append(args, "--dport", dPort)
|
||||||
}
|
}
|
||||||
args = append(args, "-j", "ACCEPT")
|
|
||||||
err := iptablesCmdHandler.AppendUnique("filter", policyChainName, args...)
|
markComment := "rule to mark traffic matching a network policy"
|
||||||
|
markArgs := append(args, "-j", "MARK", "-m", "comment", "--comment", markComment, "--set-xmark", "0x10000/0x10000")
|
||||||
|
err := iptablesCmdHandler.AppendUnique("filter", policyChainName, markArgs...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
returnComment := "rule to RETURN traffic matching a network policy"
|
||||||
|
returnArgs := append(args, "-m", "comment", "--comment", returnComment, "-m", "mark", "--mark", "0x10000/0x10000", "-j", "RETURN")
|
||||||
|
err = iptablesCmdHandler.AppendUnique("filter", policyChainName, returnArgs...)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,6 +783,33 @@ func (npc *NetworkPolicyController) syncPodFirewallChains(networkPoliciesInfo []
|
|||||||
glog.Fatalf("Failed to initialize iptables executor: %s", err.Error())
|
glog.Fatalf("Failed to initialize iptables executor: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dropUnmarkedTrafficRules := func(podName, podNamespace, podFwChainName string) error {
|
||||||
|
// add rule to log the packets that will be dropped due to network policy enforcement
|
||||||
|
comment := "rule to log dropped traffic POD name:" + podName + " namespace: " + podNamespace
|
||||||
|
args := []string{"-m", "comment", "--comment", comment, "-m", "mark", "!", "--mark", "0x10000/0x10000", "-j", "NFLOG", "--nflog-group", "100", "-m", "limit", "--limit", "10/minute", "--limit-burst", "10"}
|
||||||
|
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// add rule to DROP if no applicable network policy permits the traffic
|
||||||
|
comment = "rule to REJECT traffic destined for POD name:" + podName + " namespace: " + podNamespace
|
||||||
|
args = []string{"-m", "comment", "--comment", comment, "-m", "mark", "!", "--mark", "0x10000/0x10000", "-j", "REJECT"}
|
||||||
|
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset mark to let traffic pass through rest of the chains
|
||||||
|
args = []string{"-j", "MARK", "--set-mark", "0"}
|
||||||
|
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// loop through the pods running on the node which to which ingress network policies to be applied
|
// loop through the pods running on the node which to which ingress network policies to be applied
|
||||||
ingressNetworkPolicyEnabledPods, err := npc.getIngressNetworkPolicyEnabledPods(networkPoliciesInfo, npc.nodeIP.String())
|
ingressNetworkPolicyEnabledPods, err := npc.getIngressNetworkPolicyEnabledPods(networkPoliciesInfo, npc.nodeIP.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -888,20 +925,9 @@ func (npc *NetworkPolicyController) syncPodFirewallChains(networkPoliciesInfo []
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add rule to log the packets that will be dropped due to network policy enforcement
|
err = dropUnmarkedTrafficRules(pod.name, pod.namespace, podFwChainName)
|
||||||
comment = "rule to log dropped traffic POD name:" + pod.name + " namespace: " + pod.namespace
|
|
||||||
args = []string{"-m", "comment", "--comment", comment, "-j", "NFLOG", "--nflog-group", "100", "-m", "limit", "--limit", "10/minute", "--limit-burst", "10"}
|
|
||||||
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
return nil, err
|
||||||
}
|
|
||||||
|
|
||||||
// add default DROP rule at the end of chain
|
|
||||||
comment = "default rule to REJECT traffic destined for POD name:" + pod.name + " namespace: " + pod.namespace
|
|
||||||
args = []string{"-m", "comment", "--comment", comment, "-j", "REJECT"}
|
|
||||||
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,20 +1024,9 @@ func (npc *NetworkPolicyController) syncPodFirewallChains(networkPoliciesInfo []
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add rule to log the packets that will be dropped due to network policy enforcement
|
err = dropUnmarkedTrafficRules(pod.name, pod.namespace, podFwChainName)
|
||||||
comment = "rule to log dropped traffic POD name:" + pod.name + " namespace: " + pod.namespace
|
|
||||||
args = []string{"-m", "comment", "--comment", comment, "-j", "NFLOG", "--nflog-group", "100", "-m", "limit", "--limit", "10/minute", "--limit-burst", "10"}
|
|
||||||
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
return nil, err
|
||||||
}
|
|
||||||
|
|
||||||
// add default DROP rule at the end of chain
|
|
||||||
comment = "default rule to REJECT traffic destined for POD name:" + pod.name + " namespace: " + pod.namespace
|
|
||||||
args = []string{"-m", "comment", "--comment", comment, "-j", "REJECT"}
|
|
||||||
err = iptablesCmdHandler.AppendUnique("filter", podFwChainName, args...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Failed to run iptables command: %s", err.Error())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user