La aplicación Micronaut falla al acceder a los valores del mapa de configuración de Kubernetes.
Estoy utilizando Micronaut 3.2.3 con la integración de Kubernetes para inyectar valores de configuración desde mapas de configuración y secretos.
Dependencias:
implementation("io.micronaut.kubernetes:micronaut-kubernetes-client")
implementation("io.micronaut.kubernetes:micronaut-kubernetes-discovery-client")
bootstrap.yml
micronaut:
application:
name: ingestor
config-client:
enabled: true
kubernetes:
client:
config-maps:
enabled: true
includes:
- application
- ingestor
secrets:
enabled: true
includes:
- application
- ingestor
Como puedes ver, el mapa de configuración de la aplicación incluye el valor de kafka.brokers:
kubectl get configmaps application -o yaml
apiVersion: v1
data:
application.yml: |
kafka.brokers: xxx
kubectl get configmaps ingestor -o yaml
apiVersion: v1
data:
application.yml: |
prop1: value1
He agregado una clase singleton sencilla para verificar si se puede inyectar la propiedad:
@Singleton
class SomeConfiguration(@Value("\${kafka.brokers}") private val kafkaBrokers: String) {
init {
println(kafkaBrokers)
}
}
Las trazas de registro parecen indicar que se accede correctamente a esos mapas de configuración:
15:59:24.206 [OkHttp https://10.222.0.1/...] - - DEBUG i.m.k.c.KubernetesConfigurationClient - Adding config map with name application
15:59:24.218 [OkHttp https://10.222.0.1/...] - - DEBUG i.m.k.c.KubernetesConfigurationClient - Adding config map with name ingestor
Sin embargo, la aplicación se bloquea porque no puede encontrarlo:
fun main(args: Array<string>) {
build()
.args(*args)
.eagerInitSingletons(true)
“`
15:59:25.484 [main] – – ERROR io.micronaut.runtime.Micronaut – Error starting Micronaut server: No se pudo cargar la definición del bean [xxx.SomeConfiguration]: Error al inyectar el valor para el parámetro [kafkaBrokers] de la clase: xxx.configuration.SomeConfiguration
Message: Error al inyectar el valor para el parámetro [kafkaBrokers] de la clase: xxx.configuration.SomeConfiguration
Message: Error al resolver el valor de la propiedad [${kafka.brokers}]. La propiedad no existe
“`
davy.ai
Solución
El mensaje de error indica que no se pudo resolver la propiedad
kafka.brokers
. Verifica lo siguiente:application
incluya la propiedadkafka.brokers
como se espera.kafka.brokers
).kubernetes.client.config-maps.includes
en el archivobootstrap.yml
está configurada correctamente para incluir los mapas de configuraciónapplication
yingestor
.Si todo parece estar correctamente configurado, intenta depurar el proceso de inyección utilizando la funcionalidad Configuration Inspector de Micronaut. Agrega la siguiente dependencia a tu proyecto:
Luego, pasa la bandera
--inspection
al ejecutar la aplicación para habilitar el Configuration Inspector:Los logs del Configuration Inspector te ayudarán a identificar las fuentes de configuración cargadas y sus propiedades. En este caso, verifica si los mapas de configuración
application
yingestor
se cargan correctamente y si la propiedadkafka.brokers
se resuelve correctamente.Además, ten en cuenta que las claves de los mapas de configuración y de los secretos distinguen entre mayúsculas y minúsculas, así que asegúrate de que los nombres de las claves en los mapas de configuración coincidan exactamente con los nombres de las propiedades en tu código.