Jkube: Deployment to OpenShift 4.6 not working using login parameters instead of oc login

Created on 3 Feb 2021  路  11Comments  路  Source: eclipse/jkube

Description

Info

  • Eclipse JKube version :
  • Maven version (mvn -v) : 3.6.3

  • Kubernetes / OpenShift setup and version : OpenShift 4.6.9

  • If it's a bug, how to reproduce :+1:

    • Ensure that you are nto logged in locally oc logout

    • Create a project in an OpenShift 4.6.x instance, fo risntance named 78-jkube

    • clone https://github.com/apupier/openshift-maven-plugin-not-working-example

    • mvn clean install oc:deploy -Dkubernetes.master=https://api.crc.testing:6443 -Dkubernetes.namespace=78-jkube -Dkubernetes.auth.basic.username=developer -Dkubernetes.auth.basic.password=developer -Dfabric8.mode=openshift -Dkubernetes.trust.certificates=true -Dfabric8.build.strategy=s2i -Dkubernetes.auth.tryServiceAccount=false -Dfabric8.generator.from=registry.access.redhat.com/fuse7/fuse-java-openshift -Dfabric8.generator.fromMode=docker -Dkubernetes.auth.tryKubeConfig=false

the error is:

[INFO] --- openshift-maven-plugin:7.8.0.fuse-sb2-780038-redhat-00001:build (default) @ camel-ose-springboot-xml ---
[INFO] oc: Using OpenShift build with strategy S2I
[INFO] oc: Running in OpenShift mode
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.8 as base / builder
[ERROR] oc: Failed to execute the build [OpenShift platform has been specified but OpenShift has not been detected!]

I tried several variations but this one is working for sure with OpenShift 3.11.
With same project, when logged in through oc, it is workign fine deployign on OpenShift 4.6.

bug

All 11 comments

same problem than with fabric8-maven-plugin: https://github.com/fabric8io/fabric8-maven-plugin/issues/1823

I think this issue lies in OpenShiftClient. Let's take a look at LoginExample

    try (DefaultKubernetesClient kubernetesClient = new DefaultKubernetesClient(new ConfigBuilder()
      .withMasterUrl("cluster_url")
      .withUsername("my_username")
      .withPassword("my_password")
      .build())) {

      final OpenShiftClient openShiftClient = kubernetesClient.adapt(OpenShiftClient.class);
      final ProjectList pl = openShiftClient.projects().list();
      logger.info("{}", pl);
    }

When I run this code on minishift with OpenShift version 3.11 with developer:developer t gives this output:

mvn exec:java -Dexec.mainClass="io.fabric8.openshift.examples.LoginExample"
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 1 modules...
[INFO] Installing Nexus Staging features:
[INFO]   ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] 
[INFO] -------------------< io.fabric8:kubernetes-examples >-------------------
[INFO] Building Fabric8 :: Kubernetes :: Client Examples 5.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ kubernetes-examples ---
[io.fabric8.openshift.examples.LoginExample.main()] INFO io.fabric8.openshift.examples.LoginExample - ProjectList(apiVersion=project.openshift.io/v1, items=[Project(apiVersion=project.openshift.io/v1, kind=Project, metadata=ObjectMeta(annotations={openshift.io/description=Initial developer project, openshift.io/display-name=My Project, openshift.io/requester=developer, openshift.io/sa.scc.mcs=s0:c12,c4, openshift.io/sa.scc.supplemental-groups=1000140000/10000, openshift.io/sa.scc.uid-range=1000140000/10000}, clusterName=null, creationTimestamp=2021-02-03T18:44:21Z, deletionGracePeriodSeconds=null, deletionTimestamp=null, finalizers=[], generateName=null, generation=null, labels=null, managedFields=[], name=myproject, namespace=null, ownerReferences=[], resourceVersion=2222, selfLink=/apis/project.openshift.io/v1/projects/myproject, uid=d4208612-664f-11eb-84b8-5254002b93cd, additionalProperties={}), spec=ProjectSpec(finalizers=[kubernetes], additionalProperties={}), status=ProjectStatus(conditions=[], phase=Active, additionalProperties={}), additionalProperties={})], kind=ProjectList, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=/apis/project.openshift.io/v1/projects, additionalProperties={}), additionalProperties={})

But same code fails on crc 1.21.0 with OpenShift 4.6.9 with this error:

