fix: add restricted-compliant securityContext to Java init container#360
fix: add restricted-compliant securityContext to Java init container#360ab0utbla-k wants to merge 1 commit intoaws:mainfrom
Conversation
|
Hi, we need this feature, kindly assign reviewer please. |
| // Set a minimal restricted-compliant securityContext without runAsNonRoot/runAsUser | ||
| // to avoid the runAsNonRoot conflict (https://github.com/open-telemetry/opentelemetry-operator/issues/2272) | ||
| // while still satisfying the restricted Pod Security Standard. | ||
| pod = i.setInitContainerRestrictedSecurityContext(pod, javaInitContainerName) |
There was a problem hiding this comment.
seems like this security context is missing in NGINX instrumentation as well - https://github.com/ab0utbla-k/amazon-cloudwatch-agent-operator/blob/3969c9f684e19dbd5fb5be421c6d72183b95036e/pkg/instrumentation/sdk.go#L231 mind adding there as well ?
|
The other languages (Node.js, Python, .NET, Apache) use setInitContainerSecurityContext which copies the app container's full securityContext onto the init container. This PR introduces a separate Have you considered modifying the existing setInitContainerSecurityContext to copy the app container's securityContext but strip runAsNonRoot and runAsUser for the Java case? That would preserve any |
Fixes #361
Problem
The Java auto-instrumentation init container (
opentelemetry-auto-instrumentation-java) is created without anysecurityContext, causing pod creation to fail in namespaces enforcingpod-security.kubernetes.io/enforce: restricted.Other languages (NodeJS, Python, DotNet, Apache) are not affected — they all call
setInitContainerSecurityContext, which copies the app container's security context onto the init container.Root Cause
In
pkg/instrumentation/sdk.go,setInitContainerSecurityContextwas commented out for Java to avoid arunAsNonRootconflict with the root-based Java agent image (opentelemetry-operator#2272). However, this left the init container with nosecurityContextat all, violating the restricted Pod Security Standard.Fix
Added a new
setInitContainerRestrictedSecurityContextmethod that applies a minimal restricted-compliantsecurityContextto the Java init container:allowPrivilegeEscalation: falsecapabilities.drop: ["ALL"]seccompProfile.type: RuntimeDefaultIt deliberately omits
runAsNonRootandrunAsUserto avoid the #2272 conflict. The init container only copies a JAR into a shared volume, so it needs no capabilities and the hardcoded minimal context is appropriate.Reproduction
pod-security.kubernetes.io/enforce: restrictedinstrumentation.opentelemetry.io/inject-java: "true"and a restricted-compliantsecurityContextFailedCreateevent on the ReplicaSetTesting
Updated all existing test cases that assert on the Java init container's expected pod spec (3 in
sdk_test.go, 4 inpodmutator_test.go) to include the newsecurityContext. All tests pass.