[ 
https://issues.apache.org/jira/browse/CAMEL-21935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18086492#comment-18086492
 ] 

Claus Ibsen edited comment on CAMEL-21935 at 6/5/26 9:49 PM:
-------------------------------------------------------------

Analysis of the root cause:

Commit 089356d392b5 (CAMEL-21903, "Adjustable container image name on 
Kubernetes export", 2025-03-27) introduced a regression. Before that commit, 
configureContainerImage() set the image directly on the Container trait 
(containerTrait.setImage(image)), and ContainerTrait.apply() always called 
.withImage(containerTrait.getImage()) on the container builder. This worked for 
both Deployments and Knative Services.

After that commit:
- configureContainerImage() only sets JKube build properties (jkube.image.name, 
jkube.container-image.name) — it no longer calls containerTrait.setImage()
- ContainerTrait.apply() now conditionally sets the image: if 
(ObjectHelper.isNotEmpty(containerTrait.getImage())) — so with no image set on 
the trait, it skips it
- For Deployments: this works because JKube reads the build properties and 
populates the container image in its generated manifests
- For Knative Services: the manifest is generated entirely by the traits code, 
not by JKube. Since the Container trait has no image, the Knative Service 
container ends up with the bare artifact name (http-log:1.0-SNAPSHOT) instead 
of the full OpenShift internal registry URL

The issue was reported 7 days after that commit was merged (March 27 to April 
3, 2025), consistent with the timing.

Fix: TraitHelper.configureContainerImage() should still set the image on the 
Container trait so that Knative Service manifests (which are generated by 
traits, not by JKube) get the correct image reference. The JKube build 
properties can remain as they are for Deployment manifests.

Suggested PR: https://github.com/apache/camel/pull/23804


was (Author: davsclaus):
Analysis of the root cause:

Commit 089356d392b5 (CAMEL-21903, "Adjustable container image name on 
Kubernetes export", 2025-03-27) introduced a regression. Before that commit, 
configureContainerImage() set the image directly on the Container trait 
(containerTrait.setImage(image)), and ContainerTrait.apply() always called 
.withImage(containerTrait.getImage()) on the container builder. This worked for 
both Deployments and Knative Services.

After that commit:
- configureContainerImage() only sets JKube build properties (jkube.image.name, 
jkube.container-image.name) — it no longer calls containerTrait.setImage()
- ContainerTrait.apply() now conditionally sets the image: if 
(ObjectHelper.isNotEmpty(containerTrait.getImage())) — so with no image set on 
the trait, it skips it
- For Deployments: this works because JKube reads the build properties and 
populates the container image in its generated manifests
- For Knative Services: the manifest is generated entirely by the traits code, 
not by JKube. Since the Container trait has no image, the Knative Service 
container ends up with the bare artifact name (http-log:1.0-SNAPSHOT) instead 
of the full OpenShift internal registry URL

The issue was reported 7 days after that commit was merged (March 27 to April 
3, 2025), consistent with the timing.

Fix: TraitHelper.configureContainerImage() should still set the image on the 
Container trait so that Knative Service manifests (which are generated by 
traits, not by JKube) get the correct image reference. The JKube build 
properties can remain as they are for Deployment manifests.

Suggested PR: https://github.com/apache/camel/pull/TBD

> camel-jbang - kubernetes plugin fails to run when 
> knative-service.enabled=true in openshift
> -------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-21935
>                 URL: https://issues.apache.org/jira/browse/CAMEL-21935
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jbang
>    Affects Versions: 4.11.0
>         Environment: Camel 4.11.0-SNAPSHOT
> Openshift 4.18.4
>  
>            Reporter: Claudio Miranda
>            Priority: Minor
>
> camel-jbang-plugin-kubernetes fails to run a http consumer as knative-service 
> in openshift with knative installed.
> Given the route
> {code}
> public class HttpLog extends RouteBuilder {
>   @Override
>   public void configure() throws Exception {
>      from("platform-http:/hello?httpMethodRestrict=GET")
>       .setBody(simple("Hello ${header.name}"))
>       .log("${header.name}");
>     }
> }
> {code}
>  
> the run command
> {code}
> camel kubernetes run --verbose HttpLog.java --trait 
> knative-service.enabled=true
> {code}
>  
> It correctly detects as openshift to build the image and deploys it
> {code}
> Automatic kubernetes cluster detection... OPENSHIFT
> Exporting application ...
> OpenShift forcing --image-builder=docker
> Generating fresh run data
> from other console: curl -H name:World http://localhost:8080/hello
> Exporting as Quarkus project to: .camel-jbang-run/http-log
> Building Kubernetes manifest ...
> from other console: curl -H name:World http://localhost:8080/hello
> Project export successful!
> Deploying to OPENSHIFT ...
> Run: .camel-jbang-run/http-log/mvnw -ntp --file .camel-jbang-run/http-log 
> -Djkube.jib.push=true -Djkube.skip.push=false -Djkube.skip.resource=true 
> oc:build oc:apply -Djkube.openshiftManifest=src/main/jkube/service.yml
> [INFO] Scanning for projects...
> [INFO] 
> [INFO] --------------------< org.example.project:http-log 
> >--------------------
> [INFO] Building http-log 1.0-SNAPSHOT
> [INFO]   from pom.xml
> [INFO] --------------------------------[ jar 
> ]---------------------------------
> [INFO] 
> [INFO] --- oc:1.18.1:build (default-cli) @ http-log ---
> [INFO] oc: Using OpenShift build with strategy Docker
> [INFO] oc: [http-log:1.0-SNAPSHOT]: Created docker source tar 
> /home/claudio/alphaworks/outros/camel-spring-boot-examples/infinispan/.camel-jbang-run/http-log/target/docker/http-log/1.0-SNAPSHOT/tmp/docker-build.tar
> [INFO] oc: Updating BuildServiceConfig http-log-s2i for Docker strategy
> [INFO] oc: Adding to ImageStream http-log
> [INFO] oc: Starting Build http-log-s2i
> [INFO] oc: Waiting for build http-log-s2i-2 to complete...
> [INFO] oc: Receiving source from STDIN as archive ...
> [INFO] oc: Replaced Dockerfile FROM image eclipse-temurin:17
> [INFO] oc: time="2025-04-03T11:22:14Z" level=info msg="Not using native diff 
> for overlay, this may cause degraded performance for building images: kernel 
> has CONFIG_OVERLAY_FS_REDIRECT_DIR enabled"
> [INFO] oc: I0403 11:22:14.123365       1 defaults.go:112] Defaulting to 
> storage driver "overlay" with options [mountopt=metacopy=on].
> [INFO] oc: Caching blobs under "/var/cache/blobs".
> [INFO] oc: 
> [INFO] oc: Pulling image eclipse-temurin:17 ...
> [INFO] oc: Resolving "eclipse-temurin" using unqualified-search registries 
> (/var/run/configs/openshift.io/build-system/registries.conf)
> [INFO] oc: Trying to pull registry.redhat.io/eclipse-temurin:17...
> [INFO] oc: Trying to pull registry.access.redhat.com/eclipse-temurin:17...
> [INFO] oc: Trying to pull quay.io/eclipse-temurin:17...
> [INFO] oc: Trying to pull docker.io/library/eclipse-temurin:17...
> [INFO] oc: Getting image source signatures
> [INFO] oc: Copying blob 
> sha256:3d2700d3f64bcbf1b67ccf65a715330aa34cb16c0c1e8c9146c15011233d6fc4
> [INFO] oc: Copying blob 
> sha256:5a7813e071bfadf18aaa6ca8318be4824a9b6297b3240f2cc84c1db6f4113040
> [INFO] oc: Copying blob 
> sha256:0b4fff2c206cae13745f200704b38134105ac3a4bcf862dc0d04d08f6aa9d2ce
> [INFO] oc: Copying blob 
> sha256:a2ff804eb32a079e6f9a54eb31c0f43d9d6c56fc09c7735ec59e2ad948fc6af6
> [INFO] oc: Copying blob 
> sha256:da5768705e3b7e7e3c61f95a6ed0478a61076d084e1adedfe24e09ce95d5c433
> [INFO] oc: Copying config 
> sha256:3003266067237a5e9757aa2256c9b253e916822545cc4c14d593c59cfb35a8da
> [INFO] oc: Writing manifest to image destination
> [INFO] oc: Adding transient rw bind mount for /run/secrets/rhsm
> [INFO] oc: STEP 1/5: FROM eclipse-temurin:17
> [INFO] oc: STEP 2/5: COPY /entrypoint/maven /maven/
> [INFO] oc: --> d4c3dabf3294
> [INFO] oc: STEP 3/5: ENTRYPOINT ["/maven/quarkus/run-java.sh","run"]
> [INFO] oc: --> 5ecd9cfc4907
> [INFO] oc: STEP 4/5: ENV "OPENSHIFT_BUILD_NAME"="http-log-s2i-2" 
> "OPENSHIFT_BUILD_NAMESPACE"="cmiranda-dev"
> [INFO] oc: --> 2044b1fe8ac6
> [INFO] oc: STEP 5/5: LABEL "io.openshift.build.name"="http-log-s2i-2" 
> "io.openshift.build.namespace"="cmiranda-dev"
> [INFO] oc: COMMIT 
> temp.builder.openshift.io/cmiranda-dev/http-log-s2i-2:721358c9
> [INFO] oc: --> b7329dd6adbd
> [INFO] oc: Successfully tagged 
> temp.builder.openshift.io/cmiranda-dev/http-log-s2i-2:721358c9
> [INFO] oc: b7329dd6adbdd0d0c92ba52767d994371ea2e7c354249748c6d921e013b28af7
> [INFO] oc: 
> [INFO] oc: Pushing image 
> image-registry.openshift-image-registry.svc:5000/cmiranda-dev/http-log:1.0-SNAPSHOT
>  ...
> [INFO] oc: Getting image source signatures
> [INFO] oc: Copying blob 
> sha256:5a7813e071bfadf18aaa6ca8318be4824a9b6297b3240f2cc84c1db6f4113040
> [INFO] oc: Copying blob 
> sha256:4a02bcac97d26e818a6321a1cce31db068c160d807a9e301c152813c1061704f
> [INFO] oc: Copying blob 
> sha256:da5768705e3b7e7e3c61f95a6ed0478a61076d084e1adedfe24e09ce95d5c433
> [INFO] oc: Copying blob 
> sha256:3d2700d3f64bcbf1b67ccf65a715330aa34cb16c0c1e8c9146c15011233d6fc4
> [INFO] oc: Copying blob 
> sha256:0b4fff2c206cae13745f200704b38134105ac3a4bcf862dc0d04d08f6aa9d2ce
> [INFO] oc: Copying blob 
> sha256:a2ff804eb32a079e6f9a54eb31c0f43d9d6c56fc09c7735ec59e2ad948fc6af6
> [INFO] oc: Copying config 
> sha256:b7329dd6adbdd0d0c92ba52767d994371ea2e7c354249748c6d921e013b28af7
> [INFO] oc: Writing manifest to image destination
> [INFO] oc: Successfully pushed 
> image-registry.openshift-image-registry.svc:5000/cmiranda-dev/http-log@sha256:947dd1587d000e8ceef93af931f9b051142c68aaafdb0d132078d390caae5ef0
> [INFO] oc: Push successful
> [INFO] oc: Build http-log-s2i-2 in status Complete
> [INFO] oc: Found tag on ImageStream http-log tag: 
> sha256:947dd1587d000e8ceef93af931f9b051142c68aaafdb0d132078d390caae5ef0
> [INFO] oc: ImageStream http-log written to 
> /home/claudio/alphaworks/outros/camel-spring-boot-examples/infinispan/.camel-jbang-run/http-log/target/http-log-is.yml
> [INFO] 
> [INFO] --- oc:1.18.1:apply (default-cli) @ http-log ---
> [INFO] oc: OpenShift platform detected
> [INFO] oc: Using OpenShift at https://api.rm1.0a51.p1.openshiftapps.com:6443/ 
> in namespace null with manifest 
> /home/claudio/alphaworks/outros/camel-spring-boot-examples/infinispan/.camel-jbang-run/http-log/src/main/jkube/service.yml
>  
> [INFO] oc: Created Custom Resource: serving.knative.dev/v1#Service 
> cmiranda-dev/http-log
> [INFO] oc: HINT: Use the command `oc get pods -w` to watch your pods start up
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] Total time:  36.284 s
> [INFO] Finished at: 2025-04-03T12:22:41+01:00
> [INFO] 
> ------------------------------------------------------------------------
> {code}
>  
> However the knative-service fails with:
> {code}
> Revision "http-log-00001" failed with message: Unable to fetch image 
> "http-log:1.0-SNAPSHOT": failed to resolve image to digest: HEAD 
> https://index.docker.io/v2/library/http-log/manifests/1.0-SNAPSHOT: 
> unexpected status code 401 Unauthorized (HEAD responses have no body, use GET 
> for details).
> {code}
>  
> The knative-service manifest
> {code}
> k get service.serving.knative.dev/http-log -oyaml
> apiVersion: serving.knative.dev/v1
> kind: Service
> metadata:
>   annotations:
>     serving.knative.dev/creator: cmiranda
>     serving.knative.dev/lastModifier: cmiranda
>   creationTimestamp: "2025-04-03T11:22:41Z"
>   generation: 1
>   labels:
>     app: http-log
>     app.kubernetes.io/managed-by: camel-jbang
>     app.kubernetes.io/name: http-log
>     app.kubernetes.io/version: 1.0-SNAPSHOT
>     bindings.knative.dev/include: "true"
>     provider: jkube
>     version: 1.0-SNAPSHOT
>   name: http-log
>   namespace: cmiranda-dev
>   resourceVersion: "788810180"
>   uid: af103deb-8cb1-42b8-a18d-da377e43dd91
> spec:
>   template:
>     metadata:
>       creationTimestamp: null
>       labels:
>         app.kubernetes.io/name: http-log
>     spec:
>       containerConcurrency: 0
>       containers:
>       - image: http-log:1.0-SNAPSHOT
>         name: http-log
>         ports:
>         - containerPort: 8080
>           name: h2c
>           protocol: TCP
>         readinessProbe:
>           successThreshold: 1
>           tcpSocket:
>             port: 0
>         resources: {}
>       enableServiceLinks: false
>       timeoutSeconds: 300
>   traffic:
>   - latestRevision: true
>     percent: 100
> status:
>   conditions:
>   - lastTransitionTime: "2025-04-03T11:22:41Z"
>     message: 'Revision "http-log-00001" failed with message: Unable to fetch 
> image
>       "http-log:1.0-SNAPSHOT": failed to resolve image to digest: HEAD 
> https://index.docker.io/v2/library/http-log/manifests/1.0-SNAPSHOT:
>       unexpected status code 401 Unauthorized (HEAD responses have no body, 
> use GET
>       for details).'
>     reason: RevisionFailed
>     status: "False"
>     type: ConfigurationsReady
>   - lastTransitionTime: "2025-04-03T11:22:41Z"
>     message: Configuration "http-log" does not have any ready Revision.
>     reason: RevisionMissing
>     status: "False"
>     type: Ready
>   - lastTransitionTime: "2025-04-03T11:22:41Z"
>     message: Configuration "http-log" does not have any ready Revision.
>     reason: RevisionMissing
>     status: "False"
>     type: RoutesReady
>   latestCreatedRevisionName: http-log-00001
>   observedGeneration: 1
>   url: 
> [https://http-log-cmiranda-dev.apps.rm1.0a51.p1.openshiftapps.com|https://http-log-cmiranda-dev.apps.rm1.0a51.p1.openshiftapps.com/]
> {code}
>  
> The S2I build image is 
> {code}
> image-registry.openshift-image-registry.svc:5000/cmiranda-dev/http-log@sha256:947dd1587d000e8ceef93af931f9b051142c68aaafdb0d132078d390caae5ef0
> {code}
>  
> However this image address is not updated into the knative-service 
> {{spec.template.spec.containers.image}} manifest, this needs investigation.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to