@@ -14,23 +14,25 @@ import (
1414)
1515
1616type namespace struct {
17- name string
18- setMap map [string ]string
19- podMap map [types.UID ]* corev1.Pod
20- npMap map [string ]* networkingv1.NetworkPolicy
21- ipsMgr * ipsm.IpsetManager
22- iptMgr * iptm.IptablesManager
17+ name string
18+ setMap map [string ]string
19+ podMap map [types.UID ]* corev1.Pod
20+ rawNpMap map [string ]* networkingv1.NetworkPolicy
21+ processedNpMap map [string ]* networkingv1.NetworkPolicy
22+ ipsMgr * ipsm.IpsetManager
23+ iptMgr * iptm.IptablesManager
2324}
2425
2526// newNS constructs a new namespace object.
2627func newNs (name string ) (* namespace , error ) {
2728 ns := & namespace {
28- name : name ,
29- setMap : make (map [string ]string ),
30- podMap : make (map [types.UID ]* corev1.Pod ),
31- npMap : make (map [string ]* networkingv1.NetworkPolicy ),
32- ipsMgr : ipsm .NewIpsetManager (),
33- iptMgr : iptm .NewIptablesManager (),
29+ name : name ,
30+ setMap : make (map [string ]string ),
31+ podMap : make (map [types.UID ]* corev1.Pod ),
32+ rawNpMap : make (map [string ]* networkingv1.NetworkPolicy ),
33+ processedNpMap : make (map [string ]* networkingv1.NetworkPolicy ),
34+ ipsMgr : ipsm .NewIpsetManager (),
35+ iptMgr : iptm .NewIptablesManager (),
3436 }
3537
3638 return ns , nil
@@ -40,16 +42,26 @@ func isSystemNs(nsObj *corev1.Namespace) bool {
4042 return nsObj .ObjectMeta .Name == util .KubeSystemFlag
4143}
4244
45+ func (ns * namespace ) policyExists (npObj * networkingv1.NetworkPolicy ) bool {
46+ if np , exists := ns .rawNpMap [npObj .ObjectMeta .Name ]; exists {
47+ if isSamePolicy (np , npObj ) {
48+ return true
49+ }
50+ }
51+
52+ return false
53+ }
54+
4355// InitAllNsList syncs all-namespace ipset list.
4456func (npMgr * NetworkPolicyManager ) InitAllNsList () error {
4557 allNs := npMgr .nsMap [util .KubeAllNamespacesFlag ]
46- for nsName := range npMgr .nsMap {
47- if nsName == util .KubeAllNamespacesFlag {
58+ for ns := range npMgr .nsMap {
59+ if ns == util .KubeAllNamespacesFlag {
4860 continue
4961 }
5062
51- if err := allNs .ipsMgr .AddToList (util .KubeAllNamespacesFlag , nsName ); err != nil {
52- log .Errorf ("Error: failed to add namespace set %s to list %s" , nsName , util .KubeAllNamespacesFlag )
63+ if err := allNs .ipsMgr .AddToList (util .KubeAllNamespacesFlag , ns ); err != nil {
64+ log .Errorf ("Error: failed to add namespace set %s to ipset list %s" , ns , util .KubeAllNamespacesFlag )
5365 return err
5466 }
5567 }
@@ -60,13 +72,13 @@ func (npMgr *NetworkPolicyManager) InitAllNsList() error {
6072// UninitAllNsList cleans all-namespace ipset list.
6173func (npMgr * NetworkPolicyManager ) UninitAllNsList () error {
6274 allNs := npMgr .nsMap [util .KubeAllNamespacesFlag ]
63- for nsName := range npMgr .nsMap {
64- if nsName == util .KubeAllNamespacesFlag {
75+ for ns := range npMgr .nsMap {
76+ if ns == util .KubeAllNamespacesFlag {
6577 continue
6678 }
6779
68- if err := allNs .ipsMgr .DeleteFromList (util .KubeAllNamespacesFlag , nsName ); err != nil {
69- log .Errorf ("Error: failed to delete namespace set %s from list %s" , nsName , util .KubeAllNamespacesFlag )
80+ if err := allNs .ipsMgr .DeleteFromList (util .KubeAllNamespacesFlag , ns ); err != nil {
81+ log .Errorf ("Error: failed to delete namespace set %s from list %s" , ns , util .KubeAllNamespacesFlag )
7082 return err
7183 }
7284 }
@@ -81,8 +93,8 @@ func (npMgr *NetworkPolicyManager) AddNamespace(nsObj *corev1.Namespace) error {
8193
8294 var err error
8395
84- nsName , nsNs , nsLabel := nsObj . ObjectMeta . Name , nsObj .ObjectMeta .Namespace , nsObj .ObjectMeta .Labels
85- log .Printf ("NAMESPACE CREATING: [%s/%s/%+ v]" , nsName , nsNs , nsLabel )
96+ nsName , nsLabel := "ns-" + nsObj .ObjectMeta .Name , nsObj .ObjectMeta .Labels
97+ log .Printf ("NAMESPACE CREATING: [%s/%v]" , nsName , nsLabel )
8698
8799 ipsMgr := npMgr .nsMap [util .KubeAllNamespacesFlag ].ipsMgr
88100 // Create ipset for the namespace.
@@ -97,16 +109,21 @@ func (npMgr *NetworkPolicyManager) AddNamespace(nsObj *corev1.Namespace) error {
97109 }
98110
99111 // Add the namespace to its label's ipset list.
100- var labelKeys []string
101112 nsLabels := nsObj .ObjectMeta .Labels
102113 for nsLabelKey , nsLabelVal := range nsLabels {
103- labelKey := util . GetNsIpsetName ( nsLabelKey , nsLabelVal )
114+ labelKey := "ns-" + nsLabelKey
104115 log .Printf ("Adding namespace %s to ipset list %s" , nsName , labelKey )
105116 if err = ipsMgr .AddToList (labelKey , nsName ); err != nil {
106117 log .Errorf ("Error: failed to add namespace %s to ipset list %s" , nsName , labelKey )
107118 return err
108119 }
109- labelKeys = append (labelKeys , labelKey )
120+
121+ label := "ns-" + nsLabelKey + ":" + nsLabelVal
122+ log .Printf ("Adding namespace %s to ipset list %s" , nsName , label )
123+ if err = ipsMgr .AddToList (label , nsName ); err != nil {
124+ log .Errorf ("Error: failed to add namespace %s to ipset list %s" , nsName , label )
125+ return err
126+ }
110127 }
111128
112129 ns , err := newNs (nsName )
@@ -122,11 +139,11 @@ func (npMgr *NetworkPolicyManager) AddNamespace(nsObj *corev1.Namespace) error {
122139func (npMgr * NetworkPolicyManager ) UpdateNamespace (oldNsObj * corev1.Namespace , newNsObj * corev1.Namespace ) error {
123140 var err error
124141
125- oldNsName , oldNsNs , oldNsLabel := oldNsObj . ObjectMeta . Name , oldNsObj .ObjectMeta .Namespace , oldNsObj .ObjectMeta .Labels
126- newNsName , newNsNs , newNsLabel := newNsObj . ObjectMeta . Name , newNsObj .ObjectMeta .Namespace , newNsObj .ObjectMeta .Labels
142+ oldNsNs , oldNsLabel := "ns-" + oldNsObj .ObjectMeta .Name , oldNsObj .ObjectMeta .Labels
143+ newNsNs , newNsLabel := "ns-" + newNsObj .ObjectMeta .Name , newNsObj .ObjectMeta .Labels
127144 log .Printf (
128- "NAMESPACE UPDATING:\n old namespace: [%s/%s/%+ v]\n new namespace: [%s/%s/%+ v]" ,
129- oldNsName , oldNsNs , oldNsLabel , newNsName , newNsNs , newNsLabel ,
145+ "NAMESPACE UPDATING:\n old namespace: [%s/%v]\n new namespace: [%s/%v]" ,
146+ oldNsNs , oldNsLabel , newNsNs , newNsLabel ,
130147 )
131148
132149 if err = npMgr .DeleteNamespace (oldNsObj ); err != nil {
@@ -149,8 +166,8 @@ func (npMgr *NetworkPolicyManager) DeleteNamespace(nsObj *corev1.Namespace) erro
149166
150167 var err error
151168
152- nsName , nsNs , nsLabel := nsObj . ObjectMeta . Name , nsObj .ObjectMeta .Namespace , nsObj .ObjectMeta .Labels
153- log .Printf ("NAMESPACE DELETING: [%s/%s/%+ v]" , nsName , nsNs , nsLabel )
169+ nsName , nsLabel := "ns-" + nsObj .ObjectMeta .Name , nsObj .ObjectMeta .Labels
170+ log .Printf ("NAMESPACE DELETING: [%s/%v]" , nsName , nsLabel )
154171
155172 _ , exists := npMgr .nsMap [nsName ]
156173 if ! exists {
@@ -159,16 +176,21 @@ func (npMgr *NetworkPolicyManager) DeleteNamespace(nsObj *corev1.Namespace) erro
159176
160177 // Delete the namespace from its label's ipset list.
161178 ipsMgr := npMgr .nsMap [util .KubeAllNamespacesFlag ].ipsMgr
162- var labelKeys []string
163179 nsLabels := nsObj .ObjectMeta .Labels
164180 for nsLabelKey , nsLabelVal := range nsLabels {
165- labelKey := util . GetNsIpsetName ( nsLabelKey , nsLabelVal )
181+ labelKey := "ns-" + nsLabelKey
166182 log .Printf ("Deleting namespace %s from ipset list %s" , nsName , labelKey )
167183 if err = ipsMgr .DeleteFromList (labelKey , nsName ); err != nil {
168184 log .Errorf ("Error: failed to delete namespace %s from ipset list %s" , nsName , labelKey )
169185 return err
170186 }
171- labelKeys = append (labelKeys , labelKey )
187+
188+ label := "ns-" + nsLabelKey + ":" + nsLabelVal
189+ log .Printf ("Deleting namespace %s from ipset list %s" , nsName , label )
190+ if err = ipsMgr .DeleteFromList (label , nsName ); err != nil {
191+ log .Errorf ("Error: failed to delete namespace %s from ipset list %s" , nsName , label )
192+ return err
193+ }
172194 }
173195
174196 // Delete the namespace from all-namespace ipset list.
0 commit comments