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

spring-cloud-netflix上的Eureka带有基于DNS的配置,所有实例显示为不可用

胡元明
2023-03-14

我正在尝试使用基于DNS的EIP配置在aws上设置一个eureka集群,如https://github.com/netflix/eureka/wiki/configuring-eureka-in-aws-cloud所述

似乎一切正常,但eureka仪表板坚持认为eureka实例不可用。我现在想知道这仅仅是一个ui问题(我认为是这样的),还是我遗漏了什么。

我理解仪表板中的“unavailable-replicas”逻辑,这是因为eureka正在比较注册主机名和副本主机名。实例在discovery客户端注册了它们的内部VPC ip,但在寻找副本对等体时注册了它们的EIP(很奇怪,在eureka日志中,我可以在内部看到它们也在使用内部VPC ip)。

共有1个答案

东方吕恭
2023-03-14

在相关github问题@rozhok的帮助下,我现在有了一个可行的解决方案。如果有人面临同样的问题,下面是我所做的:

eureka:
  datacenter: cloud
  client:
    eurekaServerDNSName: your.dns.name
    eurekaServerPort: 8761
    eurekaServerURLContext: eureka
    region: eu-west-1
    registerWithEureka: true
    fetchRegistry: true
    useDnsForFetchingServiceUrls: true
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enableSelfPreservation: true
@SpringBootApplication
@EnableEurekaServer
@EnableDiscoveryClient
public class EurekaServer {

    @Value("${server.port:8761}") 
    private int port;

    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }

    @Bean
    @Autowired
    public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils) {
      EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
      AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");

      // Don't use spring cloud's hostname here. 
      // See comment below by Michal
      config.setHostname(
          info.get(AmazonInfo.MetaDataKey.publicHostname));

      config.setIpAddress(info.get(AmazonInfo.MetaDataKey.publicIpv4));
      config.setNonSecurePort(port);
      config.setDataCenterInfo(info);
      return config;
    }

}

使用该配置,每个eureka服务器只将其他服务器视为可用副本:

 类似资料:
  • 我在Spring有3个微服务: 网飞尤里卡 制片人 消费者 和另一个用Eureka-js-client用NodeJs编写的微服务 null 我的代码怎么了?

  • 我使用Spring Cloud Netflix构建了一个Eureka服务器。服务器正在工作,因此我目前正在尝试添加第二个Eureka服务器,以提高弹性,并在更新服务器时提供备用服务器。 http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html这听起来很简单:你只需要像Eureka客户端一样配置你的服务器。因此,我将其

  • 我正在评估使用Spring Boot和Spring Cloud(Zuul和Eureka)构建微服务,这些微服务运行在单独的docker容器中,部署在单独的Amazon EC2实例中。 我可以使用boot2docker在我的Mac上本地运行(即不在Amazon/EC2),但当部署在EC2上时,Zuul找不到该服务,并报告一个“转发错误”(状态500)。 在EC2中,一切都被配置为在端口80上运行(只

  • 我有三个spring boot微服务,它们使用spring Eureka server和zuul作为网关。我有auth微服务,这是zuul网关,验证用户。我有另外两个服务在不同的端口运行。如果我通过zuul网关调用,我可以在jwt的帮助下保护这两个服务,但由于我知道两个微服务端口和url,我可以直接调用并获得响应,而不需要通过网关url。所以我如何保护这两个微服务。请帮助我分享两个微服务之间的安全

  • null 这个设置工作良好,但麻烦开始时,我开始玩的缩放服务。当我放大时,Zuul会在30秒后拿起新的服务器。我没意见。但是,当我取下服务容器时,对Zuul的调用可能会失败(HTTP错误代码200!)因为Zuul仍然认为服务器在活动池中。 我使用的是Spring Boot 1.3.6和Spring Cloud 1.1.2 我的问题: null

  • 从Spring Cloud Greenwich发布的公告中,请参见https://spring.io/blog/2019/01/23/spring-cloud-greenwich-release-is-now-available,我注意到建议将Netflix Ribbon替换为Spring Cloud Loadbalancer。 这是否意味着客户端可以使用Spring Cloud负载均衡器连接到在