fix namespace networkpolicy
add filter on namespace event func delete the code which do same work with namespace controller Signed-off-by: Duan Jiong <djduanjiong@gmail.com>
This commit is contained in:
@@ -3,6 +3,7 @@ package nsnetworkpolicy
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -280,12 +281,10 @@ func (c *NSNetworkPolicyController) generateNodeRule() (netv1.NetworkPolicyIngre
|
|||||||
if snatIPs != "" {
|
if snatIPs != "" {
|
||||||
ips = append(ips, strings.Split(snatIPs, ";")...)
|
ips = append(ips, strings.Split(snatIPs, ";")...)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, address := range node.Status.Addresses {
|
|
||||||
ips = append(ips, address.Address)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sort.Strings(ips)
|
||||||
|
|
||||||
for _, ip := range ips {
|
for _, ip := range ips {
|
||||||
cidr, err := stringToCIDR(ip)
|
cidr, err := stringToCIDR(ip)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -339,15 +338,17 @@ func (c *NSNetworkPolicyController) nsEnqueue(ns *corev1.Namespace) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
klog.V(4).Infof("Enqueue namespace %s", ns.Name)
|
workspaceName := ns.Labels[constants.WorkspaceLabelKey]
|
||||||
|
if workspaceName == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
c.nsQueue.Add(key)
|
c.nsQueue.Add(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *NSNetworkPolicyController) addWorkspace(newObj interface{}) {
|
func (c *NSNetworkPolicyController) addWorkspace(newObj interface{}) {
|
||||||
new := newObj.(*workspacev1alpha1.Workspace)
|
new := newObj.(*workspacev1alpha1.Workspace)
|
||||||
|
|
||||||
klog.V(4).Infof("Add workspace %s", new.Name)
|
|
||||||
|
|
||||||
label := labels.SelectorFromSet(labels.Set{constants.WorkspaceLabelKey: new.Name})
|
label := labels.SelectorFromSet(labels.Set{constants.WorkspaceLabelKey: new.Name})
|
||||||
nsList, err := c.namespaceInformer.Lister().List(label)
|
nsList, err := c.namespaceInformer.Lister().List(label)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -360,6 +361,18 @@ func (c *NSNetworkPolicyController) addWorkspace(newObj interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *NSNetworkPolicyController) addNode(newObj interface{}) {
|
||||||
|
nsList, err := c.namespaceInformer.Lister().List(labels.Everything())
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("Error while list namespace by label")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ns := range nsList {
|
||||||
|
c.nsEnqueue(ns)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *NSNetworkPolicyController) addNamespace(obj interface{}) {
|
func (c *NSNetworkPolicyController) addNamespace(obj interface{}) {
|
||||||
ns := obj.(*corev1.Namespace)
|
ns := obj.(*corev1.Namespace)
|
||||||
|
|
||||||
@@ -368,8 +381,6 @@ func (c *NSNetworkPolicyController) addNamespace(obj interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
klog.V(4).Infof("Add namespace %s", ns.Name)
|
|
||||||
|
|
||||||
c.nsEnqueue(ns)
|
c.nsEnqueue(ns)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,17 +392,7 @@ func isNetworkIsolateEnabled(ns *corev1.Namespace) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func hadNamespaceLabel(ns *corev1.Namespace) bool {
|
|
||||||
if ns.Annotations[constants.NamespaceLabelKey] == ns.Name {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *NSNetworkPolicyController) syncNs(key string) error {
|
func (c *NSNetworkPolicyController) syncNs(key string) error {
|
||||||
klog.V(4).Infof("Sync namespace %s", key)
|
|
||||||
|
|
||||||
_, name, err := cache.SplitMetaNamespaceKey(key)
|
_, name, err := cache.SplitMetaNamespaceKey(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("Not a valid controller key %s, %#v", key, err)
|
klog.Errorf("Not a valid controller key %s, %#v", key, err)
|
||||||
@@ -411,9 +412,9 @@ func (c *NSNetworkPolicyController) syncNs(key string) error {
|
|||||||
|
|
||||||
workspaceName := ns.Labels[constants.WorkspaceLabelKey]
|
workspaceName := ns.Labels[constants.WorkspaceLabelKey]
|
||||||
if workspaceName == "" {
|
if workspaceName == "" {
|
||||||
klog.Error("Workspace name should not be empty")
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
wksp, err := c.workspaceInformer.Lister().Get(workspaceName)
|
wksp, err := c.workspaceInformer.Lister().Get(workspaceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//Should not be here
|
//Should not be here
|
||||||
@@ -425,16 +426,6 @@ func (c *NSNetworkPolicyController) syncNs(key string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
//Maybe some ns not labeled
|
|
||||||
if !hadNamespaceLabel(ns) {
|
|
||||||
ns.Labels[constants.NamespaceLabelKey] = ns.Name
|
|
||||||
_, err := c.client.CoreV1().Namespaces().Update(ns)
|
|
||||||
if err != nil {
|
|
||||||
//Just log, label can also be added by namespace controller
|
|
||||||
klog.Errorf("cannot label namespace %s", ns.Name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
matchWorkspace := false
|
matchWorkspace := false
|
||||||
delete := false
|
delete := false
|
||||||
nsnpList, _ := c.informer.Lister().NamespaceNetworkPolicies(ns.Name).List(labels.Everything())
|
nsnpList, _ := c.informer.Lister().NamespaceNetworkPolicies(ns.Name).List(labels.Everything())
|
||||||
@@ -611,7 +602,7 @@ func NewNSNetworkPolicyController(
|
|||||||
AddFunc: controller.addWorkspace,
|
AddFunc: controller.addWorkspace,
|
||||||
UpdateFunc: func(oldObj, newObj interface{}) {
|
UpdateFunc: func(oldObj, newObj interface{}) {
|
||||||
old := oldObj.(*workspacev1alpha1.Workspace)
|
old := oldObj.(*workspacev1alpha1.Workspace)
|
||||||
new := oldObj.(*workspacev1alpha1.Workspace)
|
new := newObj.(*workspacev1alpha1.Workspace)
|
||||||
if old.Spec.NetworkIsolation == new.Spec.NetworkIsolation {
|
if old.Spec.NetworkIsolation == new.Spec.NetworkIsolation {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -619,12 +610,29 @@ func NewNSNetworkPolicyController(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
namespaceInformer.Informer().AddEventHandlerWithResyncPeriod(cache.ResourceEventHandlerFuncs{
|
nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||||
|
AddFunc: controller.addNode,
|
||||||
|
UpdateFunc: func(oldObj, newObj interface{}) {
|
||||||
|
old := oldObj.(*corev1.Node)
|
||||||
|
new := newObj.(*corev1.Node)
|
||||||
|
if old.Annotations[NodeNSNPAnnotationKey] == new.Annotations[NodeNSNPAnnotationKey] {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
controller.addNode(newObj)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
namespaceInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: controller.addNamespace,
|
AddFunc: controller.addNamespace,
|
||||||
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
|
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
|
||||||
|
old := oldObj.(*corev1.Namespace)
|
||||||
|
new := newObj.(*corev1.Namespace)
|
||||||
|
if old.Annotations[NamespaceNPAnnotationKey] == new.Annotations[NamespaceNPAnnotationKey] {
|
||||||
|
return
|
||||||
|
}
|
||||||
controller.addNamespace(newObj)
|
controller.addNamespace(newObj)
|
||||||
},
|
},
|
||||||
}, defaultSleepDuration)
|
})
|
||||||
|
|
||||||
nsnpInformer.Informer().AddEventHandlerWithResyncPeriod(cache.ResourceEventHandlerFuncs{
|
nsnpInformer.Informer().AddEventHandlerWithResyncPeriod(cache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: func(obj interface{}) {
|
AddFunc: func(obj interface{}) {
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ func (c *k8sPolicyController) Start(stopCh <-chan struct{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *k8sPolicyController) Set(np *netv1.NetworkPolicy) error {
|
func (c *k8sPolicyController) Set(np *netv1.NetworkPolicy) error {
|
||||||
klog.V(4).Infof("Set NetworkPolicy %s/%s %+v", np.Namespace, np.Name, np)
|
|
||||||
// Add to cache.
|
// Add to cache.
|
||||||
k := c.GetKey(np.Name, np.Namespace)
|
k := c.GetKey(np.Name, np.Namespace)
|
||||||
c.resourceCache.Set(k, *np)
|
c.resourceCache.Set(k, *np)
|
||||||
@@ -59,7 +58,6 @@ func (c *k8sPolicyController) Set(np *netv1.NetworkPolicy) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *k8sPolicyController) Delete(key string) {
|
func (c *k8sPolicyController) Delete(key string) {
|
||||||
klog.V(4).Infof("Delete NetworkPolicy %s", key)
|
|
||||||
c.resourceCache.Delete(key)
|
c.resourceCache.Delete(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user