Skip to content

Commit 097cbc6

Browse files
committed
feat(imagescan): Add installation through cp node command
Signed-off-by: Paveen Kumar <paveenkumar@accuknox.com>
1 parent 42828d9 commit 097cbc6

File tree

19 files changed

+402
-81
lines changed

19 files changed

+402
-81
lines changed

cmd/imagescan.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import (
66
"strings"
77

88
"github.com/accuknox/accuknox-cli-v2/pkg/imagescan"
9+
"github.com/accuknox/kmux"
10+
"github.com/accuknox/kmux/config"
11+
"github.com/accuknox/kmux/security"
912
kubesheildScanner "github.com/accuknox/kubeshield/pkg/scanner/scan"
1013
"github.com/spf13/cobra"
1114
)
@@ -20,6 +23,11 @@ var (
2023
imagesOnly bool
2124
cfg = kubesheildScanner.ScanConfig{}
2225
defaultArtifactEndpointPath = "/api/v1/artifact/"
26+
27+
// systemd config
28+
kmuxConfigPath string
29+
defaultKmuxconfigPath = "/opt/kubeshield-service/kmux-config.yaml"
30+
spireSockPath = "unix:///var/run/spire/agent.sock"
2331
)
2432

2533
var imageScanCmd = &cobra.Command{
@@ -60,8 +68,27 @@ and sends back the result to saas
6068
_ = os.Setenv("TRIVY_DB_REPOSITORY", vulnerabilityDB)
6169
_ = os.Setenv("TRIVY_JAVA_DB_REPOSITORY", javaDB)
6270

71+
// Init kmux for both cp and worker node
72+
if imagescan.NodeType != "" {
73+
if err := kmux.Init(&config.Options{
74+
LocalConfigFile: kmuxConfigPath,
75+
}); err != nil {
76+
return err
77+
}
78+
}
79+
80+
// Only for control plane, we are connecting to spire for pushing
81+
// the messages to knoxgateway
82+
if imagescan.NodeType == "cp" {
83+
if err := initSpire(spireSockPath); err != nil {
84+
return err
85+
}
86+
87+
}
88+
6389
cfg.ArtifactConfig.ArtifactAPI += artifactEndpointPath
6490
return imagescan.DiscoverAndScan(cfg, HOST_NAME, RUN_TIME, !allContainers, imagesOnly)
91+
6592
},
6693
}
6794

@@ -85,8 +112,32 @@ func init() {
85112
imageScanCmd.Flags().StringVarP(&vulnerabilityDB, "db-repository", "", "", "OCI repository to retrieve vulnerability db")
86113
imageScanCmd.Flags().StringVarP(&javaDB, "java-db-repository", "", "", "OCI repository to retrieve java db")
87114

115+
// ImageScanning configurations for systemd mode
116+
// TODO: Add validation for either knoxgateway or rmq
117+
imageScanCmd.Flags().StringVar(&imagescan.FlushTo, "flush-to", "", "flushes the data to the specified service")
118+
imageScanCmd.Flags().StringVar(&kmuxConfigPath, "kmux-config", defaultKmuxconfigPath, "kmux config path")
119+
imageScanCmd.Flags().StringVar(&imagescan.NodeType, "node-type", "", "specify the type of node (CP/Worker)")
120+
imageScanCmd.Flags().StringVar(&spireSockPath, "spire-sock", spireSockPath, "spire socket path")
121+
imageScanCmd.Flags().StringVar(&imagescan.CreateRegistryURL, "create-registry-url", "", "create registry url")
122+
88123
// Required Flags Validation
89124
imageScanCmd.MarkFlagsOneRequired("artifactEndpoint", "token", "label")
90125
imageScanCmd.MarkFlagsRequiredTogether("artifactEndpoint", "token", "label")
126+
127+
// For intenral purpose hide the flags
128+
imageScanCmd.Flags().MarkHidden("flush-to")
129+
imageScanCmd.Flags().MarkHidden("kmux-config")
130+
imageScanCmd.Flags().MarkHidden("node-type")
131+
imageScanCmd.Flags().MarkHidden("create-registry-url")
132+
91133
rootCmd.AddCommand(imageScanCmd)
92134
}
135+
136+
func initSpire(sockPath string) error {
137+
spireSecurity, err := security.NewSecurity("")
138+
if err != nil {
139+
return err
140+
}
141+
142+
return spireSecurity.Connect(sockPath)
143+
}

cmd/onboard-vm-cp-node.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ var (
5454

5555
enableHostPolicyDiscovery bool
5656
enableHardeningAgent bool
57-
58-
proxy onboard.Proxy
57+
proxy onboard.Proxy
5958
)
6059

