问题描述:
本地测试连接nacos可以,但在k8s的pod中连接不到nacos,提示groupId为空。

其中,bootstrap.yml文件为:

spring:
  application:
    name: ms-scriptengine
  cloud:
    config:
      enabled: false
    nacos:
      config:
        enabled: true
        server-addr: nacos.public.svc.cluster.local:8848
        namespace: ${nacos.namespace}
        group: ${nacos.group}
        file-extension: yaml
 

1. 去pod中查环境变量,发现nacos.namespace 和 nacos.group 都是存在的,说明deployment中配置的环境变量在容器启动后是注入成功的;

2. 怀疑是jar包先启动,后注入的环境变量,于是修改deployment相关配置,使jar包延时1小时启动,去环境变量中查看,nacos.namespace 和 nacos.group 依然是存在的,该假设被推翻;

最终发现,Dockerfile中的启动jar包命令为:

CMD ["sh","/home/hollicube/startup.sh"] 其中startup.sh中是java -jar xxx.jar命令,用来启动应用。

修改为: CMD ["bash","/home/hollicube/startup.sh"] ,成功。

原因:sh已被bash所取代,sh启动应用,应用无法读取带点的环境变量,如上文中,环境变量名为nacos.namespace,带点,bash启动应用就可以读取环境变量。

3. 注意:nacos中配置的文件后缀,如果之前在configserver中是 .yml后缀,到nacos仍然用 .yml后缀也无法读取,需要改为 .yaml。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