春季领事服务健康,但在不同的东道主不能互相接触
运行领事和春云领事我有五个微服务全部注册并显示健康。 这些服务中的每一个都运行在不同的EC2实例上。
使用在领事登记的微服务的名称,我不能通过使用RestTemplate
连接到其中任何一个连接
如果服务A用下面的代码调用服务B.
private final static String SERVICE = "http://instance-service"; @LoadBalanced @Autowired private RestTemplate restTemplate; @GetMapping("/instances") public ResponseEntity<String> instances() { ParameterizedTypeReference<String> reference = new ParameterizedTypeReference<String>() { }; return restTemplate.exchange(SERVICE, HttpMethod.GET, null, reference); }
服务A抛出
2017-12-19 17:30:36.000 ERROR 1 --- [nio-8443-exec-7] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://instance-service": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)] with root cause
甚至在debugging设置为TRACE
情况下,服务B上根本看不到任何东西。
但是,如果我采取相同的设置,并在单个EC2实例上运行它,一切都按预期工作。
所有服务都在docker中运行,但是consul代理正在每个EC2实例的主机上运行。
每个微服务都有以下bootstrap.yml
集合
spring: cloud: consul: config: enabled: true discovery: instance-id: ${spring.application.name} prefer-ip-address: true
如果我给RestTemplate
一个随机的端点,它会返回Unknown host
所以它知道微服务在那里,只是在它到达代码库之前就被阻塞了。
如何进一步debugging以find在不同主机上运行时服务被拒绝的真正原因?
我试图打开安全configuration的所有端口只是为了排除,但没有任何区别。
编辑:看领事UI – 我看到我的服务是在一个私人IP(172.18.0.2)注册。
这应该是一个面向公众的地址吗?
172.18.0.2是一个docker桥接networking中的ip,你一定要在consul注册的ip地址可以被使用服务发现的客户端访问。
我不知道你的networking设置或需求,但你可以(一些想法,有很多) –
- 如果将端口暴露给docker主机(-p),请确保每个服务实例都注册了docker主机的ip(我不熟悉bootstrap.yml或spring cloud)
- 使用
-net=host
运行docker容器 - 在不同的方法和春云范围以外(API调用到代理,服务定义文件, https://github.com/gliderlabs/registrator ,…)
- 服务器是否在主机“localhost”(:: 1)上运行,并接受端口5432上的TCP / IP连接?
- 从ECR托pipe的Docker镜像创buildEC2最简单的方法是什么?
- 在AWS中添加ECS实例 – 在哪里设置集群名称
- 如何从Docker Conainer内运行的应用程序读取ECS实例标签信息
- 将Docker部署到AWS Elastic Beanstalk – 如何将端口转发到主机? (端口绑定)
- Angular 2应用程序部署在AWS上运行的Docker容器中
- Kubernetes节点由于docker覆盖造成的高磁盘使用率
- 从用户数据重新启动ecs-agent
- 我如何在EC2上运行一个一次性docker镜像命令?