Как бороться с развернутым докером взаимного доступа к весеннему облачному приложению через zuul? - PullRequest
0 голосов
/ 29 марта 2019

Я развернул мое весеннее облачное приложение в докере, включая сервер eureka, zuul, клиент eureka. Я хочу получить доступ к клиенту eureka через zuul.

Zuul и клиент eureka зарегистрированы на сервере eureka. Я получаю доступ к каждому приложению, оно работает. Когда я получаю доступ к клиенту eureka через zuul, вывод информации о консоли zuul java.net.NoRouteToHostException. Я не знаю, почему и как бороться с этой проблемой.

Конфигурация сервера Eureka выглядит следующим образом.

server:
  port: 1020
spring:
  application:
    name: eureka-server
  security:
    basic:
      enabled: true
    user:
      name: admin
      password: admin

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  instance:
    hostname: 192.168.90.183
    prefer-ip-address: true
    ip-address: 192.168.90.183
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 5000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    shutdown:
      enabled: true

Конфигурация Zuul похожа на это.

server:
  port: 8088
spring:
  application:
    name: gateway
  security:
    oauth2:
management:
  security:
    enabled: false 
  endpoints:
    web:
      exposure:
        exclude: refresh,health,info 
ribbon:
  ReadTimeout: 20000 
  SocketTimeout: 20000
zuul:
  # sensitiveHeaders: "*"
  routes:
    tdcm-linyi:
      path: /371300/**
      serviceId: tdcm

  ratelimit:
    key-prefix: your-prefix  
    enabled: true
    behind-proxy: true  
    default-policy: 
      limit: 100 
      quota: 1000 
      refresh-interval: 60
      type: 
      - user
      - origin
      - url
  host:
    connect-timeout-millis: 20000
    socket-timeout-millis: 20000

#================================eureka setting==============================
eureka:
  instance:
    instance-id: ${eureka.instance.hostname}:${server.port}
    hostname: 192.168.90.183
    prefer-ip-address: true
    ip-address: 192.168.90.183    
    lease-expiration-duration-in-seconds: 10 
    lease-renewal-interval-in-seconds: 5 
  client:
    serviceUrl:
      defaultZone:  http://admin:admin@${EUREKA_HOST:192.168.90.183}:${EUREKA_PORT:1020}/eureka 
    fetch-registry: true
    register-with-eureka: true

Конфигурация клиента Eureka выглядит следующим образом.

spring:
  application:
    name: tdcm
  banner:
    charset: UTF-8
  http:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
  messages:
    encoding: UTF-8
  mvc:
    throw-exception-if-no-handler-found: true
# Server
server:
  port: 8926
  tomcat:
    uri-encoding: UTF-8
#================================eureka settinig==============================
eureka:
  instance:
    instance-id: ${eureka.instance.hostname}:${server.port}
    hostname: 192.168.90.183
    prefer-ip-address: true
    ip-address: 192.168.90.183
    lease-expiration-duration-in-seconds: 10  
    lease-renewal-interval-in-seconds: 5 
  client:
    serviceUrl:
      defaultZone:  http://admin:admin@${EUREKA_HOST:192.168.90.183}:${EUREKA_PORT:1020}/eureka 
    fetch-registry: true
    register-with-eureka: true

Мой тест работает следующим образом.

Я получаю доступ к zuul по http://192.168.90.183:8088, он работает хорошо.

Я получаю доступ к клиенту eureka по http://192.168.90.183:8926/getCityCenter, он работает хорошо.

Когда я получаю доступ к клиенту eureka через zuul http://192.168.90.183:8088/371300/getCityCenter, это не работает.

Консоль показывает такую ​​информацию.

03-29 01:55:27.229 INFO  [c.n.loadbalancer.DynamicServerListLoadBalancer] - DynamicServerListLoadBalancer for client tdcm initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=tdcm,current list of Servers=[192.168.90.183:8926],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;    Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:192.168.90.183:8926;   Zone:defaultZone;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 00:00:00 UTC 1970;  First connection made: Thu Jan 01 00:00:00 UTC 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@3275110f
03-29 01:55:28.201 INFO  [com.netflix.config.ChainedDynamicProperty] - Flipping property: tdcm.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
03-29 01:55:28.545 INFO  [org.apache.http.impl.execchain.RetryExec] - I/O exception (java.net.NoRouteToHostException) caught when processing request to {}->http://192.168.90.183:8926: No route to host (Host unreachable)
03-29 01:55:28.546 INFO  [org.apache.http.impl.execchain.RetryExec] - I/O exception (java.net.NoRouteToHostException) caught when processing request to {}->http://192.168.90.183:8926: No route to host (Host unreachable)
03-29 01:55:28.546 INFO  [org.apache.http.impl.execchain.RetryExec] - Retrying request to {}->http://192.168.90.183:8926
03-29 01:55:28.546 INFO  [org.apache.http.impl.execchain.RetryExec] - Retrying request to {}->http://192.168.90.183:8926
03-29 01:55:28.547 INFO  [org.apache.http.impl.execchain.RetryExec] - I/O exception (java.net.NoRouteToHostException) caught when processing request to {}->http://192.168.90.183:8926: No route to host (Host unreachable)
03-29 01:55:28.548 INFO  [org.apache.http.impl.execchain.RetryExec] - Retrying request to {}->http://192.168.90.183:8926
03-29 01:55:28.555 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:28.556 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null
03-29 01:55:29.549 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:29.550 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null
03-29 01:55:29.550 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:29.551 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null
03-29 01:55:29.549 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:29.552 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null
03-29 01:55:37.508 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:37.510 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null
03-29 01:55:39.031 ERROR [c.t.gateway.component.exception.ProducerFallback] - s:tdcm
03-29 01:55:39.033 ERROR [c.t.gateway.component.exception.ProducerFallback] - exception: null

Кажется, что zuul не может найти маршрутизатор для клиента eureka tdcm.

Я пытался развернуть все приложения на компьютере, включая сервер eureka, zuul, клиент eureka, а не в докере. Тот же конфиг, что и в этой статье, работает хорошо. Я не знаю, почему это не работает, когда доступ к клиенту eureka через zuul в Docker развернут.

Я использую IP-адрес хост-компьютера для применения Spring Cloud.

Моя версия докера 17.12.1-ce.

Моя весенняя облачная версия - Finchley.SR1.

Загрузочная версия My Spring - 2.0.3.RELEASE.

Мой главный компьютер - cent-os 7.

Как мне справиться с проблемой?

1 Ответ

0 голосов
/ 03 апреля 2019

Я знаю проблему, как с дилингом. Конфигурация клиента eureka удаляет значение yml ip-адреса.

eureka:
  instance:
    ip-address: 192.168.90.183   

Причина в конфигурации клиента eureka во внутренней сети докера. Доступ к ней возможен из zuulчерез внутреннюю сеть докера.

...