当前位置: 首页 > 知识库问答 >
问题:

Micronaut应用程序无法访问Kubernetes配置映射中的值

戎泰
2023-03-14

我使用Micronaut 3.2.3和Kubernetes集成,从配置映射和机密中注入配置值。

依赖:

    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

如您所见,应用程序配置图包括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

我添加了一个简单的单例类,用于检查是否可以注入项目:

@Singleton
class SomeConfiguration(@Value("\${kafka.brokers}") private val kafkaBrokers: String) {

    init {
        println(kafkaBrokers)
    }

}

日志跟踪似乎表明这些配置映射已被正确访问:

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

但是,应用程序崩溃,因为它找不到它:

fun main(args: Array<String>) {
    build()
        .args(*args)
        .eagerInitSingletons(true)
15:59:25.484 [main] -  -   ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [xxx.SomeConfiguration] could not be loaded: Failed to inject value for parameter [kafkaBrokers] of class: xxx.configuration.SomeConfiguration

Message: Failed to inject value for parameter [kafkaBrokers] of class: xxx.configuration.SomeConfiguration

Message: Error resolving property value [${kafka.brokers}]. Property doesn't exist

共有1个答案

师增
2023-03-14

这个问题有点棘手。关键是配置映射中使用的yml文件的名称,应用程序和摄取器配置映射都将其定义为application.yml:

apiVersion: v1
data:
  application.yml: |

它们不能重叠,因此我将摄取器配置映射更改为:

kubectl get configmaps ingestor -o yaml   
  
apiVersion: v1
data:
  ingestor.yml: |
    prop1: value1

现在是<代码>Kafka。找到并注入brokers值。

 类似资料:
  • 我正在尝试将我的Docked React应用程序部署到Kubernetes。我相信我已经正确对接了,但我无法访问暴露的吊舱。 我没有在Docker或Kubernetes工作的经验,所以任何帮助都将不胜感激。 我的反应应用程序只是从Tomcat提供的静态文件(从npm运行构建)。 我的Dockerfile在下面。总之,我把我的应用程序放在Tomcat文件夹中,并公开端口8080。 我构建并将Dock

  • 亲爱的,我已经部署了如下示例服务: 当我执行get nodes-o wide时,如下所示, 任何帮助。谢了。

  • 我有点问题。我正在用Spring工具套件构建一个应用程序,由SpringMVC Maven和Hibernate组成。我认为我所有的编码都可以或者接近于好,尽管我对Spring一无所知。 这里我放了我的项目的2个屏幕: 这里我把我认为与这个问题有关的文件 应用-config.mxl: web.xml: mvc-config.xml: 下面是当我尝试输入一个JSP时控制台的输出: 感谢阅读!如果你需要

  • 问题内容: 示例代码: 问题行: 错误: 题: 那么,如何访问该界面内的键? 我是否需要使用方法集定义更复杂的接口来完成此操作? 问题答案: 由于您的分片类型为,因此索引该分片将为您提供type的元素。类型的值无法建立索引。 但是由于您将类型的值放入其中,因此可以使用类型断言来获取该映射类型的值,您可以对其进行正确索引: 输出(在Go Playground上尝试): 如果您知道总是将类型的值存储在

  • 我的spring boot应用程序中目前只有两个类。第一个是main主引导应用程序类,另一个是服务类。我在应用程序类中声明了如下属性源文件: 其他类是FTPService,其中属性值in使用@value,如下所示: 它打印空。也尝试用下面的注释来注释FTPService,但不起作用。尝试将属性复制到Application.properties,但不起作用。 我的属性文件在src/main/reso

  • 我有一个超级简单的Java库伯内特斯Tomcat应用程序在库伯内特斯内部运行,我用在minikube上运行的JVM Jolokia代理安装了它。我正在尝试配置我的库伯内特斯部署,以便我可以在容器外部访问Jolokiaendpoint。当我试图从我的minikube IP上的容器外部访问http://127.0.0.1/jolokia/versionendpoint时,我收到一个连接被拒绝。 我已经