@@ -11,9 +11,16 @@ import (
11
11
"syscall"
12
12
13
13
apitypes "github.com/armosec/armoapi-go/armotypes"
14
+ utilsmetadata "github.com/armosec/utils-k8s-go/armometadata"
15
+ mapset "github.com/deckarep/golang-set/v2"
16
+ containercollection "github.com/inspektor-gadget/inspektor-gadget/pkg/container-collection"
17
+ beUtils "github.com/kubescape/backend/pkg/utils"
18
+ "github.com/kubescape/go-logger"
19
+ "github.com/kubescape/go-logger/helpers"
20
+ "github.com/kubescape/k8s-interface/k8sinterface"
14
21
"github.com/kubescape/node-agent/pkg/applicationprofilemanager"
15
22
applicationprofilemanagerv1 "github.com/kubescape/node-agent/pkg/applicationprofilemanager/v1"
16
- cloudmetadata "github.com/kubescape/node-agent/pkg/cloudmetadata"
23
+ "github.com/kubescape/node-agent/pkg/cloudmetadata"
17
24
"github.com/kubescape/node-agent/pkg/config"
18
25
"github.com/kubescape/node-agent/pkg/containerwatcher/v1"
19
26
"github.com/kubescape/node-agent/pkg/dnsmanager"
@@ -43,21 +50,15 @@ import (
43
50
"github.com/kubescape/node-agent/pkg/rulemanager"
44
51
rulemanagerv1 "github.com/kubescape/node-agent/pkg/rulemanager/v1"
45
52
"github.com/kubescape/node-agent/pkg/sbomhandler/syfthandler"
53
+ "github.com/kubescape/node-agent/pkg/sbommanager"
54
+ sbommanagerv1 "github.com/kubescape/node-agent/pkg/sbommanager/v1"
46
55
"github.com/kubescape/node-agent/pkg/seccompmanager"
47
56
seccompmanagerv1 "github.com/kubescape/node-agent/pkg/seccompmanager/v1"
48
57
"github.com/kubescape/node-agent/pkg/storage/v1"
49
58
"github.com/kubescape/node-agent/pkg/utils"
50
59
"github.com/kubescape/node-agent/pkg/validator"
51
60
"github.com/kubescape/node-agent/pkg/watcher/dynamicwatcher"
52
61
"github.com/kubescape/node-agent/pkg/watcher/seccompprofilewatcher"
53
-
54
- utilsmetadata "github.com/armosec/utils-k8s-go/armometadata"
55
- mapset "github.com/deckarep/golang-set/v2"
56
-
57
- beUtils "github.com/kubescape/backend/pkg/utils"
58
- "github.com/kubescape/go-logger"
59
- "github.com/kubescape/go-logger/helpers"
60
- "github.com/kubescape/k8s-interface/k8sinterface"
61
62
)
62
63
63
64
func main () {
@@ -130,10 +131,8 @@ func main() {
130
131
prometheusExporter = metricsmanager .NewMetricsMock ()
131
132
}
132
133
133
- nodeName := os .Getenv (config .NodeNameEnvVar )
134
-
135
134
// Detect the container containerRuntime of the node
136
- containerRuntime , err := utils .DetectContainerRuntimeViaK8sAPI (ctx , k8sClient , nodeName )
135
+ containerRuntime , err := utils .DetectContainerRuntimeViaK8sAPI (ctx , k8sClient , cfg . NodeName )
137
136
if err != nil {
138
137
logger .L ().Ctx (ctx ).Fatal ("error detecting the container runtime" , helpers .Error (err ))
139
138
}
@@ -143,7 +142,7 @@ func main() {
143
142
// Create watchers
144
143
dWatcher := dynamicwatcher .NewWatchHandler (k8sClient , storageClient .StorageClient , cfg .SkipNamespace )
145
144
// create k8sObject cache
146
- k8sObjectCache , err := k8scache .NewK8sObjectCache (nodeName , k8sClient )
145
+ k8sObjectCache , err := k8scache .NewK8sObjectCache (cfg . NodeName , k8sClient )
147
146
if err != nil {
148
147
logger .L ().Ctx (ctx ).Fatal ("error creating K8sObjectCache" , helpers .Error (err ))
149
148
}
@@ -216,7 +215,7 @@ func main() {
216
215
var cloudMetadata * apitypes.CloudMetadata
217
216
218
217
if cfg .EnableRuntimeDetection || cfg .EnableMalwareDetection {
219
- cloudMetadata , err = cloudmetadata .GetCloudMetadata (ctx , k8sClient , nodeName )
218
+ cloudMetadata , err = cloudmetadata .GetCloudMetadata (ctx , k8sClient , cfg . NodeName )
220
219
if err != nil {
221
220
logger .L ().Ctx (ctx ).Error ("error getting cloud metadata" , helpers .Error (err ))
222
221
}
@@ -227,16 +226,16 @@ func main() {
227
226
processManager = processmanagerv1 .CreateProcessManager (ctx )
228
227
229
228
// create ruleBinding cache
230
- ruleBindingCache := rulebindingcachev1 .NewCache (nodeName , k8sClient )
229
+ ruleBindingCache := rulebindingcachev1 .NewCache (cfg . NodeName , k8sClient )
231
230
dWatcher .AddAdaptor (ruleBindingCache )
232
231
233
232
ruleBindingNotify = make (chan rulebinding.RuleBindingNotify , 100 )
234
233
ruleBindingCache .AddNotifier (& ruleBindingNotify )
235
234
236
- apc := applicationprofilecache .NewApplicationProfileCache (nodeName , storageClient .StorageClient , cfg .MaxDelaySeconds )
235
+ apc := applicationprofilecache .NewApplicationProfileCache (cfg . NodeName , storageClient .StorageClient , cfg .MaxDelaySeconds )
237
236
dWatcher .AddAdaptor (apc )
238
237
239
- nnc := networkneighborhoodcache .NewNetworkNeighborhoodCache (nodeName , storageClient .StorageClient , cfg .MaxDelaySeconds )
238
+ nnc := networkneighborhoodcache .NewNetworkNeighborhoodCache (cfg . NodeName , storageClient .StorageClient , cfg .MaxDelaySeconds )
240
239
dWatcher .AddAdaptor (nnc )
241
240
242
241
dc := dnscache .NewDnsCache (dnsResolver )
@@ -245,7 +244,7 @@ func main() {
245
244
objCache = objectcachev1 .NewObjectCache (k8sObjectCache , apc , nnc , dc )
246
245
247
246
// create exporter
248
- exporter := exporters .InitExporters (cfg .Exporters , clusterData .ClusterName , nodeName , cloudMetadata )
247
+ exporter := exporters .InitExporters (cfg .Exporters , clusterData .ClusterName , cfg . NodeName , cloudMetadata )
249
248
250
249
// create runtimeDetection managers
251
250
ruleManager , err = rulemanagerv1 .CreateRuleManager (ctx , cfg , k8sClient , ruleBindingCache , objCache , exporter , prometheusExporter , nodeName , clusterData .ClusterName , processManager , dnsResolver )
@@ -264,7 +263,7 @@ func main() {
264
263
var profileManager nodeprofilemanager.NodeProfileManagerClient
265
264
if cfg .EnableNodeProfile {
266
265
// FIXME validate the HTTPExporterConfig before we use it ?
267
- profileManager = nodeprofilemanagerv1 .NewNodeProfileManager (cfg , * clusterData , nodeName , k8sObjectCache , relevancyManager , ruleManager )
266
+ profileManager = nodeprofilemanagerv1 .NewNodeProfileManager (cfg , * clusterData , cfg . NodeName , k8sObjectCache , relevancyManager , ruleManager )
268
267
} else {
269
268
profileManager = nodeprofilemanager .NewNodeProfileManagerMock ()
270
269
}
@@ -273,17 +272,36 @@ func main() {
273
272
var malwareManager malwaremanager.MalwareManagerClient
274
273
if cfg .EnableMalwareDetection {
275
274
// create exporter
276
- exporter := exporters .InitExporters (cfg .Exporters , clusterData .ClusterName , nodeName , cloudMetadata )
277
- malwareManager , err = malwaremanagerv1 .CreateMalwareManager (cfg , k8sClient , nodeName , clusterData .ClusterName , exporter , prometheusExporter )
275
+ exporter := exporters .InitExporters (cfg .Exporters , clusterData .ClusterName , cfg . NodeName , cloudMetadata )
276
+ malwareManager , err = malwaremanagerv1 .CreateMalwareManager (cfg , k8sClient , cfg . NodeName , clusterData .ClusterName , exporter , prometheusExporter )
278
277
if err != nil {
279
278
logger .L ().Ctx (ctx ).Fatal ("error creating MalwareManager" , helpers .Error (err ))
280
279
}
281
280
} else {
282
281
malwareManager = malwaremanager .CreateMalwareManagerMock ()
283
282
}
284
283
284
+ // Create the IG k8sClient
285
+ igK8sClient , err := containercollection .NewK8sClient (cfg .NodeName )
286
+ if err != nil {
287
+ logger .L ().Fatal ("error creating IG Kubernetes client" , helpers .Error (err ))
288
+ }
289
+ defer igK8sClient .Close ()
290
+ logger .L ().Info ("IG Kubernetes client created" , helpers .Interface ("client" , igK8sClient ))
291
+
292
+ // Create the SBOM manager
293
+ var sbomManager sbommanager.SbomManagerClient
294
+ if cfg .EnableSbomGeneration {
295
+ sbomManager , err = sbommanagerv1 .CreateSbomManager (ctx , cfg , igK8sClient .SocketPath , storageClient )
296
+ if err != nil {
297
+ logger .L ().Ctx (ctx ).Fatal ("error creating SbomManager" , helpers .Error (err ))
298
+ }
299
+ } else {
300
+ sbomManager = sbommanager .CreateSbomManagerMock ()
301
+ }
302
+
285
303
// Create the container handler
286
- mainHandler , err := containerwatcher .CreateIGContainerWatcher (cfg , applicationProfileManager , k8sClient , relevancyManager , networkManagerClient , dnsManagerClient , prometheusExporter , ruleManager , malwareManager , preRunningContainersIDs , & ruleBindingNotify , containerRuntime , nil , processManager )
304
+ mainHandler , err := containerwatcher .CreateIGContainerWatcher (cfg , applicationProfileManager , k8sClient , igK8sClient , relevancyManager , networkManagerClient , dnsManagerClient , prometheusExporter , ruleManager , malwareManager , sbomManager , preRunningContainersIDs , & ruleBindingNotify , containerRuntime , nil , processManager )
287
305
if err != nil {
288
306
logger .L ().Ctx (ctx ).Fatal ("error creating the container watcher" , helpers .Error (err ))
289
307
}
0 commit comments