This is an automated email from the ASF dual-hosted git repository.

squakez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new ddabc6201 feat(trait): default security as non root
ddabc6201 is described below

commit ddabc62013307fa2aa429b54cce4f2f93f878b17
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Sat Jun 6 09:06:41 2026 +0200

    feat(trait): default security as non root
    
    Closes #5462
---
 docs/modules/ROOT/partials/apis/camel-k-crds.adoc  |  4 +--
 docs/modules/traits/pages/security-context.adoc    |  4 +--
 helm/camel-k/crds/camel-k-crds.yaml                | 32 +++++++++++-----------
 pkg/apis/camel/v1/trait/security_context.go        |  4 +--
 pkg/builder/image.go                               |  3 +-
 pkg/builder/jib.go                                 |  4 ++-
 .../camel.apache.org_integrationplatforms.yaml     |  8 +++---
 .../camel.apache.org_integrationprofiles.yaml      |  8 +++---
 .../crd/bases/camel.apache.org_integrations.yaml   |  8 +++---
 .../config/crd/bases/camel.apache.org_pipes.yaml   |  8 +++---
 pkg/trait/container_test.go                        |  4 +--
 pkg/trait/security_context.go                      |  9 +++---
 pkg/trait/security_context_test.go                 |  7 +++--
 pkg/util/defaults/defaults_support.go              |  2 ++
 pkg/util/jib/configuration.go                      |  1 +
 15 files changed, 56 insertions(+), 50 deletions(-)

diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc 
b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index b6d710201..64b41593e 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -9501,14 +9501,14 @@ int64
 |
 
 
-Security Context RunAsUser configuration (default none): this value is 
automatically retrieved in Openshift clusters when not explicitly set.
+Security Context RunAsUser configuration (default user 1000): this value is 
automatically retrieved in Openshift clusters when not explicitly set.
 
 |`runAsNonRoot` +
 bool
 |
 
 
-Security Context RunAsNonRoot configuration (default false).
+Security Context RunAsNonRoot configuration (default true).
 
 |`seccompProfileType` +
 
*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#seccompprofiletype-v1-core[Kubernetes
 core/v1.SeccompProfileType]*
diff --git a/docs/modules/traits/pages/security-context.adoc 
b/docs/modules/traits/pages/security-context.adoc
index f24436897..3f18842a2 100644
--- a/docs/modules/traits/pages/security-context.adoc
+++ b/docs/modules/traits/pages/security-context.adoc
@@ -31,11 +31,11 @@ The following configuration options are available:
 
 | security-context.runAsUser
 | int64
-| Security Context RunAsUser configuration (default none): this value is 
automatically retrieved in Openshift clusters when not explicitly set.
+| Security Context RunAsUser configuration (default user 1000): this value is 
automatically retrieved in Openshift clusters when not explicitly set.
 
 | security-context.runAsNonRoot
 | bool
-| Security Context RunAsNonRoot configuration (default false).
+| Security Context RunAsNonRoot configuration (default true).
 
 | security-context.seccompProfileType
 | SeccompProfileType
diff --git a/helm/camel-k/crds/camel-k-crds.yaml 
b/helm/camel-k/crds/camel-k-crds.yaml
index ad761c78d..82c0661ab 100644
--- a/helm/camel-k/crds/camel-k-crds.yaml
+++ b/helm/camel-k/crds/camel-k-crds.yaml
@@ -5700,11 +5700,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -8230,11 +8230,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -10654,11 +10654,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -13064,11 +13064,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -22330,11 +22330,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -24701,11 +24701,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -35335,11 +35335,11 @@ spec:
                             type: boolean
                           runAsNonRoot:
                             description: Security Context RunAsNonRoot 
configuration
-                              (default false).
+                              (default true).
                             type: boolean
                           runAsUser:
                             description: 'Security Context RunAsUser 
configuration
-                              (default none): this value is automatically 
retrieved
+                              (default user 1000): this value is automatically 
retrieved
                               in Openshift clusters when not explicitly set.'
                             format: int64
                             type: integer