kubernetes-examples : $ mvn exec:java -Dexec.mainClass="io.fabric8.openshift.examples.LoginExample"
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 1 modules...
[INFO] Installing Nexus Staging features:
[INFO]   ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO] 
[INFO] -------------------< io.fabric8:kubernetes-examples >-------------------
[INFO] Building Fabric8 :: Kubernetes :: Client Examples 5.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ kubernetes-examples ---
[WARNING] 
io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable (KubernetesClientException.java:64)
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable (KubernetesClientException.java:53)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShiftAPIGroups (OpenshiftAdapterSupport.java:80)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShift (OpenshiftAdapterSupport.java:55)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isAdaptable (OpenshiftAdapterSupport.java:43)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:45)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:33)
    at io.fabric8.kubernetes.client.BaseClient.adapt (BaseClient.java:128)
    at io.fabric8.openshift.examples.LoginExample.main (LoginExample.java:36)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:834)
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alert.createSSLException (Alert.java:131)
    at sun.security.ssl.TransportContext.fatal (TransportContext.java:353)
    at sun.security.ssl.TransportContext.fatal (TransportContext.java:296)
    at sun.security.ssl.TransportContext.fatal (TransportContext.java:291)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts (CertificateMessage.java:654)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate (CertificateMessage.java:473)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume (CertificateMessage.java:369)
    at sun.security.ssl.SSLHandshake.consume (SSLHandshake.java:392)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:444)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:422)
    at sun.security.ssl.TransportContext.dispatch (TransportContext.java:183)
    at sun.security.ssl.SSLTransport.decode (SSLTransport.java:171)
    at sun.security.ssl.SSLSocketImpl.decode (SSLSocketImpl.java:1359)
    at sun.security.ssl.SSLSocketImpl.readHandshakeRecord (SSLSocketImpl.java:1268)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:401)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:373)
    at okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:320)
    at okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:284)
    at okhttp3.internal.connection.RealConnection.connect (RealConnection.java:169)
    at okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:258)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:135)
    at okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:114)
    at okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:127)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.BackwardsCompatibilityInterceptor.intercept (BackwardsCompatibilityInterceptor.java:133)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.TokenRefreshInterceptor.intercept (TokenRefreshInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.ImpersonatorInterceptor.intercept (ImpersonatorInterceptor.java:68)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.HttpClientUtils.lambda$createHttpClient$3 (HttpClientUtils.java:145)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:257)
    at okhttp3.RealCall.execute (RealCall.java:93)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShiftAPIGroups (OpenshiftAdapterSupport.java:71)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShift (OpenshiftAdapterSupport.java:55)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isAdaptable (OpenshiftAdapterSupport.java:43)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:45)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:33)
    at io.fabric8.kubernetes.client.BaseClient.adapt (BaseClient.java:128)
    at io.fabric8.openshift.examples.LoginExample.main (LoginExample.java:36)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:834)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:439)
    at sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:306)
    at sun.security.validator.Validator.validate (Validator.java:264)
    at sun.security.ssl.X509TrustManagerImpl.validate (X509TrustManagerImpl.java:313)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java:222)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:129)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts (CertificateMessage.java:638)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate (CertificateMessage.java:473)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume (CertificateMessage.java:369)
    at sun.security.ssl.SSLHandshake.consume (SSLHandshake.java:392)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:444)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:422)
    at sun.security.ssl.TransportContext.dispatch (TransportContext.java:183)
    at sun.security.ssl.SSLTransport.decode (SSLTransport.java:171)
    at sun.security.ssl.SSLSocketImpl.decode (SSLSocketImpl.java:1359)
    at sun.security.ssl.SSLSocketImpl.readHandshakeRecord (SSLSocketImpl.java:1268)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:401)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:373)
    at okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:320)
    at okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:284)
    at okhttp3.internal.connection.RealConnection.connect (RealConnection.java:169)
    at okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:258)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:135)
    at okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:114)
    at okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:127)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.BackwardsCompatibilityInterceptor.intercept (BackwardsCompatibilityInterceptor.java:133)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.TokenRefreshInterceptor.intercept (TokenRefreshInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.ImpersonatorInterceptor.intercept (ImpersonatorInterceptor.java:68)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.HttpClientUtils.lambda$createHttpClient$3 (HttpClientUtils.java:145)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:257)
    at okhttp3.RealCall.execute (RealCall.java:93)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShiftAPIGroups (OpenshiftAdapterSupport.java:71)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShift (OpenshiftAdapterSupport.java:55)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isAdaptable (OpenshiftAdapterSupport.java:43)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:45)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:33)
    at io.fabric8.kubernetes.client.BaseClient.adapt (BaseClient.java:128)
    at io.fabric8.openshift.examples.LoginExample.main (LoginExample.java:36)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:834)
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build (SunCertPathBuilder.java:141)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild (SunCertPathBuilder.java:126)
    at java.security.cert.CertPathBuilder.build (CertPathBuilder.java:297)
    at sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:434)
    at sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:306)
    at sun.security.validator.Validator.validate (Validator.java:264)
    at sun.security.ssl.X509TrustManagerImpl.validate (X509TrustManagerImpl.java:313)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java:222)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:129)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts (CertificateMessage.java:638)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate (CertificateMessage.java:473)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume (CertificateMessage.java:369)
    at sun.security.ssl.SSLHandshake.consume (SSLHandshake.java:392)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:444)
    at sun.security.ssl.HandshakeContext.dispatch (HandshakeContext.java:422)
    at sun.security.ssl.TransportContext.dispatch (TransportContext.java:183)
    at sun.security.ssl.SSLTransport.decode (SSLTransport.java:171)
    at sun.security.ssl.SSLSocketImpl.decode (SSLSocketImpl.java:1359)
    at sun.security.ssl.SSLSocketImpl.readHandshakeRecord (SSLSocketImpl.java:1268)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:401)
    at sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:373)
    at okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:320)
    at okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:284)
    at okhttp3.internal.connection.RealConnection.connect (RealConnection.java:169)
    at okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:258)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:135)
    at okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:114)
    at okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:127)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.BackwardsCompatibilityInterceptor.intercept (BackwardsCompatibilityInterceptor.java:133)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.TokenRefreshInterceptor.intercept (TokenRefreshInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.ImpersonatorInterceptor.intercept (ImpersonatorInterceptor.java:68)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at io.fabric8.kubernetes.client.utils.HttpClientUtils.lambda$createHttpClient$3 (HttpClientUtils.java:145)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
    at okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:257)
    at okhttp3.RealCall.execute (RealCall.java:93)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShiftAPIGroups (OpenshiftAdapterSupport.java:71)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isOpenShift (OpenshiftAdapterSupport.java:55)
    at io.fabric8.openshift.client.OpenshiftAdapterSupport.isAdaptable (OpenshiftAdapterSupport.java:43)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:45)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:33)
    at io.fabric8.kubernetes.client.BaseClient.adapt (BaseClient.java:128)
    at io.fabric8.openshift.examples.LoginExample.main (LoginExample.java:36)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:834)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.322 s
