Spring Cloud Netflix Eureka集群+安全认证

本文详细介绍了如何搭建SpringCloudEureka服务治理的注册中心集群,包括添加安全认证,以及客户端注册。通过配置多个Eureka节点,实现高可用,并展示了EurekaClient如何注册到集群中。
摘要由CSDN通过智能技术生成

简介:

Spring Cloud Netflix Eureka是Netflix子项目的核心组件之一,主要用于微服务架构中的服务治理。 本文将对搭建Eureka注册中心,搭建Eureka客户端,搭建Eureka集群及给Eureka注册中心添加登录认证等进行介绍。

在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务

时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。

使用场景:

微服务架构的各个服务系统部分可能分布在多台机器上,Eureka的作用就是使各个服务直接能够相互调用。

原理:

每个服务中都集成了一个Eureka Client组件,这个组件负责将当前服务信息发送到Eureka Server中。Eureka Server是注册中心,保存了各个服务的地址信息。各组件可以通过Eureka Client获取其它服务的地址信息,并进行请求。

搭建Eureka Server 2节点集群:

使用IDEA创建一个maven工程SpringCloudRoot,作为父工程,

在创建一个子模块工程SpringCloudNetflix-Eureka,添加maven依赖:

加入注册中心安全认证依赖:

添加配置文件:此处借助IDEA一个应用程序多配置文件,启动多次的原理:(不懂的可以百度一下)

此处在本机配置了一个IP映射,集群之间相互注册使用域名的方式,在windows的host文件中添加如图映射

127.0.0.1     node1
127.0.0.1     node2

添加配置文件:application-node1.yml内容如下图,需要配置注册时用户名和密码,作为安全认证,同时在向注册中心注册的时候需要带上用户名和密码如图中的defaultZone属性

# 指定运行端口
server:
  port: 8881
# 指定服务名称
spring:
  application:
    name: eureka-server-1
  security:
      user:
        # 配置spring security登录用户名和密码
        name: root
        password: root
# 指定主机地址
eureka:
  instance:
    hostname: node1
    appname: ${spring.application.name}
  client:
    #表示是否将自己注册到Eureka Server上,默认为true
    register-with-eureka: true
    #表示是否从Eureka Server上获取注册信息,默认为true
    fetch-registry: true
    service-url:
      #注册到另一个Eureka注册中心
      defaultZone: http://root:root@node2:8882/eureka/

添加第二个配置文件:application-node2.yml

# 指定运行端口
server:
  port: 8882
# 指定服务名称
spring:
  application:
    name: eureka-server-2
  security:
      user:
        # 配置spring security登录用户名和密码
        name: root
        password: root
# 指定主机地址
eureka:
  instance:
      hostname: node2
      appname: ${spring.application.name}
  client:
    #表示是否将自己注册到Eureka Server上,默认为true
    register-with-eureka: true
    #表示是否从Eureka Server上获取注册信息,默认为true
    fetch-registry: true
    service-url:
          #注册到另一个Eureka注册中心
          defaultZone: http://root:root@node1:8881/eureka/

创建springboot的启动类,在启动类上面添加 @EnableEurekaServer 注解

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudNetflixEurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudNetflixEurekaApplication.class, args);
    }
}

添加Java配置WebSecurityConfig,必须设置不然会报错

默认情况下添加SpringSecurity依赖的应用每个请求都需要添加CSRF token才能访问,Eureka客户端注册时并不会添加,所以需要配置/eureka/**路径不需要CSRF token。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}

分配制启动两个EurekaServer,访问http://node1:8881/

双节点的集群已经搭建好了。

在搭建一个EurekaClient 注册到注册中心

创建一个SpringCloudNetflix-EurekaClient 子模块工程

添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.3.RELEASE</version><!--此处需要添加版本号,和父项目中对应,不然报错-->
</dependency>

创建启动类 加上注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudNetflixEurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudNetflixEurekaClientApplication.class, args);
    }
}

加入配置文件:application-node.yml,注册中心的地址一定要带上用户名和密码,如下defaultZone属性所示。

server:
  port: 8880
spring:
  application:
    name: eureka-client
eureka:
  client:
    #表示是否将自己注册到Eureka Server上,默认为true
    register-with-eureka: true
    #表示是否从Eureka Server上获取注册信息,默认为true
    fetch-registry: true
    service-url:
      # 同时注册到两个注册中心
      defaultZone: http://root:root@node1:8881/eureka,http://root:root@node2:8882/eureka

启动springboot,刷新注册中心页面,可以看到客服端注册完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值