[英]Zuul API GW as a docker container vs. as part of a Java Spring application?
[英]Zuul Redirect Issue in Docker container
我正在使用 Grail 应用程序并编写了几个微服务,这些微服务可由 grails 应用程序访问。 请求来自 grails 到 4000 端口上的网关。 现在基于请求网关将请求重定向到相应的服务,如身份验证、通知、报告,这些是微服务。
现在我在 docker 容器中启动微服务,服务发现在 8761,配置服务器在 8888,zuul 网关在 4000 端口。 通知服务在 8755 端口上运行,当请求通知网关时,它首先重定向到对我来说工作正常的通知,根据应用程序流程,通知将验证令牌,因此它将调用在 8282 端口上公开的身份验证服务。 时刻通知正在通过网关向身份验证发送请求失败...
当所有服务都启动并在“localhost”上运行时,一切正常
zuul:
ignoredServices: '*'
host:
connect-timeout-millis: 120000
socket-timeout-millis: 120000
routes:
notification-service:
path: /notification/**
url: http://${NOTIFICATION_SERVICE_HOST:127.0.0.1}:8755
stripPrefix: true
sensitiveHeaders:
report-service:
path: /report/**
url: http://${REPORT_SERVICE_HOST:127.0.0.1}:8762
stripPrefix: true
sensitiveHeaders:
p2p-auth-service:
path: /authService/**
url: http://${AUTH_SERVICE_HOST:172.17.0.1}:8282
stripPrefix: true
sensitiveHeaders:
当请求到达通知时,它会正确出现,这意味着我添加的常量 NOTIFICATION_SERVICE_HOST 被我传递的 IP 替换。 但是当它调用身份验证服务时,我已经给出了常量 AUTH_SERVICE_HOST,但同样的情况并没有发生。 总是失败并显示 500 条空消息。
我的 docker compose 文件如下
version: '3.7'
services:
configserver:
image: config
container_name: configserver
ports:
- "8888:8888"
networks:
- bridge-abc
environment:
SPRING.PROFILES.ACTIVE: native
EUREKA.CLIENT.SERVICEURL.DEFAULTZONE: http://registry:8761/eureka
registry:
image: registry
container_name: registry
ports:
- "8762:8761"
networks:
- bridge-abc
depends_on:
- configserver
restart: on-failure
environment:
SPRING.PROFILES.ACTIVE: dev
SPRING.CLOUD.CONFIG.URI: http://configserver:8888/
EUREKA.CLIENT.SERVICEURL.DEFAULTZONE: http://registry:8761/eureka
gateway:
image: gateway
container_name: gateway
ports:
- "4000:4000"
networks:
- bridge-abc
depends_on:
- configserver
- registry
restart: on-failure
environment:
SPRING.PROFILES.ACTIVE: dev
SPRING.CLOUD.CONFIG.URI: http://configserver:8888/
EUREKA.CLIENT.SERVICEURL.DEFAULTZONE: http://registry:8761/eureka
REGISTRY_SERVER: registry
REGISTRY_PORT: 8761
NOTIFICATION_SERVICE_HOST: 172.17.0.1
AUTH_SERVICE_HOST: 172.17.0.1
authservice:
image: auth-service
container_name: authservice
ports:
- "8282:8282"
networks:
- bridge-abc
depends_on:
- configserver
- registry
restart: on-failure
environment:
SPRING.PROFILES.ACTIVE: dev
SPRING.CLOUD.CONFIG.URI: http://configserver:8888/
EUREKA.CLIENT.SERVICEURL.DEFAULTZONE: http://registry:8761/eureka
DB_HOST: 1.2.3.4
DB_PORT: 1234
DB_NAME: my-db-name
DB_USERNAME: user
DB_PASSWORD: password
REGISTRY_SERVER: registry
REGISTRY_PORT: 8761
notification:
image: notification-service
container_name: notification
ports:
- 8755:8755
networks:
- bridge-perfios
depends_on:
- configserver
- registry
restart: on-failure
environment:
SPRING.PROFILES.ACTIVE: dev
SPRING.CLOUD.CONFIG.URI: http://configserver:8888/
EUREKA.CLIENT.SERVICEURL.DEFAULTZONE: http://registry:8761/eureka
REGISTRY_SERVER: registry
REGISTRY_PORT: 8761
DB_HOST: 1.2.3.4
DB_PORT: 1234
DB_NAME: my-db-name
DB_USERNAME: user
DB_PASSWORD: password
REGISTRY_SERVER: registry
REGISTRY_PORT: 8761
在上面的 docker compose 文件中,我将 NOTIFICATION_SERVICE_HOST 和 AUTH_SERVICE_HOST 值作为 172.17.0.1 传递,以便容器可以相互通信,常量 AUTH_SERVICE_HOST 不起作用并始终假设为 127.0.0.1(常量值不会被 172.17.0.1 替换,始终是假设 127.0.0.1) 而常量 NOTIFICATION_SERVICE_HOST 工作正常,这个常量值被 172.17.0.1 替换
我不确定这里出了什么问题,或者如果缺少某些配置或者我做错了什么,请提出建议。
我已经解决了这个问题,在每个验证令牌的微服务中都发生了问题,为此; 它将转到网关,然后请求将重定向到身份验证服务。 在解析每个微服务中的 DNS 名称时,它使用默认 IP 进行映射,即 127.0.0.1。 我已经改变了每个miceroservice的容器/etc/hosts如下
172.17.0.1 'my domain name'
这解决了我的问题。
现在我需要了解如何使其通用,以便如果我删除容器并再次运行 docker-compose up 那么下面的详细信息应该自动更新到容器的主机文件
172.17.0.1 'my domain name'
任何建议都是非常可观的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.