[INFO] Finished at: 2021-02-04T00:00:30+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:java (default-cli) on project kubernetes-examples: An exception occured while executing the Java class. An error has occurred.: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]

I've seen that before.

Do you know if oc bundles any extra CA?


Or if your .kube/config cluster config is referencing a root CA that we might be ignoring in our inferred config / or your parameterized config?

I was facing this error due to certificates not being loaded in Config due to currentContext misconfigured in my ~/.kube/config file. When I provided a correct KubeConfig file, I didn't face this SSLException. However, I faced OpenShift not detected error.

[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ kubernetes-examples ---
[WARNING] 
io.fabric8.openshift.client.OpenShiftNotAvailableException: OpenShift is not available. Root paths at: https://api.crc.testing:6443/ do not include oapi.
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:39)
    at io.fabric8.openshift.client.OpenShiftExtensionAdapter.adapt (OpenShiftExtensionAdapter.java:26)
    at io.fabric8.kubernetes.client.BaseClient.adapt (BaseClient.java:128)
    at io.fabric8.openshift.examples.LoginExample.main (LoginExample.java:36)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:834)

We are checking whether a specified cluster is OpenShift or not here in OpenShiftHelper:
https://github.com/eclipse/jkube/blob/4a87c508210f3d40ef1376eab1562d58978064ff/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/OpenshiftHelper.java#L55-L57

This client.isAdaptable delegates call to OpenShiftAdapterSupport which tries to hit /apis endpoint to get a list of APIGroups. We iterate over the list to check whether it contains at least one entry with *.openshift.io APIGroup. If we find any match, it's considered OpenShift otherwise not.

On OpenShift 3.x, this /apis endpoint returns 200 even without any OAuth token configured in Config.
On OpenShift 4.x, this /apis endpoint returns 403.

We handle 403 in OpenShiftOAuthInterceptor but when we're in OpenShiftAdapterSupport the OkHttpClient being used doesn't contain this interceptor. I think we should reuse DefaultOpenShiftClient.createWithOpenShiftOAuthInterceptor OkHttpClient while hitting /apis

We handle 403 in OpenShiftOAuthInterceptor but when we're in OpenShiftAdapterSupport the OkHttpClient being used doesn't contain this interceptor. I think we should reuse DefaultOpenShiftClient.createWithOpenShiftOAuthInterceptor OkHttpClient while hitting /apis

Does this mean that the fix has to be implemented in the Fabric8 project?

Yeah, you're right. I'll create a PR for this in kubernetes-client

Fix merged in Kubernetes Client.
We need to update the Client dependency once it gets released.

this is part of 5.1.1 https://github.com/fabric8io/kubernetes-client/blob/master/CHANGELOG.md#bugs-1 which has been released on the 24/02/21

I think this is fixed now that there was the upgrade to Kubernetes Client 5.1.1

@apupier : Thanks a lot for taking care of this. I think you should be able to get this fix in v1.2.0 (We might release it at the end of this month)

Was this page helpful?
0 / 5 - 0 ratings