6160
// cpNodeCmd represents the init command
@@ -130,7 +129,9 @@ var cpNodeCmd = &cobra.Command{
130129
peaImage, feederImage, rmqImage, sumEngineImage, hardeningAgentImage, spireAgentImage, waitForItImage, discoverImage, nodeAddr, dryRun,
131130
false, deployRMQ, imagePullPolicy, visibility, hostVisibility, sumEngineVisibility, audit, block, hostAudit, hostBlock,
132131
alertThrottling, maxAlertPerSec, throttleSec,
133-
cidr, secureContainers, skipBTF, systemMonitorPath, rmqAddress, deploySumEngine, registry, registryConfigPath, insecure, plainHTTP, preserveUpstream, topicPrefix, rmqConnectionName, sumEngineCronTime, tls, enableHostPolicyDiscovery, splunk, nodeStateRefreshTime, spireEnabled, spireCert, logRotate, parallel, enableHardeningAgent, releaseFile, proxy, deployDiscovery)
132+
cidr, secureContainers, skipBTF, systemMonitorPath, rmqAddress, deploySumEngine, registry, registryConfigPath, insecure, plainHTTP,
133+
preserveUpstream, topicPrefix, rmqConnectionName, sumEngineCronTime, tls, enableHostPolicyDiscovery, splunk, nodeStateRefreshTime,
134+
spireEnabled, spireCert, logRotate, parallel, enableHardeningAgent, releaseFile, proxy, deployDiscovery, deploykubeshield, label, authToken, schedule)
134135
if err != nil {
135136
errConfig := onboard.DumpConfig(vmConfig, configDumpPath)
136137
if errConfig != nil {
@@ -183,6 +184,7 @@ var cpNodeCmd = &cobra.Command{
183184
logger.Error("vm mode: %s invalid, accepted values (docker/systemd)", vmMode)
184185
return err
185186
}
187+
186188
if enableVMScan {
187189
err := vmConfig.InitRRAConfig(authToken, url, tenantID, clusterID, clusterName, label, schedule, profile, benchmark, registry, registryConfigPath, insecure, plainHTTP, rraImage, rraTag, releaseVersion, preserveUpstream, true, spireAgentImage, spireHost, spireDir, knoxGateway)
188190
if err != nil {

cmd/onboard-vm-node.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ var joinNodeCmd = &cobra.Command{
108108
peaImage, feederImage, rmqImage, sumEngineImage, hardeningAgentImage, spireAgentImage, waitForItImage, discoverImage, nodeAddr, dryRun,
109109
true, deployRMQ, imagePullPolicy, visibility, hostVisibility, sumEngineVisibility, audit, block, hostAudit, hostBlock,
110110
alertThrottling, maxAlertPerSec, throttleSec,
111-
cidr, secureContainers, skipBTF, systemMonitorPath, rmqAddress, deploySumEngine, registry, registryConfigPath, insecure, plainHTTP, preserveUpstream, topicPrefix, rmqConnectionName, sumEngineCronTime, tls, enableHostPolicyDiscovery, splunk, nodeStateRefreshTime, spireEnabled, spireCert, logRotate, parallel, enableHardeningAgent, releaseFile, proxy, deployDiscovery)
111+
cidr, secureContainers, skipBTF, systemMonitorPath, rmqAddress, deploySumEngine, registry, registryConfigPath, insecure, plainHTTP,
112+
preserveUpstream, topicPrefix, rmqConnectionName, sumEngineCronTime, tls, enableHostPolicyDiscovery, splunk, nodeStateRefreshTime,
113+
spireEnabled, spireCert, logRotate, parallel, enableHardeningAgent, releaseFile, proxy, deployDiscovery, deploykubeshield, label, authToken, schedule)
112114
if err != nil {
113115
errConfig := onboard.DumpConfig(vmConfigs, configDumpPath)
114116
if errConfig != nil {

cmd/onboard-vm.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ var (
8282
agentsResource onboard.ResourceConfig
8383

8484
deployDiscovery bool
85+
86+
// flag for kubeshield
87+
deploykubeshield bool
8588
)
8689

8790
// onboardVMCmd represents the sub-command to onboard VM clusters
@@ -179,7 +182,8 @@ func init() {
179182
onboardVMCmd.PersistentFlags().StringVar((*string)(&clusterID), "cluster-id", "", "cluster id")
180183
onboardVMCmd.PersistentFlags().StringVar((*string)(&url), "url", "", "url")
181184
onboardVMCmd.PersistentFlags().StringVar((*string)(&label), "label", "", "label")
182-
onboardVMCmd.MarkFlagsRequiredTogether("benchmark", "profile", "auth-token", "url", "tenant-id", "cluster-name", "label", "schedule")
185+
onboardVMCmd.MarkFlagsRequiredTogether("benchmark", "profile", "url", "tenant-id", "cluster-name")
186+
onboardVMCmd.MarkFlagsRequiredTogether("auth-token", "label", "schedule")
183187

184188
// splunk flags
185189
onboardVMCmd.PersistentFlags().BoolVar(&splunk.Enabled, "splunk", false, "enable Splunk")
@@ -227,6 +231,7 @@ func init() {
227231
onboardVMCmd.PersistentFlags().StringArrayVar(&proxy.ExtraArgs, "proxy-args", []string{}, "extra env variables for proxy")
228232

229233
onboardVMCmd.PersistentFlags().BoolVar(&deployDiscovery, "deploy-discover", false, "deploy auto-discover policy agent")
234+
onboardVMCmd.PersistentFlags().BoolVar(&deploykubeshield, "deploy-kubeshield", false, "deploy kubeshield")
230235

231236
onboardCmd.AddCommand(onboardVMCmd)
232237
}

go.mod

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ require (
2626
github.com/accuknox/dev2/discover v0.0.0-20231026051927-56fe5412ae0d
2727
github.com/accuknox/dev2/hardening v0.0.0-20250720150630-0e643f247e04
2828
github.com/accuknox/dev2/sumengine v0.0.0-20250109055732-04767b7ac965
29+
github.com/accuknox/kmux v0.0.0-20251211070044-f08f2bee3446
2930
github.com/accuknox/kubeshield v0.1.2-0.20251111150757-1b3db72011d9
3031
github.com/clarketm/json v1.17.1
3132
github.com/coreos/go-systemd/v22 v22.5.0
@@ -57,10 +58,10 @@ require (
5758
github.com/spf13/viper v1.20.1
5859
go.uber.org/zap v1.27.0
5960
golang.org/x/mod v0.27.0
60-
golang.org/x/net v0.42.0
61+
golang.org/x/net v0.43.0
6162
golang.org/x/sync v0.17.0
62-
golang.org/x/term v0.33.0
63-
google.golang.org/grpc v1.73.0
63+
golang.org/x/term v0.34.0
64+
google.golang.org/grpc v1.74.2
6465
gopkg.in/yaml.v2 v2.4.0
6566
hermannm.dev/ipfinder v0.2.0
6667
k8s.io/api v0.33.2
@@ -94,7 +95,6 @@ require (
9495
github.com/Microsoft/hcsshim v0.13.0 // indirect
9596
github.com/ZachtimusPrime/Go-Splunk-HTTP/splunk/v2 v2.0.2 // indirect
9697
github.com/accuknox/go-spiffe/v2 v2.2.0 // indirect
97-
github.com/accuknox/kmux v0.0.0-20250508061720-e1de0cfcf3c0 // indirect
9898
github.com/accuknox/knox-gateway v0.9.2 // indirect
9999
github.com/accuknox/registry-scanning/common v0.0.0-20250513065108-b8f4ebc6e184 // indirect
100100
github.com/andybalholm/brotli v1.1.1 // indirect
@@ -188,7 +188,7 @@ require (
188188
github.com/godbus/dbus/v5 v5.1.0 // indirect
189189
github.com/gogo/protobuf v1.3.2 // indirect
190190
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
191-
github.com/golang/glog v1.2.4 // indirect
191+
github.com/golang/glog v1.2.5 // indirect
192192
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
193193
github.com/golang/protobuf v1.5.4 // indirect
194194
github.com/golang/snappy v1.0.0 // indirect
@@ -224,9 +224,9 @@ require (
224224
github.com/inconshreveable/mousetrap v1.1.0 // indirect
225225
github.com/itchyny/timefmt-go v0.1.6 // indirect
226226
github.com/jackc/pgpassfile v1.0.0 // indirect
227-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
227+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
228228
github.com/jackc/pgx/v5 v5.6.0 // indirect
229-
github.com/jackc/puddle/v2 v2.2.1 // indirect
229+
github.com/jackc/puddle/v2 v2.2.2 // indirect
230230
github.com/jinzhu/inflection v1.0.0 // indirect
231231
github.com/jinzhu/now v1.1.5 // indirect
232232
github.com/jmespath/go-jmespath v0.4.0 // indirect
@@ -334,21 +334,21 @@ require (
334334
go.uber.org/multierr v1.11.0 // indirect
335335
go.yaml.in/yaml/v2 v2.4.2 // indirect
336336
go.yaml.in/yaml/v3 v3.0.3 // indirect
337-
golang.org/x/crypto v0.40.0 // indirect
337+
golang.org/x/crypto v0.41.0 // indirect
338338
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
339339
golang.org/x/oauth2 v0.30.0 // indirect
340-
golang.org/x/sys v0.34.0 // indirect
340+
golang.org/x/sys v0.35.0 // indirect
341341
golang.org/x/text v0.29.0 // indirect
342342
golang.org/x/time v0.12.0 // indirect
343-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
344-
google.golang.org/protobuf v1.36.6 // indirect
343+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250811230008-5f3141c8851a // indirect
344+
google.golang.org/protobuf v1.36.7 // indirect
345345
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
346346
gopkg.in/inf.v0 v0.9.1 // indirect
347347
gopkg.in/yaml.v3 v3.0.1 // indirect
348348
gorm.io/datatypes v1.2.0 // indirect
349-
gorm.io/driver/mysql v1.5.6 // indirect
350-
gorm.io/driver/postgres v1.5.7 // indirect
351-
gorm.io/gorm v1.25.9 // indirect
349+
gorm.io/driver/mysql v1.6.0 // indirect
350+
gorm.io/driver/postgres v1.6.0 // indirect
351+
gorm.io/gorm v1.31.1 // indirect
352352
gotest.tools/v3 v3.5.2 // indirect
353353
helm.sh/helm/v3 v3.17.3 // indirect
354354
hermannm.dev/wrap v0.2.0 // indirect

0 commit comments

Comments
 (0)