diff --git a/extensions/apicurio-registry-avro/deployment/pom.xml b/extensions/apicurio-registry-avro/deployment/pom.xml
index e8bcbb53b9bc1e..283b2647ad4f65 100644
--- a/extensions/apicurio-registry-avro/deployment/pom.xml
+++ b/extensions/apicurio-registry-avro/deployment/pom.xml
@@ -23,6 +23,12 @@
io.quarkus
quarkus-core-deployment
+
+
+ io.quarkus
+ quarkus-kubernetes-service-binding-deployment
+
+
io.quarkus
quarkus-avro-deployment
diff --git a/extensions/apicurio-registry-avro/deployment/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingExtensionProcessor.java b/extensions/apicurio-registry-avro/deployment/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingExtensionProcessor.java
new file mode 100644
index 00000000000000..c1835061bac21d
--- /dev/null
+++ b/extensions/apicurio-registry-avro/deployment/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingExtensionProcessor.java
@@ -0,0 +1,21 @@
+package io.quarkus.apicurio.registry.avro.binding;
+
+import io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter;
+import io.quarkus.deployment.Capabilities;
+import io.quarkus.deployment.Capability;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
+
+class ServiceRegistryBindingExtensionProcessor {
+
+ @BuildStep
+ void registerServiceBinding(Capabilities capabilities,
+ BuildProducer serviceProvider) {
+ if (capabilities.isPresent(Capability.KUBERNETES_SERVICE_BINDING)) {
+ serviceProvider.produce(
+ new ServiceProviderBuildItem("io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter",
+ ServiceRegistryBindingConverter.class.getName()));
+ }
+ }
+}
diff --git a/extensions/apicurio-registry-avro/runtime/pom.xml b/extensions/apicurio-registry-avro/runtime/pom.xml
index a0ad9a498a8fea..55563041c92603 100644
--- a/extensions/apicurio-registry-avro/runtime/pom.xml
+++ b/extensions/apicurio-registry-avro/runtime/pom.xml
@@ -28,7 +28,10 @@
io.apicurio
apicurio-common-rest-client-vertx
-
+
+ io.quarkus
+ quarkus-kubernetes-service-binding
+
io.quarkus
quarkus-core
diff --git a/extensions/apicurio-registry-avro/runtime/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingConverter.java b/extensions/apicurio-registry-avro/runtime/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingConverter.java
new file mode 100644
index 00000000000000..5adb24f56200ea
--- /dev/null
+++ b/extensions/apicurio-registry-avro/runtime/src/main/java/io/quarkus/apicurio/registry/binding/ServiceRegistryBindingConverter.java
@@ -0,0 +1,105 @@
+package io.quarkus.apicurio.registry.binding;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.logging.Logger;
+
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.config.ConfigProvider;
+
+import io.quarkus.kubernetes.service.binding.runtime.ServiceBinding;
+import io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConfigSource;
+import io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter;
+
+public class ServiceRegistryBindingConverter implements ServiceBindingConverter {
+
+ private static Logger LOG = Logger.getLogger(ServiceRegistryBindingConverter.class.getName());
+
+ private static final String INCOMING_PREFIX = "mp.messaging.incoming.";
+ private static final String OUTGOING_PREFIX = "mp.messaging.outgoing.";
+
+ @Override
+ public Optional convert(List serviceBindings) {
+ var matchingByType = ServiceBinding.singleMatchingByType("serviceregistry", serviceBindings);
+ Config config = ConfigProvider.getConfig();
+ if (matchingByType.isEmpty()) {
+ return Optional.empty();
+ }
+
+ var binding = matchingByType.get();
+
+ List channels = extractChannels(config);
+
+ Map properties = new HashMap<>();
+
+ String registryUrl = binding.getProperties().get("registryUrl");
+ if (registryUrl == null) {
+ registryUrl = binding.getProperties().get("registryurl");
+ }
+ if (registryUrl != null) {
+ properties.put("mp.messaging.connector.smallrye-kafka.apicurio.registry.url", registryUrl);
+ }
+
+ for (String channel : channels) {
+
+ String prefix = channel;
+
+ String oAuthHost = binding.getProperties().get("oauthServerUrl");
+ if (oAuthHost == null) {
+ oAuthHost = binding.getProperties().get("oauthserverurl");
+ }
+ if (oAuthHost != null) {
+ properties.put(prefix + "apicurio.auth.service.url", oAuthHost);
+ }
+
+ String clientId = binding.getProperties().get("clientId");
+ if (clientId == null) {
+ clientId = binding.getProperties().get("clientid");
+ }
+ if (clientId != null) {
+ properties.put(prefix + "apicurio.auth.client.id", clientId);
+ }
+
+ String clientSecret = binding.getProperties().get("clientSecret");
+ if (clientSecret == null) {
+ clientSecret = binding.getProperties().get("clientsecret");
+ }
+ if (clientSecret != null) {
+ properties.put(prefix + "apicurio.auth.client.secret", clientSecret);
+ }
+
+ String realm = binding.getProperties().get("oauthRealm");
+ if (realm == null) {
+ realm = binding.getProperties().get("oauthRealm");
+ }
+ if (clientSecret != null) {
+ properties.put(prefix + "apicurio.auth.realm", realm);
+ }
+
+ if (registryUrl != null) {
+ properties.put(prefix + "apicurio.registry.url", registryUrl);
+ }
+ }
+
+ return Optional.of(new ServiceBindingConfigSource("serviceregistry-k8s-service-binding-source", properties));
+ }
+
+ private List extractChannels(Config configIn) {
+
+ var list = new ArrayList();
+
+ for (String propertyName : configIn.getPropertyNames()) {
+ if (propertyName.startsWith(INCOMING_PREFIX)) {
+ var channelName = propertyName.replace(INCOMING_PREFIX, "").split("\\.")[0];
+ list.add(INCOMING_PREFIX + channelName + ".");
+ } else if (propertyName.startsWith(OUTGOING_PREFIX)) {
+ var channelName = propertyName.replace(OUTGOING_PREFIX, "").split("\\.")[0];
+ list.add(OUTGOING_PREFIX + channelName + ".");
+ }
+ }
+ return list;
+ }
+}
diff --git a/extensions/apicurio-registry-avro/runtime/src/main/resources/META-INF/services/io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter b/extensions/apicurio-registry-avro/runtime/src/main/resources/META-INF/services/io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter
new file mode 100644
index 00000000000000..e9f01713f3fde4
--- /dev/null
+++ b/extensions/apicurio-registry-avro/runtime/src/main/resources/META-INF/services/io.quarkus.kubernetes.service.binding.runtime.ServiceBindingConverter
@@ -0,0 +1 @@
+io.quarkus.apicurio.registry.binding.ServiceRegistryBindingConverter
\ No newline at end of file