![](/img/trans.png)
[英]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.