実行中領事館と春雲領事私は5つのマイクロサービスを登録して健康状態を示しています。これらのサービスはそれぞれ異なるEC2インスタンス上で実行されています。領事に登録されているマイクロサービスの名前を使用して春の領事サービスはすべて健康ですが、別のホストにいるとお互いに接することはできません
サービスAは、次のコード
とサービスBを呼び出すことだった場合、私はRestTemplate
を使用してそれらのいずれかに至るまでの接続を取得することはできません
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] o.a.c.c.C.[.[.[/].[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
をスローしても、TRACE
に設定し、デバッグして、私は何もServの上ですべてで来ません見ることができます氷B.
しかし、私が同じ設定をして、それを単一のEC2インスタンス上で実行すると、すべてが期待通りに機能します。
すべてのサービスはドッカーで実行されていますが、領事エージェントは各EC2インスタンスのホスト上で実行されています。
各マイクロサービスは、ちょうどそれがコードベースを打つ前にどこかでブロックされています、私はそれがUnknown host
がそう、それはマイクロサービスがあることを知っている返すランダムエンドポイントRestTemplate
を与える場合は、次のbootstrap.yml
が
spring:
cloud:
consul:
config:
enabled: true
discovery:
instance-id: ${spring.application.name}
prefer-ip-address: true
を設定しています。
これをさらにデバッグして、異なるホスト上で実行されているサービスが拒否される本当の理由を見つけることができますか?
私は開こうとしましたすべてセキュリティ設定のポートだけでそれを支配しても違いはありません。
編集:領事のUIを見る - 自分のサービスがプライベートIP(172.18.0.2)で登録されています。
これは一般公開のアドレスですか?