配置中心流程

[复制链接]
发表于 2024-11-23 11:22:12 | 显示全部楼层 |阅读模式

1、为什么使用配置中心

服务配置的现状:

在微服务系统中,每个微服务不仅仅只有代码,他还需要连接其他资源,例如数据库的配置或功能性的开关等等。
但是随着微服务系统的不断迭代,整个微服务系统可能会成为一个网状结构,
这个时候就要考虑整个微服务系统的扩展性、伸缩性、耦合性等等。其中一个很重要的环节就是配置管理的问题。

常见的配置类型

配置大类 常见配置类型
服务配置 数据库配置
MQ队列配置
redis缓存配置
各类开关 功能开关
业务开关
服务开关
业务配置 模块A
模块B
模块C

常用的配置管理解决方案的缺点:

1.硬编码【缺点:需要修改代码、繁琐、风险大】
2.写在properties里面【缺点:在集群环境下,需要替换和重启】
3.写在xml配置文件中,一般和应用一起打包【缺点:需要重新打包和重启】

为什么要使用spring cloud config 配置中心?

由于常用的配置管理有很大的缺点,故spring
spring cloud config配置中心,在微服务分布式系统中,
采用服务端和客户端来提供可扩展的配置服务。配置中心负责管理所有的服务的各种环境配置文件。
配置服务中心默认采用Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。

spring cloud config 配置中心,它解决了什么问题?

Spring Cloud Config它解决了微服务配置的中心化、版本控制、平台独立、语言独立等问题。
其特性如下:
1.提供服务端和客户端支持(spring cloud config server和spring cloud config client)
2.集中式管理分布式环境下的应用配置
3.基于Spring环境,无缝与Spring应用集成
4.可用于任何语言开发的程序
5.默认实现基于git仓库,可以进行版本管理

配置中心原理

image.png

配置 文件命名规则

/{application}/{profile}[/{label}]
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
application:表示目标服务的名称
profile:表示获取指定环境下配置,例如开发环境、测试环境、生产环境 默认值default,
实际开发中可以是 dev、test、prodn等
label: git标签,默认值master
主干
https://gitee.com/agan\_jiagou/
congfig文件如下:config-client.properties
config-client-dev.properties
config-client-test.properties
config-client-prod.properties
访问URL:http://127.0.0.1:9030/config-client/dev
http://127.0.0.1:9030/config-client/test
http://127.0.0.1:9030/config-client/prod
http://127.0.0.1:9030/config-client/default
分支
https://gitee.com/agan\_jiagou/congfig/tree/branch1.0/
文件如下:config-client.properties
config-client-dev.properties
config-client-test.properties
config-client-prod.properties
访问URL:http://127.0.0.1:9030/config-client/dev/branch1.0/
http://127.0.0.1:9030/config-client/test/branch1.0/
http://127.0.0.1:9030/config-client/prod/branch1.0/
http://127.0.0.1:9030/config-client/default/branch1.0/

3、对称加密

一、对称加密介绍

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。

二、检查加密环境

http://127.0.0.1:9030/encrypt/status
检查结果:{"description":"No key was installed for encryption service","status":"NO_KEY"}
没有为加密服务安装密钥。

三、加密环境3种解决方案

1.设置秘钥KEY
  encrypt.key=agan
2.未配置JCE
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。
JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下
JRE:将两个jar文件放到%JRE_HOME%\lib\security下
3.spring cloud bug
Dalston.SR4、Dalston.SR3、Dalston.SR2版本不能对配置文件加密,若需要调整到Dalston.SR1
https://github.com/spring-cloud/spring-cloud-config/issues/767 
四、加密演示
加密(post请求):http://127.0.0.1:9030/encrypt
解密(post请求):http://127.0.0.1:9030/decrypt

4、非对称加密

对称和非对称加密的区别?

1.对称加密算法在加密和解密时使用的是同一个秘钥;
2.非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

非对称加密的例子

甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。
(注:)乙方只能用其专用密钥(私钥)解密由对应的公钥加密的信息。
在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。
同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

image.png

5、配置中心运作流程

