2017-12-19 6 views
0

実行中領事館と春雲領事私は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)で登録されています。

これは一般公開のアドレスですか?

答えて

0

172.18.0.2がAAドッキングウィンドウ内のIPがネットワークにブリッジされ、あなたは間違いなくサービス探索を使用するクライアントからアクセス可能であることを領事に登録されたIPアドレスをしたい...

私はあなたのネットワークを知りませんセットアップやニーズがありますが、(いくつかのアイデアは、多くあります)することができます -

  1. あなたがドッキングウィンドウのホスト(-p)にポートを公開する場合は、ドッキングウィンドウのホストのIP各サービスインスタンスのために登録されていることを確認します(I bootstrap.ymlや春の雲に慣れていない)
  2. ランドッカーコンテナ - -net=host
  3. 春の雲の範囲の異なる方法や外での領事でサービスを登録(領事エージェントへのAPI呼び出し、サービス定義ファイル、https://github.com/gliderlabs/registrator、...)
関連する問題