Skip to content

Commit d0dbf56

Browse files
committed
feat(netpol): add annotation for different policy enforcements
Signed-off-by: SkalaNetworks <contact@skala.network>
1 parent dfe76cd commit d0dbf56

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

pkg/controller/network_policy.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,14 @@ func (c *Controller) handleUpdateNp(key string) error {
183183
}
184184

185185
for _, protocol := range protocolSet.List() {
186-
defaultBlockExceptions, err := c.OVNNbClient.UpdateDefaultBlockExceptionsACLOps(npName, pgName, np.Namespace, ovnnb.ACLDirectionToLport, protocol)
187-
if err != nil {
188-
klog.Errorf("failed to set default block exceptions for ingress acl: %v", err)
189-
return fmt.Errorf("failed to set default block exceptions for ingress acl: %w", err)
186+
if isNetworkPolicyEnforcementLax(np) {
187+
defaultBlockExceptions, err := c.OVNNbClient.UpdateDefaultBlockExceptionsACLOps(npName, pgName, np.Namespace, ovnnb.ACLDirectionToLport, protocol)
188+
if err != nil {
189+
klog.Errorf("failed to set default block exceptions for ingress acl: %v", err)
190+
return fmt.Errorf("failed to set default block exceptions for ingress acl: %w", err)
191+
}
192+
ingressACLOps = append(ingressACLOps, defaultBlockExceptions...)
190193
}
191-
ingressACLOps = append(ingressACLOps, defaultBlockExceptions...)
192194

193195
for idx, npr := range np.Spec.Ingress {
194196
// A single address set must contain addresses of the same type and the name must be unique within table, so IPv4 and IPv6 address set should be different
@@ -328,12 +330,14 @@ func (c *Controller) handleUpdateNp(key string) error {
328330
}
329331

330332
for _, protocol := range protocolSet.List() {
331-
defaultBlockExceptions, err := c.OVNNbClient.UpdateDefaultBlockExceptionsACLOps(npName, pgName, np.Namespace, ovnnb.ACLDirectionFromLport, protocol)
332-
if err != nil {
333-
klog.Errorf("failed to set default block exceptions for ingress acl: %v", err)
334-
return fmt.Errorf("failed to set default block exceptions for ingress acl: %w", err)
333+
if isNetworkPolicyEnforcementLax(np) {
334+
defaultBlockExceptions, err := c.OVNNbClient.UpdateDefaultBlockExceptionsACLOps(npName, pgName, np.Namespace, ovnnb.ACLDirectionFromLport, protocol)
335+
if err != nil {
336+
klog.Errorf("failed to set default block exceptions for ingress acl: %v", err)
337+
return fmt.Errorf("failed to set default block exceptions for ingress acl: %w", err)
338+
}
339+
egressACLOps = append(egressACLOps, defaultBlockExceptions...)
335340
}
336-
egressACLOps = append(egressACLOps, defaultBlockExceptions...)
337341

338342
for idx, npr := range np.Spec.Egress {
339343
// A single address set must contain addresses of the same type and the name must be unique within table, so IPv4 and IPv6 address set should be different
@@ -808,3 +812,12 @@ func isNamespaceMatchNetworkPolicy(ns *corev1.Namespace, policy *netv1.NetworkPo
808812
}
809813
return false
810814
}
815+
816+
func isNetworkPolicyEnforcementLax(policy *netv1.NetworkPolicy) bool {
817+
// User provided a custom enforcement through annotations
818+
if value, ok := policy.Annotations[util.NetworkPolicyEnforcementAnnotation]; ok {
819+
return value == "lax"
820+
}
821+
822+
return false
823+
}

pkg/util/const.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,20 +100,21 @@ const (
100100

101101
OvsDpTypeLabel = "ovn.kubernetes.io/ovs_dp_type"
102102

103-
VpcNameLabel = "ovn.kubernetes.io/vpc"
104-
SubnetNameLabel = "ovn.kubernetes.io/subnet"
105-
ICGatewayLabel = "ovn.kubernetes.io/ic-gw"
106-
ExGatewayLabel = "ovn.kubernetes.io/external-gw"
107-
NodeExtGwLabel = "ovn.kubernetes.io/node-ext-gw"
108-
VpcNatGatewayLabel = "ovn.kubernetes.io/vpc-nat-gw"
109-
IPReservedLabel = "ovn.kubernetes.io/ip_reserved"
110-
VpcNatGatewayNameLabel = "ovn.kubernetes.io/vpc-nat-gw-name"
111-
VpcLbLabel = "ovn.kubernetes.io/vpc_lb"
112-
VpcDNSNameLabel = "ovn.kubernetes.io/vpc-dns"
113-
QoSLabel = "ovn.kubernetes.io/qos"
114-
NodeNameLabel = "ovn.kubernetes.io/node-name"
115-
NetworkPolicyLogAnnotation = "ovn.kubernetes.io/enable_log"
116-
ACLActionsLogAnnotation = "ovn.kubernetes.io/log_acl_actions"
103+
VpcNameLabel = "ovn.kubernetes.io/vpc"
104+
SubnetNameLabel = "ovn.kubernetes.io/subnet"
105+
ICGatewayLabel = "ovn.kubernetes.io/ic-gw"
106+
ExGatewayLabel = "ovn.kubernetes.io/external-gw"
107+
NodeExtGwLabel = "ovn.kubernetes.io/node-ext-gw"
108+
VpcNatGatewayLabel = "ovn.kubernetes.io/vpc-nat-gw"
109+
IPReservedLabel = "ovn.kubernetes.io/ip_reserved"
110+
VpcNatGatewayNameLabel = "ovn.kubernetes.io/vpc-nat-gw-name"
111+
VpcLbLabel = "ovn.kubernetes.io/vpc_lb"
112+
VpcDNSNameLabel = "ovn.kubernetes.io/vpc-dns"
113+
QoSLabel = "ovn.kubernetes.io/qos"
114+
NodeNameLabel = "ovn.kubernetes.io/node-name"
115+
NetworkPolicyLogAnnotation = "ovn.kubernetes.io/enable_log"
116+
NetworkPolicyEnforcementAnnotation = "ovn.kubernetes.io/network_policy_enforcement"
117+
ACLActionsLogAnnotation = "ovn.kubernetes.io/log_acl_actions"
117118

118119
VpcEgressGatewayLabel = "ovn.kubernetes.io/vpc-egress-gateway"
119120
GenerateHashAnnotation = "ovn.kubernetes.io/generate-hash"

0 commit comments

Comments
 (0)