一味宠爱|Springboot整合K8s读取ConfigMap刷新配置

1 前言之前介绍了Spring Cloud Config的用法 , 但对于Kubernetes应用 , 可能会需要读取ConfigMap的配置 , 我们看看Springboot是如何方便地读取ConfigMap和Secret 。
2 整合Spring Cloud KubenetesSpring Cloud Kubernetes提供了Spring Cloud应用与Kubernetes服务关联 , 我们也可以自己写Java程序来获取Kubernetes的特性 , 但Spring又为我们做了 。
2.1 项目代码引入依赖:
org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-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-configmapcloud: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-secretnamespace: defaultdata:pkslow.password: cGtzbG93LXBhc3M=type: OpaqueConfigMap的内容如下:
kind: ConfigMapapiVersion: v1metadata:name: spring-cloud-kubernetes-configmapnamespace: defaultlabels:app: scdf-serverdata:application.yaml: |-pkslow:age: 19email: admin@pkslow.comwebSite: www.pkslow.com要注意的是 , 这里的名字与前面配置的是一致的 , 都是spring-cloud-kubernetes-configmap 。
接着完成Dockerfile和K8s部署文件就可以了 。 注意要将Secret的值映射到环境变量:
env: - name: PKSLOW_PASSWORDvalueFrom:secretKeyRef:name: spring-cloud-kubernetes-secretkey: pkslow.password2.2 启动与测试应用会在启动时就去Kubernetes找相应的ConfigMap和Secret:
._______ _ _ /\\ / ___'_ __ _ _(_)_ ____ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/___)| |_)| | | | | || (_| |) ) ) )'|____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::(v2.2.5.RELEASE)2020-08-25 00:13:17.374INFO 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.376INFO 7 --- [main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='composite-secrets', propertySources=[]}