结合 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=localhost
或 eureka.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 网关后面注册。
我已经为路由设置了 Zuul,为服务发现设置了 Eureka,效果很好。在设置 Eureka 之前,我使用 server.address=127.0.0.1
将我的实际服务绑定到 localhost
,这样它们只能从 Api 网关内访问。
结合 Zuul 和 Eureka 时,server.address=127.0.0.1
不再起作用。我无法访问我的实际 REST 端点,无论是从我的网络内部还是从外部。
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=localhost
或 eureka.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 网关后面注册。