结合 SpringBoot、Zuul 和 Eureka 但将 Services 绑定到 Localhost

Combining SpringBoot, Zuul and Eureka but bind Services to Localhost

我已经为路由设置了 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

application.properties 我的 Zuul API 网关:

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

application.properties 我的实际 REST 服务:

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 进行服务发现,并有机会提供第二个服务实例。

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

这些是 application.properties 个文件:

application.properties我的Eureka服务发现:

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

application.properties 我的 Zuul API 网关:

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

application.properties 我的实际 REST 服务:

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

"library" 微服务现在只能从本地主机获得,但仍然在 Eureka 和 Zuul API 网关后面注册。