结合SpringBoot,Zuul和Eureka,但将服务绑定到Localhost

时间:2018-03-16 15:45:57

标签: microservices netflix-zuul netflix-eureka netflix

我已经为路由设置了Zuul,为了服务发现设置了Eureka,这很好。在设置Eureka之前,我使用server.address=127.0.0.1将我的实际服务绑定到localhost,以便只能从Api网关中访问它们。

当结合Zuul和Eureka时,server.address=127.0.0.1不再起作用。我无法从我的网络内部或外部访问我的实际REST端点。

我的Eureka服务发现的application.properties:

spring.application.name=service-discovery
server.port=8761
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

我的Zuul API网关的application.properties:

spring.application.name=api-gateway
zuul.prefix=/api
server.port=8080

ribbon.eureka.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

zuul.routes.library.path=/library/**
zuul.routes.library.serviceId=library

我的实际REST服务的application.properties:

spring.application.name=library
server.servlet.context-path=/library
server.port=8090
server.address=127.0.0.1

ribbon.eureka.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

当我从REST服务的属性文件中删除server.address=127.0.0.1时,我当然可以访问资源 - 但也可以不使用localhost,这不是我想要的。

所以我试图实现的是我的小微服务只能在localhost内访问(在请求通过Zuul API网关之后)。此外,我想使用Eureka进行服务发现,并有机会提供服务器的第二个实例。

1 个答案:

答案 0 :(得分:0)

将实际微服务与eureka.instance.hostname=localhosteureka.instance.ip-address=127.0.0.1注册到Eureka服务器,并结合微服务与localhost(server.address=127.0.0.1)的绑定完成了这项工作。

这些是application.properties文件:

我的Eureka服务发现的application.properties:

spring.application.name=service-discovery
server.port=8761
server.address=127.0.0.1
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

我的Zuul API网关的application.properties:

spring.application.name=api-gateway
zuul.prefix=/api
server.port=8080
ribbon.eureka.enabled=true
eureka.client.registerWithEureka=false
zuul.routes.library.path=/library/**
zuul.routes.library.serviceId=library
zuul.routes.library.stripPrefix=false

我的实际REST服务的application.properties:

spring.application.name=library
server.servlet.context-path=/library
server.port=8090
server.address=127.0.0.1
ribbon.eureka.enabled=true
eureka.client.registerWithEureka=true
eureka.instance.hostname=localhost
eureka.instance.ip-address=127.0.0.1

"图书馆" microservice现在只能从localhost获得,但仍然在Eureka注册并在Zuul API网关后面注册。