You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/06/26 13:10:59 UTC

[camel] 02/02: CAMEL-18171: camel-kubernetes - Add secret/configmap property placeholder function. Use configurer to avoid reflection.

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

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

commit b209832bf4e3c4df45ed917c44d654b51489519b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jun 26 15:10:38 2022 +0200

    CAMEL-18171: camel-kubernetes - Add secret/configmap property placeholder function. Use configurer to avoid reflection.
---
 components/camel-kubernetes/pom.xml                |  49 +++
 .../client/ConfigFluentImplConfigurer.java         | 370 +++++++++++++++++++++
 .../io.fabric8.kubernetes.client.ConfigBuilder     |   2 +
 .../properties/BasePropertiesFunction.java         |  28 +-
 .../properties/KubernetesClientConfigureTest.java  |   8 +-
 5 files changed, 453 insertions(+), 4 deletions(-)

diff --git a/components/camel-kubernetes/pom.xml b/components/camel-kubernetes/pom.xml
index eeb56522e43..0bf54b52e92 100644
--- a/components/camel-kubernetes/pom.xml
+++ b/components/camel-kubernetes/pom.xml
@@ -147,4 +147,53 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <!-- we need to generate additional configurer classes -->
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            <allowBuilderPattern>true</allowBuilderPattern>
+                            <skipDeprecated>true</skipDeprecated>
+                            <classes>io.fabric8.kubernetes.client.ConfigBuilder=io.fabric8.kubernetes.client.ConfigFluentImpl</classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                            <goal>add-resource</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>src/generated/java</source>
+                            </sources>
+                            <resources>
+                                <resource>
+                                    <directory>src/generated/resources</directory>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java b/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java
new file mode 100644
index 00000000000..28da60102d1
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java
@@ -0,0 +1,370 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package io.fabric8.kubernetes.client;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class ConfigFluentImplConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        io.fabric8.kubernetes.client.ConfigBuilder target = (io.fabric8.kubernetes.client.ConfigBuilder) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": target.withApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+        case "authprovider":
+        case "AuthProvider": target.withAuthProvider(property(camelContext, io.fabric8.kubernetes.api.model.AuthProviderConfig.class, value)); return true;
+        case "cacertdata":
+        case "CaCertData": target.withCaCertData(property(camelContext, java.lang.String.class, value)); return true;
+        case "cacertfile":
+        case "CaCertFile": target.withCaCertFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientcertdata":
+        case "ClientCertData": target.withClientCertData(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientcertfile":
+        case "ClientCertFile": target.withClientCertFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": target.withClientKeyAlgo(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeydata":
+        case "ClientKeyData": target.withClientKeyData(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeyfile":
+        case "ClientKeyFile": target.withClientKeyFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": target.withClientKeyPassphrase(property(camelContext, java.lang.String.class, value)); return true;
+        case "connectiontimeout":
+        case "ConnectionTimeout": target.withConnectionTimeout(property(camelContext, int.class, value)); return true;
+        case "contexts":
+        case "Contexts": target.withContexts(property(camelContext, java.util.List.class, value)); return true;
+        case "currentcontext":
+        case "CurrentContext": target.withCurrentContext(property(camelContext, io.fabric8.kubernetes.api.model.NamedContext.class, value)); return true;
+        case "customheaders":
+        case "CustomHeaders": target.withCustomHeaders(property(camelContext, java.util.Map.class, value)); return true;
+        case "disablehostnameverification":
+        case "DisableHostnameVerification": target.withDisableHostnameVerification(property(camelContext, boolean.class, value)); return true;
+        case "errormessages":
+        case "ErrorMessages": target.withErrorMessages(property(camelContext, java.util.Map.class, value)); return true;
+        case "http2disable":
+        case "Http2Disable": target.withHttp2Disable(property(camelContext, boolean.class, value)); return true;
+        case "httpproxy":
+        case "HttpProxy": target.withHttpProxy(property(camelContext, java.lang.String.class, value)); return true;
+        case "httpsproxy":
+        case "HttpsProxy": target.withHttpsProxy(property(camelContext, java.lang.String.class, value)); return true;
+        case "impersonateextras":
+        case "ImpersonateExtras": target.withImpersonateExtras(property(camelContext, java.util.Map.class, value)); return true;
+        case "impersonategroup":
+        case "ImpersonateGroup": target.withImpersonateGroup(property(camelContext, java.lang.String.class, value)); return true;
+        case "impersonategroups":
+        case "ImpersonateGroups": target.withImpersonateGroups(property(camelContext, java.lang.String[].class, value)); return true;
+        case "impersonateusername":
+        case "ImpersonateUsername": target.withImpersonateUsername(property(camelContext, java.lang.String.class, value)); return true;
+        case "keystorefile":
+        case "KeyStoreFile": target.withKeyStoreFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "keystorepassphrase":
+        case "KeyStorePassphrase": target.withKeyStorePassphrase(property(camelContext, java.lang.String.class, value)); return true;
+        case "logginginterval":
+        case "LoggingInterval": target.withLoggingInterval(property(camelContext, int.class, value)); return true;
+        case "masterurl":
+        case "MasterUrl": target.withMasterUrl(property(camelContext, java.lang.String.class, value)); return true;
+        case "maxconcurrentrequests":
+        case "MaxConcurrentRequests": target.withMaxConcurrentRequests(property(camelContext, int.class, value)); return true;
+        case "maxconcurrentrequestsperhost":
+        case "MaxConcurrentRequestsPerHost": target.withMaxConcurrentRequestsPerHost(property(camelContext, int.class, value)); return true;
+        case "namespace":
+        case "Namespace": target.withNamespace(property(camelContext, java.lang.String.class, value)); return true;
+        case "noproxy":
+        case "NoProxy": target.withNoProxy(property(camelContext, java.lang.String[].class, value)); return true;
+        case "oauthtoken":
+        case "OauthToken": target.withOauthToken(property(camelContext, java.lang.String.class, value)); return true;
+        case "oauthtokenprovider":
+        case "OauthTokenProvider": target.withOauthTokenProvider(property(camelContext, io.fabric8.kubernetes.client.OAuthTokenProvider.class, value)); return true;
+        case "password":
+        case "Password": target.withPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxypassword":
+        case "ProxyPassword": target.withProxyPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyusername":
+        case "ProxyUsername": target.withProxyUsername(property(camelContext, java.lang.String.class, value)); return true;
+        case "requestretrybackoffinterval":
+        case "RequestRetryBackoffInterval": target.withRequestRetryBackoffInterval(property(camelContext, int.class, value)); return true;
+        case "requestretrybackofflimit":
+        case "RequestRetryBackoffLimit": target.withRequestRetryBackoffLimit(property(camelContext, int.class, value)); return true;
+        case "requesttimeout":
+        case "RequestTimeout": target.withRequestTimeout(property(camelContext, int.class, value)); return true;
+        case "rollingtimeout":
+        case "RollingTimeout": target.withRollingTimeout(property(camelContext, long.class, value)); return true;
+        case "scaletimeout":
+        case "ScaleTimeout": target.withScaleTimeout(property(camelContext, long.class, value)); return true;
+        case "tlsversions":
+        case "TlsVersions": target.withTlsVersions(property(camelContext, io.fabric8.kubernetes.client.http.TlsVersion[].class, value)); return true;
+        case "trustcerts":
+        case "TrustCerts": target.withTrustCerts(property(camelContext, boolean.class, value)); return true;
+        case "truststorefile":
+        case "TrustStoreFile": target.withTrustStoreFile(property(camelContext, java.lang.String.class, value)); return true;
+        case "truststorepassphrase":
+        case "TrustStorePassphrase": target.withTrustStorePassphrase(property(camelContext, java.lang.String.class, value)); return true;
+        case "uploadconnectiontimeout":
+        case "UploadConnectionTimeout": target.withUploadConnectionTimeout(property(camelContext, int.class, value)); return true;
+        case "uploadrequesttimeout":
+        case "UploadRequestTimeout": target.withUploadRequestTimeout(property(camelContext, int.class, value)); return true;
+        case "useragent":
+        case "UserAgent": target.withUserAgent(property(camelContext, java.lang.String.class, value)); return true;
+        case "username":
+        case "Username": target.withUsername(property(camelContext, java.lang.String.class, value)); return true;
+        case "watchreconnectinterval":
+        case "WatchReconnectInterval": target.withWatchReconnectInterval(property(camelContext, int.class, value)); return true;
+        case "watchreconnectlimit":
+        case "WatchReconnectLimit": target.withWatchReconnectLimit(property(camelContext, int.class, value)); return true;
+        case "websocketpinginterval":
+        case "WebsocketPingInterval": target.withWebsocketPingInterval(property(camelContext, long.class, value)); return true;
+        case "websockettimeout":
+        case "WebsocketTimeout": target.withWebsocketTimeout(property(camelContext, long.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": return java.lang.String.class;
+        case "authprovider":
+        case "AuthProvider": return io.fabric8.kubernetes.api.model.AuthProviderConfig.class;
+        case "cacertdata":
+        case "CaCertData": return java.lang.String.class;
+        case "cacertfile":
+        case "CaCertFile": return java.lang.String.class;
+        case "clientcertdata":
+        case "ClientCertData": return java.lang.String.class;
+        case "clientcertfile":
+        case "ClientCertFile": return java.lang.String.class;
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": return java.lang.String.class;
+        case "clientkeydata":
+        case "ClientKeyData": return java.lang.String.class;
+        case "clientkeyfile":
+        case "ClientKeyFile": return java.lang.String.class;
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": return java.lang.String.class;
+        case "connectiontimeout":
+        case "ConnectionTimeout": return int.class;
+        case "contexts":
+        case "Contexts": return java.util.List.class;
+        case "currentcontext":
+        case "CurrentContext": return io.fabric8.kubernetes.api.model.NamedContext.class;
+        case "customheaders":
+        case "CustomHeaders": return java.util.Map.class;
+        case "disablehostnameverification":
+        case "DisableHostnameVerification": return boolean.class;
+        case "errormessages":
+        case "ErrorMessages": return java.util.Map.class;
+        case "http2disable":
+        case "Http2Disable": return boolean.class;
+        case "httpproxy":
+        case "HttpProxy": return java.lang.String.class;
+        case "httpsproxy":
+        case "HttpsProxy": return java.lang.String.class;
+        case "impersonateextras":
+        case "ImpersonateExtras": return java.util.Map.class;
+        case "impersonategroup":
+        case "ImpersonateGroup": return java.lang.String.class;
+        case "impersonategroups":
+        case "ImpersonateGroups": return java.lang.String[].class;
+        case "impersonateusername":
+        case "ImpersonateUsername": return java.lang.String.class;
+        case "keystorefile":
+        case "KeyStoreFile": return java.lang.String.class;
+        case "keystorepassphrase":
+        case "KeyStorePassphrase": return java.lang.String.class;
+        case "logginginterval":
+        case "LoggingInterval": return int.class;
+        case "masterurl":
+        case "MasterUrl": return java.lang.String.class;
+        case "maxconcurrentrequests":
+        case "MaxConcurrentRequests": return int.class;
+        case "maxconcurrentrequestsperhost":
+        case "MaxConcurrentRequestsPerHost": return int.class;
+        case "namespace":
+        case "Namespace": return java.lang.String.class;
+        case "noproxy":
+        case "NoProxy": return java.lang.String[].class;
+        case "oauthtoken":
+        case "OauthToken": return java.lang.String.class;
+        case "oauthtokenprovider":
+        case "OauthTokenProvider": return io.fabric8.kubernetes.client.OAuthTokenProvider.class;
+        case "password":
+        case "Password": return java.lang.String.class;
+        case "proxypassword":
+        case "ProxyPassword": return java.lang.String.class;
+        case "proxyusername":
+        case "ProxyUsername": return java.lang.String.class;
+        case "requestretrybackoffinterval":
+        case "RequestRetryBackoffInterval": return int.class;
+        case "requestretrybackofflimit":
+        case "RequestRetryBackoffLimit": return int.class;
+        case "requesttimeout":
+        case "RequestTimeout": return int.class;
+        case "rollingtimeout":
+        case "RollingTimeout": return long.class;
+        case "scaletimeout":
+        case "ScaleTimeout": return long.class;
+        case "tlsversions":
+        case "TlsVersions": return io.fabric8.kubernetes.client.http.TlsVersion[].class;
+        case "trustcerts":
+        case "TrustCerts": return boolean.class;
+        case "truststorefile":
+        case "TrustStoreFile": return java.lang.String.class;
+        case "truststorepassphrase":
+        case "TrustStorePassphrase": return java.lang.String.class;
+        case "uploadconnectiontimeout":
+        case "UploadConnectionTimeout": return int.class;
+        case "uploadrequesttimeout":
+        case "UploadRequestTimeout": return int.class;
+        case "useragent":
+        case "UserAgent": return java.lang.String.class;
+        case "username":
+        case "Username": return java.lang.String.class;
+        case "watchreconnectinterval":
+        case "WatchReconnectInterval": return int.class;
+        case "watchreconnectlimit":
+        case "WatchReconnectLimit": return int.class;
+        case "websocketpinginterval":
+        case "WebsocketPingInterval": return long.class;
+        case "websockettimeout":
+        case "WebsocketTimeout": return long.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        io.fabric8.kubernetes.client.ConfigBuilder target = (io.fabric8.kubernetes.client.ConfigBuilder) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "ApiVersion": return target.getApiVersion();
+        case "authprovider":
+        case "AuthProvider": return target.getAuthProvider();
+        case "cacertdata":
+        case "CaCertData": return target.getCaCertData();
+        case "cacertfile":
+        case "CaCertFile": return target.getCaCertFile();
+        case "clientcertdata":
+        case "ClientCertData": return target.getClientCertData();
+        case "clientcertfile":
+        case "ClientCertFile": return target.getClientCertFile();
+        case "clientkeyalgo":
+        case "ClientKeyAlgo": return target.getClientKeyAlgo();
+        case "clientkeydata":
+        case "ClientKeyData": return target.getClientKeyData();
+        case "clientkeyfile":
+        case "ClientKeyFile": return target.getClientKeyFile();
+        case "clientkeypassphrase":
+        case "ClientKeyPassphrase": return target.getClientKeyPassphrase();
+        case "connectiontimeout":
+        case "ConnectionTimeout": return target.getConnectionTimeout();
+        case "contexts":
+        case "Contexts": return target.getContexts();
+        case "currentcontext":
+        case "CurrentContext": return target.getCurrentContext();
+        case "customheaders":
+        case "CustomHeaders": return target.getCustomHeaders();
+        case "disablehostnameverification":
+        case "DisableHostnameVerification": return target.isDisableHostnameVerification();
+        case "errormessages":
+        case "ErrorMessages": return target.getErrorMessages();
+        case "http2disable":
+        case "Http2Disable": return target.isHttp2Disable();
+        case "httpproxy":
+        case "HttpProxy": return target.getHttpProxy();
+        case "httpsproxy":
+        case "HttpsProxy": return target.getHttpsProxy();
+        case "impersonateextras":
+        case "ImpersonateExtras": return target.getImpersonateExtras();
+        case "impersonategroup":
+        case "ImpersonateGroup": return target.getImpersonateGroup();
+        case "impersonategroups":
+        case "ImpersonateGroups": return target.getImpersonateGroups();
+        case "impersonateusername":
+        case "ImpersonateUsername": return target.getImpersonateUsername();
+        case "keystorefile":
+        case "KeyStoreFile": return target.getKeyStoreFile();
+        case "keystorepassphrase":
+        case "KeyStorePassphrase": return target.getKeyStorePassphrase();
+        case "logginginterval":
+        case "LoggingInterval": return target.getLoggingInterval();
+        case "masterurl":
+        case "MasterUrl": return target.getMasterUrl();
+        case "maxconcurrentrequests":
+        case "MaxConcurrentRequests": return target.getMaxConcurrentRequests();
+        case "maxconcurrentrequestsperhost":
+        case "MaxConcurrentRequestsPerHost": return target.getMaxConcurrentRequestsPerHost();
+        case "namespace":
+        case "Namespace": return target.getNamespace();
+        case "noproxy":
+        case "NoProxy": return target.getNoProxy();
+        case "oauthtoken":
+        case "OauthToken": return target.getOauthToken();
+        case "oauthtokenprovider":
+        case "OauthTokenProvider": return target.getOauthTokenProvider();
+        case "password":
+        case "Password": return target.getPassword();
+        case "proxypassword":
+        case "ProxyPassword": return target.getProxyPassword();
+        case "proxyusername":
+        case "ProxyUsername": return target.getProxyUsername();
+        case "requestretrybackoffinterval":
+        case "RequestRetryBackoffInterval": return target.getRequestRetryBackoffInterval();
+        case "requestretrybackofflimit":
+        case "RequestRetryBackoffLimit": return target.getRequestRetryBackoffLimit();
+        case "requesttimeout":
+        case "RequestTimeout": return target.getRequestTimeout();
+        case "rollingtimeout":
+        case "RollingTimeout": return target.getRollingTimeout();
+        case "scaletimeout":
+        case "ScaleTimeout": return target.getScaleTimeout();
+        case "tlsversions":
+        case "TlsVersions": return target.getTlsVersions();
+        case "trustcerts":
+        case "TrustCerts": return target.isTrustCerts();
+        case "truststorefile":
+        case "TrustStoreFile": return target.getTrustStoreFile();
+        case "truststorepassphrase":
+        case "TrustStorePassphrase": return target.getTrustStorePassphrase();
+        case "uploadconnectiontimeout":
+        case "UploadConnectionTimeout": return target.getUploadConnectionTimeout();
+        case "uploadrequesttimeout":
+        case "UploadRequestTimeout": return target.getUploadRequestTimeout();
+        case "useragent":
+        case "UserAgent": return target.getUserAgent();
+        case "username":
+        case "Username": return target.getUsername();
+        case "watchreconnectinterval":
+        case "WatchReconnectInterval": return target.getWatchReconnectInterval();
+        case "watchreconnectlimit":
+        case "WatchReconnectLimit": return target.getWatchReconnectLimit();
+        case "websocketpinginterval":
+        case "WebsocketPingInterval": return target.getWebsocketPingInterval();
+        case "websockettimeout":
+        case "WebsocketTimeout": return target.getWebsocketTimeout();
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getCollectionValueType(Object target, String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "contexts":
+        case "Contexts": return io.fabric8.kubernetes.api.model.NamedContext.class;
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder
new file mode 100644
index 00000000000..4126dfff367
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=io.fabric8.kubernetes.client.ConfigFluentImplConfigurer
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
index 9b670086ec6..227ae01ed49 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
@@ -29,8 +29,10 @@ import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.service.ServiceSupport;
@@ -87,15 +89,30 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
                             k -> k.replace("camel.kubernetes-client.", "").replace("camel.kubernetesClient.", ""));
             if (!properties.isEmpty()) {
                 ConfigBuilder config = new ConfigBuilder();
+
+                PropertyConfigurer configurer = camelContext.adapt(ExtendedCamelContext.class)
+                        .getConfigurerResolver().resolvePropertyConfigurer(ConfigBuilder.class.getName(), camelContext);
+
+                // use copy to keep track of which options was configureed or not
+                OrderedLocationProperties copy = new OrderedLocationProperties();
+                copy.putAll(properties);
+
                 PropertyBindingSupport.build()
-                        .withProperties((Map) properties)
+                        .withProperties((Map) copy)
                         .withFluentBuilder(true)
                         .withIgnoreCase(true)
-                        .withReflection(true)
+                        .withReflection(false)
+                        .withConfigurer(configurer)
                         .withTarget(config)
                         .withCamelContext(camelContext)
-                        .withRemoveParameters(false)
+                        .withRemoveParameters(true)
                         .bind();
+                if (!copy.isEmpty()) {
+                    // some options were not possible to configure
+                    for (var e : copy.entrySet()) {
+                        properties.remove(e.getKey());
+                    }
+                }
                 client = new DefaultKubernetesClient(config.build());
                 LOG.info("Auto-configuration KubernetesClient summary");
                 for (var entry : properties.entrySet()) {
@@ -108,6 +125,11 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
                         LOG.info("    {} {}={}", loc, k, v);
                     }
                 }
+                if (!copy.isEmpty()) {
+                    for (var e : copy.entrySet()) {
+                        LOG.warn("Property not auto-configured: camel.kubernetes-client.{}={}", e.getKey(), e.getValue());
+                    };
+                }
             } else {
                 // create a default client to use
                 client = new DefaultKubernetesClient();
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
index 664a3d14c11..0c6efad34af 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
@@ -20,7 +20,9 @@ import java.util.Map;
 
 import io.fabric8.kubernetes.client.ConfigBuilder;
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -33,11 +35,15 @@ public class KubernetesClientConfigureTest {
         context.start();
 
         ConfigBuilder config = new ConfigBuilder();
+
+        PropertyConfigurer configurer = context.adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(ConfigBuilder.class.getName(), context);
+        Assertions.assertNotNull(configurer, "Cannot find generated configurer");
+
         PropertyBindingSupport.build()
                 .withProperties(Map.of("masterUrl", "http://localhost:1234"))
                 .withFluentBuilder(true)
                 .withIgnoreCase(true)
-                .withReflection(true)
+                .withConfigurer(configurer)
                 .withTarget(config)
                 .withCamelContext(context)
                 .withRemoveParameters(false)