千家信息网

Springboot如何整合Spring Cloud Kubernetes读取ConfigMap

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

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

1 前言

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

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 WebSpring 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

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

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

2.2 启动与测试

应用会在启动时就去Kubernetes找相应的ConfigMapSecret

  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: 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,可以正确读取配置,ConfigMapSecret的内容都获取到了:

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

查看发现ageemail都修改了:

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

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

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

配置 应用 整合 内容 文件 篇文章 代码 更多 模式 变化 测试 不错 实用 一致 优雅 事件 信息 前言 功能 原理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发的结构性生命周期 网络安全高级技能证书 数据库中删除一个数据库 普通服务器可以装nas吗 现在做网络安全怎么样 数据库原理 视频教程下载 江西楷俊互联网科技有限公司 检察院如何加强网络安全工作 80端口映射多个服务器 微信登录显示已连接服务器 贵州库存管理软件开发公司 海城市靖祺网络技术有限公司 专科计算机网络技术专业课程 天津发展软件开发技术指导 数据库和物流管理哪个前景好 新建数据库怎么输入代码 有关计算机网络技术论文 教育软件开发可以教学吗 国家协调统筹网络安全工作 软件开发后期维护升级费用高 天津数据软件开发有哪些 网络安全二级证难度 服务器的安全设置怎么关 网络安全现状200字 基因宝数据库 数据库注册登记表在哪里 mc巫术服务器 河南pdu服务器专用电源价钱 美食通数据库为什么打不开 学渣可以学软件开发吗
0