You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2023/09/21 08:12:26 UTC
[camel-k] 01/04: feat(core): Remove Openshift security warning message
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 7c91174bf24dc3d9e1d5fe12d7647de5237b8a0b
Author: Gaelle Fournier <ga...@gmail.com>
AuthorDate: Tue Sep 12 17:57:57 2023 +0200
feat(core): Remove Openshift security warning message
Add the valid openshift security contexts to :
* operator pod
* integration pod
---
pkg/install/operator.go | 11 +++++++++++
pkg/trait/container.go | 14 ++++++++++++++
pkg/util/kubernetes/security.go | 38 ++++++++++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+)
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index 5c5a2e134..9daf61ee0 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -44,6 +44,7 @@ import (
"github.com/apache/camel-k/v2/pkg/util/knative"
"github.com/apache/camel-k/v2/pkg/util/kubernetes"
"github.com/apache/camel-k/v2/pkg/util/minikube"
+ "github.com/apache/camel-k/v2/pkg/util/openshift"
"github.com/apache/camel-k/v2/pkg/util/patch"
image "github.com/apache/camel-k/v2/pkg/util/registry"
)
@@ -243,6 +244,16 @@ func OperatorOrCollect(ctx context.Context, cmd *cobra.Command, c client.Client,
// Remove Ingress permissions as it's not needed on OpenShift
// This should ideally be removed from the common RBAC manifest.
RemoveIngressRoleCustomizer(o)
+
+ if d, ok := o.(*appsv1.Deployment); ok {
+ securityContext, _ := openshift.GetOpenshiftSecurityContextRestricted(ctx, c, cfg.Namespace)
+ if securityContext != nil {
+ d.Spec.Template.Spec.Containers[0].SecurityContext = securityContext
+
+ } else {
+ d.Spec.Template.Spec.Containers[0].SecurityContext = kubernetes.DefaultOperatorSecurityContext()
+ }
+ }
}
return o
diff --git a/pkg/trait/container.go b/pkg/trait/container.go
index 141b4f58e..d2409c43e 100644
--- a/pkg/trait/container.go
+++ b/pkg/trait/container.go
@@ -39,6 +39,7 @@ import (
"github.com/apache/camel-k/v2/pkg/util/envvar"
"github.com/apache/camel-k/v2/pkg/util/knative"
"github.com/apache/camel-k/v2/pkg/util/kubernetes"
+ "github.com/apache/camel-k/v2/pkg/util/openshift"
)
const (
@@ -200,6 +201,8 @@ func (t *containerTrait) configureContainer(e *Environment) error {
}
t.configureCapabilities(e)
+ t.configureSecurityContext(e, &container)
+
var containers *[]corev1.Container
visited := false
@@ -339,3 +342,14 @@ func (t *containerTrait) configureCapabilities(e *Environment) {
e.ApplicationProperties["camel.context.rest-configuration.component"] = "platform-http"
}
}
+
+func (t *containerTrait) configureSecurityContext(e *Environment, container *corev1.Container) {
+ // get security context from security context constraint configuration in namespace
+ isOpenShift, _ := openshift.IsOpenShift(e.Client)
+ if isOpenShift {
+ securityContext, _ := openshift.GetOpenshiftSecurityContextRestricted(e.Ctx, e.Client, e.Platform.Namespace)
+ if securityContext != nil {
+ container.SecurityContext = securityContext
+ }
+ }
+}
diff --git a/pkg/util/kubernetes/security.go b/pkg/util/kubernetes/security.go
new file mode 100644
index 000000000..b4a4d7692
--- /dev/null
+++ b/pkg/util/kubernetes/security.go
@@ -0,0 +1,38 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package kubernetes
+
+import (
+ corev1 "k8s.io/api/core/v1"
+)
+
+// DefaultOperatorSecurityContext to ensure a container with low privilege and limited permissions.
+func DefaultOperatorSecurityContext() *corev1.SecurityContext {
+ runAsNonRoot := true
+ allowPrivilegeEscalation := false
+ sc := corev1.SecurityContext{
+ RunAsNonRoot: &runAsNonRoot,
+ SeccompProfile: &corev1.SeccompProfile{
+ Type: corev1.SeccompProfileTypeRuntimeDefault,
+ },
+ AllowPrivilegeEscalation: &allowPrivilegeEscalation,
+ Capabilities: &corev1.Capabilities{Drop: []corev1.Capability{"ALL"}},
+ }
+
+ return &sc
+}