首先我接触到的,包括现在好多老的项目都在用xml配置bean,配置过滤器,拦截器等等但是要维护的话繁琐且庞杂

然而spring注解方式的出现打破了这种状况,有Autowired @Bean @Primary 把所有关于依赖注入的项从配置中解放出来 现在的项目只需要关注项目属性的配置就可以了,可以说非常方便了

但是当你有了多个环境的时候,管理配置文件就变的繁多 再有就是配置文件多静态部署到项目中去,如若修改,就需要重新打包发布,多个版本环境导致了复杂度。

Config Server 核心功能

作为springcloud 官方制定产品 提供了三种服务

统一配置,环境隔离,动态刷新

统一配置提供了一个集中的配置中心,将不同环境和不同项目的配置,放在一起 环境隔离,cLient可以通过自已的环境加载对应的配置文件 动态刷新 支持运行期变更并生效配置

1.1 配置中心用户安全认证

使用浏览器直接访问可以看到明文账号密码,不安全

image.png

1.1.1 服务端config-server-encrypt-security

image.png

1.1.1.1 pom.xml

<?xml version="1.0"?>

<project

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

   xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <modelVersion>4.0.0</modelVersion>

   <parent>

      <groupId>com.agan.springcloud</groupId>

      <artifactId>config</artifactId>

      <version>0.0.1-SNAPSHOT</version>

   </parent>

   <artifactId>config-server</artifactId>

   <name>config-server</name>

   <url>http://maven.apache.org</url>

   <properties>

      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

   </properties>

   <dependencies>

      <dependency>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-web</artifactId>

      </dependency>


      <dependency>

         <groupId>org.springframework.cloud</groupId>

         <artifactId>spring-cloud-config-server</artifactId>

       </dependency>

<dependency>

         <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-eureka</artifactId>

      </dependency>

<dependency>

         <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-security</artifactId>

      </dependency>

   </dependencies>



   <build>

      <plugins>

         <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

         </plugin>

      </plugins>

   </build>

</project>
1.1.1.1.1 application.properties
spring.application.name=config-server

server.port=9030



eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/


#默认是hostname 注册,改成IP 注册

eureka.instance.perferIpAddress=true




spring.cloud.config.server.git.uri=https://gitee.com/agan\_jiagou/config

#spring.cloud.config.server.git.username=

#spring.cloud.config.server.git.password=


 encrypt.key=agan


# 安全认证

#开启基于http basic的安全认证

security.basic.enabled=true  

security.user.name=user

security.user.password=123456

1.1.1.1 启动类

package com.agan.book.config;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.config.server.EnableConfigServer;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;


/\*\*

 \* @author 阿甘 http://study.163.com/instructor/1016671292.htm

 \* @version 1.0

 \*/


@SpringBootApplication

@EnableConfigServer

@EnableEurekaClient

public class ConfigServerApplication {


   public static void main(String[] args) {

      SpringApplication.run(ConfigServerApplication.class, args);

   }

}

1.1.1.1 测试效果

image.png

image.png

1.1.1 生产者config-encrypt-security-product-core

spring.application.name=e-book-config-product

server.port=8083



eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/


#默认是hostname 注册,改成IP 注册

eureka.instance.perferIpAddress=true



#--------------db----------------

~~mybatis.type-aliases-package=com.agan.book.product.domain~~

~~mybatis.mapper-locations=classpath:mybatis/com/agan/book/product/\*.xml~~

~~ ~~

~~spring.datasource.driverClassName=com.mysql.jdbc.Driver~~

~~spring.datasource.url=jdbc:mysql://mysql.yun:3306/book-product?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull~~

~~spring.datasource.username=root~~

~~spring.datasource.password=agan~~

~~ ~~

#默认false,这里设置true,表示开启读取配置中心的配置

spring.cloud.config.discovery.enabled=true

#对应eureka中的配置中心serviceId,默认是configserver

spring.cloud.config.discovery.serviceId=config-server

~~ ~~

~~ ~~

#安全保护

spring.cloud.config.username=user

spring.cloud.config.password=123456

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

GMT+8, 2025-4-21 01:36 , Processed in 0.074270 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表