@@ -37623,11 +37623,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
diff --git a/pkg/apis/camel/v1/trait/security_context.go 
b/pkg/apis/camel/v1/trait/security_context.go
index 01b79bcbf..fad3cac6e 100644
--- a/pkg/apis/camel/v1/trait/security_context.go
+++ b/pkg/apis/camel/v1/trait/security_context.go
@@ -27,9 +27,9 @@ import corev1 "k8s.io/api/core/v1"
 type SecurityContextTrait struct {
        PlatformBaseTrait `json:",inline" property:",squash"`
 
-       // Security Context RunAsUser configuration (default none): this value 
is automatically retrieved in Openshift clusters when not explicitly set.
+       // Security Context RunAsUser configuration (default user 1000): this 
value is automatically retrieved in Openshift clusters when not explicitly set.
        RunAsUser *int64 `json:"runAsUser,omitempty" property:"run-as-user"`
-       // Security Context RunAsNonRoot configuration (default false).
+       // Security Context RunAsNonRoot configuration (default true).
        RunAsNonRoot *bool `json:"runAsNonRoot,omitempty" 
property:"run-as-non-root"`
        // Security Context SeccompProfileType configuration (default 
RuntimeDefault).
        // +kubebuilder:validation:Enum=Unconfined;RuntimeDefault
