Skip to content

Commit e4057a8

Browse files
daemon1024Prateeknandle
authored andcommitted
wip: fix v2 migration containerd
Signed-off-by: daemon1024 <[email protected]>
1 parent 52c5a9a commit e4057a8

File tree

5 files changed

+44
-13
lines changed

5 files changed

+44
-13
lines changed

KubeArmor/core/containerdHandler.go

+38-7
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ func NewContainerdHandler() *ContainerdHandler {
102102
// Subscribe to containerd events
103103

104104
// docker namespace
105+
ch.docker = context.Background()
105106
ch.docker = namespaces.WithNamespace(context.Background(), "moby")
106107

107108
dockerEventsCh, _ := client.EventService().Subscribe(ch.docker, "")
@@ -128,7 +129,7 @@ func (ch *ContainerdHandler) Close() {
128129
// ==================== //
129130

130131
// GetContainerInfo Function
131-
func (ch *ContainerdHandler) GetContainerInfo(ctx context.Context, containerID string, OwnerInfo map[string]tp.PodOwner) (tp.Container, error) {
132+
func (ch *ContainerdHandler) GetContainerInfo(ctx context.Context, containerID string, eventpid uint32, OwnerInfo map[string]tp.PodOwner) (tp.Container, error) {
132133
res, err := ch.client.ContainerService().Get(ctx, containerID)
133134
if err != nil {
134135
return tp.Container{}, err
@@ -184,6 +185,36 @@ func (ch *ContainerdHandler) GetContainerInfo(ctx context.Context, containerID s
184185
}
185186

186187
// == //
188+
if eventpid == 0 {
189+
taskReq := task.ListPidsRequest{ContainerID: container.ContainerID}
190+
if taskRes, err := ch.client.TaskService().ListPids(ctx, &taskReq); err == nil {
191+
if len(taskRes.Processes) == 0 {
192+
return container, err
193+
}
194+
195+
container.Pid = taskRes.Processes[0].Pid
196+
197+
} else {
198+
return container, err
199+
}
200+
201+
} else {
202+
container.Pid = eventpid
203+
}
204+
205+
pid := strconv.Itoa(int(container.Pid))
206+
207+
if data, err := os.Readlink(filepath.Join(cfg.GlobalCfg.ProcFsMount, pid, "/ns/pid")); err == nil {
208+
if _, err := fmt.Sscanf(data, "pid:[%d]\n", &container.PidNS); err != nil {
209+
kg.Warnf("Unable to get PidNS (%s, %s, %s)", containerID, pid, err.Error())
210+
}
211+
}
212+
213+
if data, err := os.Readlink(filepath.Join(cfg.GlobalCfg.ProcFsMount, pid, "/ns/mnt")); err == nil {
214+
if _, err := fmt.Sscanf(data, "mnt:[%d]\n", &container.MntNS); err != nil {
215+
kg.Warnf("Unable to get MntNS (%s, %s, %s)", containerID, pid, err.Error())
216+
}
217+
}
187218

188219
taskReq := task.ListPidsRequest{ContainerID: container.ContainerID}
189220
if taskRes, err := ch.client.TaskService().ListPids(ctx, &taskReq); err == nil {
@@ -267,15 +298,15 @@ func (ch *ContainerdHandler) GetContainerdContainers() map[string]context.Contex
267298
}
268299

269300
// UpdateContainerdContainer Function
270-
func (dm *KubeArmorDaemon) UpdateContainerdContainer(ctx context.Context, containerID, action string) bool {
301+
func (dm *KubeArmorDaemon) UpdateContainerdContainer(ctx context.Context, containerID string, containerPid uint32, action string) bool {
271302
// check if Containerd exists
272303
if Containerd == nil {
273304
return false
274305
}
275306

276307
if action == "start" {
277308
// get container information from containerd client
278-
container, err := Containerd.GetContainerInfo(ctx, containerID, dm.OwnerInfo)
309+
container, err := Containerd.GetContainerInfo(ctx, containerID, containerPid, dm.OwnerInfo)
279310
if err != nil {
280311
kg.Err(err.Error())
281312
return false
@@ -554,7 +585,7 @@ func (dm *KubeArmorDaemon) MonitorContainerdEvents() {
554585

555586
if len(containers) > 0 {
556587
for containerID, context := range containers {
557-
if !dm.UpdateContainerdContainer(context, containerID, "start") {
588+
if !dm.UpdateContainerdContainer(context, containerID, 0, "start") {
558589
continue
559590
}
560591
}
@@ -588,7 +619,7 @@ func (dm *KubeArmorDaemon) handleContainerdEvent(envelope *events.Envelope, cont
588619
if err != nil {
589620
kg.Errf("failed to unmarshal container's delete event: %v", err)
590621
}
591-
dm.UpdateContainerdContainer(context, deleteContainer.GetID(), "destroy")
622+
dm.UpdateContainerdContainer(context, deleteContainer.GetID(), 0, "destroy")
592623

593624
case "/tasks/start":
594625
startTask := &apievents.TaskStart{}
@@ -597,7 +628,7 @@ func (dm *KubeArmorDaemon) handleContainerdEvent(envelope *events.Envelope, cont
597628
if err != nil {
598629
kg.Errf("failed to unmarshal container's start task: %v", err)
599630
}
600-
dm.UpdateContainerdContainer(context, startTask.GetContainerID(), "start")
631+
dm.UpdateContainerdContainer(context, startTask.GetContainerID(), startTask.GetPid(), "start")
601632

602633
case "/tasks/exit":
603634
exitTask := &apievents.TaskStart{}
@@ -612,7 +643,7 @@ func (dm *KubeArmorDaemon) handleContainerdEvent(envelope *events.Envelope, cont
612643
dm.ContainersLock.RUnlock()
613644

614645
if pid == exitTask.GetPid() {
615-
dm.UpdateContainerdContainer(context, exitTask.GetContainerID(), "destroy")
646+
dm.UpdateContainerdContainer(context, exitTask.GetContainerID(), pid, "destroy")
616647
}
617648

618649
}

KubeArmor/go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ require (
4949
k8s.io/cri-api v0.31.2
5050
k8s.io/klog/v2 v2.130.1
5151
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
52-
sigs.k8s.io/controller-runtime v0.19.3
52+
sigs.k8s.io/controller-runtime v0.19.4
5353
)
5454

5555
require (

KubeArmor/go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -519,8 +519,8 @@ k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7F
519519
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
520520
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
521521
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
522-
sigs.k8s.io/controller-runtime v0.19.3 h1:XO2GvC9OPftRst6xWCpTgBZO04S2cbp0Qqkj8bX1sPw=
523-
sigs.k8s.io/controller-runtime v0.19.3/go.mod h1:j4j87DqtsThvwTv5/Tc5NFRyyF/RF0ip4+62tbTSIUM=
522+
sigs.k8s.io/controller-runtime v0.19.4 h1:SUmheabttt0nx8uJtoII4oIP27BVVvAKFvdvGFwV/Qo=
523+
sigs.k8s.io/controller-runtime v0.19.4/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
524524
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
525525
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
526526
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=

tests/go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ require (
153153
k8s.io/klog/v2 v2.130.1 // indirect
154154
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
155155
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
156-
sigs.k8s.io/controller-runtime v0.19.3 // indirect
156+
sigs.k8s.io/controller-runtime v0.19.4 // indirect
157157
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
158158
sigs.k8s.io/kustomize/api v0.16.0 // indirect
159159
sigs.k8s.io/kustomize/kyaml v0.16.0 // indirect

tests/go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,8 @@ k8s.io/kubectl v0.29.3 h1:RuwyyIU42MAISRIePaa8Q7A3U74Q9P4MoJbDFz9o3us=
394394
k8s.io/kubectl v0.29.3/go.mod h1:yCxfY1dbwgVdEt2zkJ6d5NNLOhhWgTyrqACIoFhpdd4=
395395
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
396396
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
397-
sigs.k8s.io/controller-runtime v0.19.3 h1:XO2GvC9OPftRst6xWCpTgBZO04S2cbp0Qqkj8bX1sPw=
398-
sigs.k8s.io/controller-runtime v0.19.3/go.mod h1:j4j87DqtsThvwTv5/Tc5NFRyyF/RF0ip4+62tbTSIUM=
397+
sigs.k8s.io/controller-runtime v0.19.4 h1:SUmheabttt0nx8uJtoII4oIP27BVVvAKFvdvGFwV/Qo=
398+
sigs.k8s.io/controller-runtime v0.19.4/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4=
399399
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
400400
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
401401
sigs.k8s.io/kustomize/api v0.16.0 h1:/zAR4FOQDCkgSDmVzV2uiFbuy9bhu3jEzthrHCuvm1g=

0 commit comments

Comments
 (0)