我已经为路由设置了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进行服务发现,并有机会提供服务器的第二个实例。
答案 0 :(得分:0)
将实际微服务与eureka.instance.hostname=localhost
或eureka.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网关后面注册。