繁体   English   中英

Docker 容器中的 Zuul 重定向问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM