当前位置: 首页 > 知识库问答 >
问题:

Netflix Eureka服务器和Docker swarm客户端实例注册问题

乐刚毅
2023-03-14

我们正在尝试在Docker容器上部署NetflixEureka服务器,Docker容器是一个Spring Boot应用程序。我们将其部署为Docker服务,Docker集群用于容器编排。当我们直接创建容器并运行应用程序时,一切都很好。Eureka服务器使用正确的IP地址注册所有客户端应用程序。但是当我们创建并部署为docker服务时,它会使用错误的IP地址注册应用程序。

我们已经根据 spring 文档尝试了以下解决方案,更新了配置文件中的属性值。


spring: 
   cloud:
     inetutils:
       ignoredInterfaces:
          - docker0
          - veth.*

eureka:
  instance:
    preferIpAddress: true

也尝试了这些解决方案:

https://github.com/spring-cloud/spring-cloud-netflix/issues/1820

https://github.com/spring-cloud/spring-cloud-netflix/issues/2084

当我们运行docker服务时,容器被分配了一个IP地址,比如172.16.1.3,在docker内部启动的服务被分配了新的IP地址172.16.1.4,因为这个问题,客户端应用程序将自己的IP注册到Eureka服务器中。但它可以通过172.16.1.4访问。

那么为什么将docker作为服务运行会分配两个IP地址呢?

在这里,Eureka服务器在10.255.53.172 IP地址上运行,但正如我们在第二张图像中看到的那样,它在实例信息中显示了不同的IP

Eureka实例使用容器IP注册,但可以使用网络中的服务IP访问它

共有1个答案

韩夕
2023-03-14

我们在生产中使用 docker 群模式使用此配置:

Eureka服务器配置

# Defines the Eureka server that is used by the Netflix OSS components to use as the registry
# for server discovery
eureka:
  instance:
    hostname: ${HOST_NAME:localhost}
    appname: eureka-cluster
    # enable to register multiple app instances with a random server port
    instance-id: ${spring.application.name}:${random.uuid}
    leaseRenewalIntervalInSeconds: 10
    leaseExpirationDurationInSeconds: 20

Eureka客户端配置

eureka:
  client:
    registerWithEureka: ${REGISTER_WITH_EUREKA:true}
    fetchRegistry: ${FETCH_REGISTRY:false}
    serviceUrl:
      defaultZone: ${EUREKA_DEFAULT_ZONE:http://localhost:8761/eureka/}
  instance:
    hostname: ${HOST_NAME:${spring.application.name}}  # work on swarm
    preferIpAddress: ${PREFER_IP_ADDRESS:false}
    # enable to register multiple app instances with a random server port
    instance-id: ${spring.application.name}:${random.uuid}
    leaseRenewalIntervalInSeconds: ${LEASE_RENEWAL_INTERVAl_IN_SECONDS:10}
    leaseExpirationDurationInSeconds: ${LEASE_EXPIRATION_DURATIONIN_SECONDS:20}

ON群服务定义

  rd-service:
      image: my-eureka-server-microservice-image
    ports:
    - "8763:8763"
      networks:
      - backend

  client-service:
    image: my-eureka-client-microservice-image
    networks:
    - backend
    networks:
    environment:
    - "EUREKA_DEFAULT_ZONE=http://rd-service:8763/eureka"
    - "REGISTER_WITH_EUREKA=true"
    - "FETCH_REGISTRY=true"

networks:
  backend:
    external: true

重要提示:服务必须位于 eureka 服务器 docker 服务上使用的同一 docker 覆盖网络中。

 类似资料:
  • 本文向大家介绍Python XML RPC服务器端和客户端实例,包括了Python XML RPC服务器端和客户端实例的使用技巧和注意事项,需要的朋友参考一下 一、远程过程调用RPC XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client ca

  • pom.xml 主应用程序类 Application.Properties eureka客户端设置 pom.xml Application.Properties 我在eureka-server仪表板(http://localhost:8761)中没有看到向Eureka server注册的micro-service-currency-exchange-service 为什么eureka客户端没有注册

  • 我有一个工作中的Eureka注册表,其中注册了许多Spring-Boot应用程序。我知道这是有效的,因为他们能够找到对方,并通过尤里卡注册中心进行交流。 当我启动我的新SBA应用程序时,我可以看到它自己在Eureka注册表中注册,所以它正在查找Eureka。然而,当我打开SBA UI时,它是空的,只是说“没有应用程序注册。”在我的控制台上,我可以一遍又一遍地看到下面的堆栈跟踪。

  • 我对docker,Spring框架的一切都很陌生…它们成功地在localhost环境中运行,现在我想把它们推送到docker中,但是总是给我错误,我在那里卡住了大约一周。有人能帮我弄清楚吗!!! 现在我有 eureka 服务器和云配置服务器服务,这是我的代码: 尤里卡服务器应用程序.yml 和 Dockerfile: 现在我有云配置服务器应用程序.yml:在这个文件中,我试图在github上备份它

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se