@@ -550,9 +550,6 @@ func (dm *KubeArmorDaemon) HandleUnknownNamespaceNsMap(container *tp.Container)
550
550
551
551
// WatchK8sPods Function
552
552
func (dm * KubeArmorDaemon ) WatchK8sPods () {
553
- var controllerName , controller , namespace string
554
- var err error
555
-
556
553
nodeName := os .Getenv ("KUBEARMOR_NODENAME" )
557
554
if nodeName == "" {
558
555
nodeName = cfg .GlobalCfg .Host
@@ -591,29 +588,43 @@ func (dm *KubeArmorDaemon) WatchK8sPods() {
591
588
pod .Metadata ["namespaceName" ] = event .Object .ObjectMeta .Namespace
592
589
pod .Metadata ["podName" ] = event .Object .ObjectMeta .Name
593
590
591
+ var controllerName , controller , namespace string
592
+ var err error
593
+
594
594
if event .Type == "ADDED" {
595
595
controllerName , controller , namespace , err = getTopLevelOwner (event .Object .ObjectMeta , event .Object .Namespace , event .Object .Kind )
596
596
if err != nil {
597
597
dm .Logger .Warnf ("Failed to get ownerRef (%s, %s)" , event .Object .ObjectMeta .Name , err .Error ())
598
598
}
599
+
600
+ owner := tp.PodOwner {
601
+ Name : controllerName ,
602
+ Ref : controller ,
603
+ Namespace : namespace ,
604
+ }
605
+
606
+ dm .OwnerInfo [pod .Metadata ["podName" ]] = owner
607
+ podOwnerName = controllerName
599
608
}
600
- _ , err := K8s .K8sClient .CoreV1 ().Pods (namespace ).Get (context .Background (), event .Object .ObjectMeta .Name , metav1.GetOptions {})
601
- if err == nil && (event .Type == "MODIFIED" || event .Type != "DELETED" ) {
609
+
610
+ // for event = "MODIFIED" we first check pod's existence to update current dm.OwnerInfo of the pod, because when pod is in terminating state then we cannot get the owner info from it.
611
+ // we do not update owner info in terminating state. After pod is deleted we delete the owner info from the map.
612
+ _ , err = K8s .K8sClient .CoreV1 ().Pods (namespace ).Get (context .Background (), event .Object .ObjectMeta .Name , metav1.GetOptions {})
613
+ if err == nil && event .Type == "MODIFIED" {
602
614
controllerName , controller , namespace , err = getTopLevelOwner (event .Object .ObjectMeta , event .Object .Namespace , event .Object .Kind )
603
615
if err != nil {
604
616
dm .Logger .Warnf ("Failed to get ownerRef (%s, %s)" , event .Object .ObjectMeta .Name , err .Error ())
605
617
}
606
- }
607
-
608
- owner := tp.PodOwner {
609
- Name : controllerName ,
610
- Ref : controller ,
611
- Namespace : namespace ,
612
- }
613
618
614
- dm .OwnerInfo [pod .Metadata ["podName" ]] = owner
619
+ owner := tp.PodOwner {
620
+ Name : controllerName ,
621
+ Ref : controller ,
622
+ Namespace : namespace ,
623
+ }
615
624
616
- podOwnerName = controllerName
625
+ dm .OwnerInfo [pod .Metadata ["podName" ]] = owner
626
+ podOwnerName = controllerName
627
+ }
617
628
618
629
//get the owner , then check if that owner has owner if...do it recusivelt until you get the no owner
619
630
0 commit comments