diff --git a/pkg/builder/image.go b/pkg/builder/image.go
index 5995a0231..3c82aeaed 100644
--- a/pkg/builder/image.go
+++ b/pkg/builder/image.go
@@ -21,6 +21,7 @@ import (
        "os"
        "path"
        "path/filepath"
+       "strconv"
        "strings"
 
        "github.com/apache/camel-k/v2/pkg/util/io"
@@ -115,7 +116,7 @@ func jvmDockerfile(ctx *builderContext) error {
        dockerfile := []byte(`
                FROM ` + ctx.BaseImage + `
                ADD . ` + DeploymentDir + `
-               USER 1000
+               USER ` + strconv.FormatInt(defaults.DefaultPodRunAsUser, 10) + `
        `)
 
        err := os.WriteFile(filepath.Join(ctx.Path, ContextDir, "Dockerfile"), 
dockerfile, io.FilePerm400)
diff --git a/pkg/builder/jib.go b/pkg/builder/jib.go
index 340731391..e41fa9ca0 100644
--- a/pkg/builder/jib.go
+++ b/pkg/builder/jib.go
@@ -23,11 +23,13 @@ import (
        "os"
        "os/exec"
        "path/filepath"
+       "strconv"
        "strings"
 
        v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
        "github.com/apache/camel-k/v2/pkg/client"
        "github.com/apache/camel-k/v2/pkg/util"
+       "github.com/apache/camel-k/v2/pkg/util/defaults"
        "github.com/apache/camel-k/v2/pkg/util/jib"
        "github.com/apache/camel-k/v2/pkg/util/log"
        "github.com/apache/camel-k/v2/pkg/util/maven"
@@ -149,7 +151,7 @@ func buildJibMavenArgs(mavenDir, image, baseImage string, 
insecureRegistry bool,
        mavenArgs = append(mavenArgs, jib.JibMavenToImageParam+image)
        mavenArgs = append(mavenArgs, jib.JibMavenFromImageParam+baseImage)
        mavenArgs = append(mavenArgs, 
jib.JibMavenBaseImageCache+mavenDir+"/jib")
-       mavenArgs = append(mavenArgs, "-Djib.container.user=1000")
+       mavenArgs = append(mavenArgs, 
jib.JibMavenContainerUser+strconv.FormatInt(defaults.DefaultPodRunAsUser, 10))
 
        if imagePlatforms != nil {
                platforms := strings.Join(imagePlatforms, ",")
diff --git 
a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index 1ec9afa42..516c9b10b 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -2399,11 +2399,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -4929,11 +4929,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
diff --git 
a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
index 6dff2fcd2..fb5282e45 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationprofiles.yaml
@@ -2257,11 +2257,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -4667,11 +4667,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
index b52aac2b6..8fe4faefc 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml
@@ -9102,11 +9102,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
@@ -11473,11 +11473,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
index cad0e7697..56c8166d3 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
@@ -9162,11 +9162,11 @@ spec:
                             type: boolean
                           runAsNonRoot:
                             description: Security Context RunAsNonRoot 
configuration
-                              (default false).
+                              (default true).
                             type: boolean
                           runAsUser:
                             description: 'Security Context RunAsUser 
configuration
-                              (default none): this value is automatically 
retrieved
+                              (default user 1000): this value is automatically 
retrieved
                               in Openshift clusters when not explicitly set.'
                             format: int64
                             type: integer
@@ -11450,11 +11450,11 @@ spec:
                         type: boolean
                       runAsNonRoot:
                         description: Security Context RunAsNonRoot 
configuration (default
-                          false).
+                          true).
                         type: boolean
                       runAsUser:
                         description: 'Security Context RunAsUser configuration 
(default
-                          none): this value is automatically retrieved in 
Openshift
+                          user 1000): this value is automatically retrieved in 
Openshift
                           clusters when not explicitly set.'
                         format: int64
                         type: integer
diff --git a/pkg/trait/container_test.go b/pkg/trait/container_test.go
index 4cfcf7493..7a5465ced 100644
--- a/pkg/trait/container_test.go
+++ b/pkg/trait/container_test.go
@@ -520,7 +520,7 @@ func TestUserSecurityContext(t *testing.T) {
        environment.Integration.Spec.Traits = v1.Traits{
                Container: &traitv1.ContainerTrait{
                        RunAsNonRoot:             ptr.To(false),
-                       RunAsUser:                ptr.To(int64(1000)),
+                       RunAsUser:                ptr.To(int64(1001)),
                        SeccompProfileType:       "Unconfined",
                        AllowPrivilegeEscalation: ptr.To(true),
                        CapabilitiesDrop:         []corev1.Capability{"DROP"},
@@ -543,7 +543,7 @@ func TestUserSecurityContext(t *testing.T) {
        assert.NotNil(t, d)
        assert.Len(t, d.Spec.Template.Spec.Containers, 1)
        assert.Equal(t, ptr.To(false), 
d.Spec.Template.Spec.Containers[0].SecurityContext.RunAsNonRoot)
-       assert.Equal(t, ptr.To(int64(1000)), 
d.Spec.Template.Spec.Containers[0].SecurityContext.RunAsUser)
+       assert.Equal(t, ptr.To(int64(1001)), 
d.Spec.Template.Spec.Containers[0].SecurityContext.RunAsUser)
        assert.Equal(t, corev1.SeccompProfileTypeUnconfined, 
d.Spec.Template.Spec.Containers[0].SecurityContext.SeccompProfile.Type)
        assert.Equal(t, ptr.To(true), 
d.Spec.Template.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation)
        assert.Equal(t, []corev1.Capability{"DROP"}, 
d.Spec.Template.Spec.Containers[0].SecurityContext.Capabilities.Drop)
diff --git a/pkg/trait/security_context.go b/pkg/trait/security_context.go
index e45236977..7b6f8d351 100644
--- a/pkg/trait/security_context.go
+++ b/pkg/trait/security_context.go
@@ -24,6 +24,7 @@ import (
 
        v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
        traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
+       "github.com/apache/camel-k/v2/pkg/util/defaults"
        "github.com/apache/camel-k/v2/pkg/util/openshift"
 )
 
@@ -31,7 +32,7 @@ const (
        securityContextTraitID   = "security-context"
        securityContextTraitOder = 1600
 
-       defaultPodRunAsNonRoot       = false
+       defaultPodRunAsNonRoot       = true
        defaultPodSeccompProfileType = corev1.SeccompProfileTypeRuntimeDefault
 )
 
@@ -95,9 +96,7 @@ func (t *securityContextTrait) setSecurityContext(e 
*Environment, podSpec *corev
                return err
        }
 
-       t.RunAsUser = runAsUser
-
-       sc.RunAsUser = t.RunAsUser
+       sc.RunAsUser = runAsUser
        podSpec.SecurityContext = &sc
 
        return nil
@@ -114,7 +113,7 @@ func (t *securityContextTrait) getUser(e *Environment) 
(*int64, error) {
                return nil, err
        }
        if !isOpenShift {
-               return nil, nil
+               return new(defaults.DefaultPodRunAsUser), nil
        }
 
        runAsUser, err := openshift.GetOpenshiftUser(e.Ctx, e.Client, 
e.Integration.Namespace)
diff --git a/pkg/trait/security_context_test.go 
b/pkg/trait/security_context_test.go
index 440236554..bc3331d06 100644
--- a/pkg/trait/security_context_test.go
+++ b/pkg/trait/security_context_test.go
@@ -32,6 +32,7 @@ import (
        traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
        "github.com/apache/camel-k/v2/pkg/internal"
        "github.com/apache/camel-k/v2/pkg/util/camel"
+       "github.com/apache/camel-k/v2/pkg/util/defaults"
        "github.com/apache/camel-k/v2/pkg/util/kubernetes"
 )
 
@@ -66,7 +67,7 @@ func TestDefaultPodKubernetesSecurityContext(t *testing.T) {
 
        assert.NotNil(t, d)
        assert.Equal(t, ptr.To(defaultPodRunAsNonRoot), 
d.Spec.Template.Spec.SecurityContext.RunAsNonRoot)
-       assert.Nil(t, d.Spec.Template.Spec.SecurityContext.RunAsUser)
+       assert.Equal(t, defaults.DefaultPodRunAsUser, 
*d.Spec.Template.Spec.SecurityContext.RunAsUser)
        assert.Equal(t, corev1.SeccompProfileTypeRuntimeDefault, 
d.Spec.Template.Spec.SecurityContext.SeccompProfile.Type)
 }
 
@@ -123,7 +124,7 @@ func TestUserPodSecurityContext(t *testing.T) {
        environment.Integration.Spec.Traits = v1.Traits{
                SecurityContext: &traitv1.SecurityContextTrait{
                        RunAsNonRoot:       ptr.To(false),
-                       RunAsUser:          ptr.To(int64(1000)),
+                       RunAsUser:          ptr.To(int64(1001)),
                        SeccompProfileType: "Unconfined",
                },
        }
@@ -142,7 +143,7 @@ func TestUserPodSecurityContext(t *testing.T) {
 
        assert.NotNil(t, d)
        assert.Equal(t, ptr.To(false), 
d.Spec.Template.Spec.SecurityContext.RunAsNonRoot)
-       assert.Equal(t, ptr.To(int64(1000)), 
d.Spec.Template.Spec.SecurityContext.RunAsUser)
+       assert.Equal(t, ptr.To(int64(1001)), 
d.Spec.Template.Spec.SecurityContext.RunAsUser)
        assert.Equal(t, corev1.SeccompProfileTypeUnconfined, 
d.Spec.Template.Spec.SecurityContext.SeccompProfile.Type)
 }
 
diff --git a/pkg/util/defaults/defaults_support.go 
b/pkg/util/defaults/defaults_support.go
index e0b18d5d3..a7885355b 100644
--- a/pkg/util/defaults/defaults_support.go
+++ b/pkg/util/defaults/defaults_support.go
@@ -24,6 +24,8 @@ import (
        "github.com/apache/camel-k/v2/pkg/util/log"
 )
 
+const DefaultPodRunAsUser = int64(1000)
+
 func BaseImage() string {
        return envOrDefault(baseImage, "KAMEL_BASE_IMAGE", "RELATED_IMAGE_BASE")
 }
diff --git a/pkg/util/jib/configuration.go b/pkg/util/jib/configuration.go
index f90239aef..9c18a1cbf 100644
--- a/pkg/util/jib/configuration.go
+++ b/pkg/util/jib/configuration.go
@@ -26,6 +26,7 @@ import (
 const JibMavenGoal = "jib:build"
 const JibMavenToImageParam = "-Djib.to.image="
 const JibMavenFromImageParam = "-Djib.from.image="
+const JibMavenContainerUser = "-Djib.container.user="
 const JibMavenFromPlatforms = "-Djib.from.platforms="
 const JibMavenBaseImageCache = "-Djib.baseImageCache="
 const JibMavenInsecureRegistries = "-Djib.allowInsecureRegistries="

Reply via email to