es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    El mensaje de error indica que no se pudo resolver la propiedad kafka.brokers. Verifica lo siguiente:

    • Asegúrate de que el mapa de configuración application incluya la propiedad kafka.brokers como se espera.
    • Asegúrate de que la inyección esté utilizando el nombre de propiedad correcto (kafka.brokers).
    • Verifica si la propiedad kubernetes.client.config-maps.includes en el archivo bootstrap.yml está configurada correctamente para incluir los mapas de configuración application y ingestor.

    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:

    implementation("io.micronaut:micronaut-runtime:${micronautVersion}:test")
    

    Luego, pasa la bandera --inspection al ejecutar la aplicación para habilitar el Configuration Inspector:

    ./gradlew run --args='--inspection'
    

    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 y ingestor se cargan correctamente y si la propiedad kafka.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.

Comments are closed.