AWS ECS Fargate上的Eureka发现服务

问题描述 投票:0回答:1

我正在尝试通过ECS Fargate部署微服务。我正在使用Eureka作为发现服务。客户已在eureka注册,但无法沟通。

首先,我尝试以此方式获得IP

  @Bean
    @Autowired
    public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
        EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
        String ip = null;
        try {
            ip = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        config.setNonSecurePort(8090);
        config.setIpAddress(ip);
        config.setPreferIpAddress(true);
        return config;
    }

此解决方案将引发连接被拒绝的异常。

我的下一个尝试是用负载均衡器的URL替换ip。

  @Bean
    @Autowired
    public EurekaInstanceConfigBean eurekaInstanceConfig(InetUtils inetUtils){
        EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);

        config.setNonSecurePort(8090);
        config.setIpAddress(LOADBALANCER_URL);
        config.setPreferIpAddress(true);
        return config;
    }

但是这会抛出com.netflix.client.ClientException: Load balancer does not have available server for client: database

我希望这里有人可以帮助我!

spring amazon-web-services docker amazon-ecs netflix-eureka
1个回答
0
投票

根据您的评论,您可以做几件事。

首先,当您在Docker容器中运行时,无需声明此@Bean,可以将其替换为以下配置属性:

eureka:
  instance:
    non-secure-port: 8090
    prefer-ip-address: true

要选择正确的IP地址,您必须配置some network interfaces to be ignored,可以通过添加以下内容来实现:

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

希望这对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.