千家信息网

Springboot如何整合Spring Cloud Kubernetes读取ConfigMap

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关Springboot如何整合Spring Cloud Kubernetes读取ConfigMap,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所
千家信息网最后更新 2026年11月03日Springboot如何整合Spring Cloud Kubernetes读取ConfigMap

这篇文章将为大家详细讲解有关Springboot如何整合Spring Cloud Kubernetes读取ConfigMap,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1 前言

之前介绍了Spring Cloud Config的用法,但对于Kubernetes应用,可能会需要读取ConfigMap的配置,我们看看Springboot是如何方便地读取ConfigMap和Secret。

2 整合Spring Cloud Kubenetes

Spring Cloud Kubernetes提供了Spring Cloud应用与Kubernetes服务关联,我们也可以自己写Java程序来获取Kubernetes的特性,但Spring又为我们做了。

2.1 项目代码

引入依赖:

  org.springframework.boot  spring-boot-starter-web  org.springframework.cloud  spring-cloud-starter-kubernetes-config

只需要Springboot Web和Spring Cloud Kubernetes Config即可,很简单。

Springboot启动类:

@SpringBootApplicationpublic class ConfigMapMain {    public static void main(String[] args) {        SpringApplication.run(ConfigMapMain.class, args);    }}

准备一个EndPoint来展示所读到的配置信息:

@RestControllerpublic class PkslowController {    @Value("${pkslow.age:0}")    private Integer age;    @Value("${pkslow.email:null}")    private String email;    @Value("${pkslow.webSite:null}")    private String webSite;    @Value("${pkslow.password:null}")    private String password;    @GetMapping("/pkslow")    public Map getConfig() {        Map map = new HashMap<>();        map.put("age", age.toString());        map.put("email", email);        map.put("webSite", webSite);        map.put("password", password);        return map;    }}

默认是为空的,password是从Secret读取,其它从ConfigMap读取。

应用的配置文件如下:

server:  port: 8080spring:  application:    name: spring-cloud-kubernetes-configmap  cloud:    kubernetes:      config:        name: spring-cloud-kubernetes-configmap

这里的spring.cloud.kubernetes.config.name是重点,后续要通过它来找ConfigMap。

加密密码:

$ echo -n "pkslow-pass" | base64 cGtzbG93LXBhc3M=

创建Kubernetes Secret:

kind: SecretapiVersion: v1metadata:  name: spring-cloud-kubernetes-secret  namespace: defaultdata:  pkslow.password: cGtzbG93LXBhc3M=type: Opaque

ConfigMap的内容如下:

kind: ConfigMapapiVersion: v1metadata:  name: spring-cloud-kubernetes-configmap  namespace: default  labels:    app: scdf-serverdata:  application.yaml: |-    pkslow:      age: 19      email: admin@pkslow.com      webSite: www.pkslow.com

要注意的是,这里的名字与前面配置的是一致的,都是spring-cloud-kubernetes-configmap。

接着完成Dockerfile和K8s部署文件就可以了。注意要将Secret的值映射到环境变量:

env:        - name: PKSLOW_PASSWORD                valueFrom:                        secretKeyRef:                                name: spring-cloud-kubernetes-secret                                key: pkslow.password

2.2 启动与测试

应用会在启动时就去Kubernetes找相应的ConfigMap和Secret:

  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::        (v2.2.5.RELEASE)2020-08-25 00:13:17.374  INFO 7 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='composite-configmap', propertySources=[ConfigMapPropertySource {name='configmap.spring-cloud-kubernetes-configmap.default'}]}2020-08-25 00:13:17.376  INFO 7 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='composite-secrets', propertySources=[]}

访问spring-cloud-kubernetes-configmap.localhost/pkslow,可以正确读取配置,ConfigMap和Secret的内容都获取到了:

3 自动刷新配置

3.1 原理介绍与代码变更

我们需要在Web运行过程中修改配置并使配置生效,有多种模式。修改配置文件如下:

server:  port: 8080spring:  application:    name: spring-cloud-kubernetes-configmap  cloud:    kubernetes:      config:        name: spring-cloud-kubernetes-configmap        namespace: default      secrets:        name: spring-cloud-kubernetes-secret        namespace: default        enabled: true      reload:        enabled: true        monitoring-config-maps: true        monitoring-secrets: true        strategy: restart_context        mode: eventmanagement:  endpoint:    restart:      enabled: true  endpoints:    web:      exposure:        include: restart

(1) spring.cloud.kubernetes.reload.enabled=true需要打开刷新功能;

(2) 加载策略strategy:

  • refresh:只对特定的配置生效,有注解@ConfigurationProperties 或 @RefreshScope。

  • restart_context:整个Spring Context会优雅重启,里面的所有配置都会重新加载。

需要打开actuator endpoint,所以要配置management.endpoint。还要增加依赖:

  org.springframework.boot  spring-boot-actuator  org.springframework.boot  spring-boot-actuator-autoconfigure
  • shutdown:重启容器。

(3)模式mode

  • 事件Event:会通过k8s API监控ConfigMap的变更,读取配置并生效。

  • Polling:定期查看是否有变化,有变化则触发,默认为15秒。

3.2 测试

我们修改一下ConfigMap的配置,并更新到K8s。

$ kubectl apply -f src/main/k8s/config.yaml configmap/spring-cloud-kubernetes-configmap configured

查看发现age和email都修改了:

我们查看一下Pod的日志如下:

Springboot先是检测到了ConfigMap有了变更,然后触发Context重启。

关于"Springboot如何整合Spring Cloud Kubernetes读取ConfigMap"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

配置 应用 整合 内容 文件 篇文章 代码 更多 模式 变化 测试 不错 实用 一致 优雅 事件 信息 前言 功能 原理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 广州为想互联网科技有限公司 广州互联网科技公司 美国互联网科技 互联网与新科技 杭州互联网科技公司 南京欣网互联网科技 百单互联网科技有限公司 西安互联网科技公司 中正互联网科技招聘 互联网公司会议桌创意科技软装饰 湖南诚度互联网科技有限公司 来此购互联网科技有限公司 彤创互联网科技有限公司 注册互联网科技公司经营范围大全 搜狐科技互联网 开一家科技互联网公司需要多少钱 广东鹅鹅鹅互联网科技有限公司 青岛易易互联网科技 恒生科技互联网指数十大成分股 华服互联网科技怎么样 港股互联网科技股 远拓互联网科技 湖南洣水互联网科技有限公司扣款 互联网科技革命什么开始 广西互联网科技孵化中心 广州千川互联网科技有限公司 图游互联网科技 信承诺互联网科技有限公司 西安有哪些互联网高科技企业
0