簡體   English   中英

如何使用AWS Beanstalk和Spring Cloud Netflix在Docker容器之間建立連接

[英]How to set up connection between Docker containers using AWS Beanstalk and Spring Cloud Netflix

我的應用程序包含幾個微服務。 我想使用NetFlix Eureka作為發現服務器,並且想將我的應用程序部署為Docker容器。 我想在服務之間建立通信,但是有幾個問題:

  1. Beanstalk始終將nginx用作容器的反向代理,並且默認情況下將所有請求路由到端口80。好的,我已經使用一些棘手的腳本來擊敗它。
  2. 我的EC2 Beanstalk實例上有多個網絡接口-docker0(它是docker的橋梁)和eth0(是主機IP)。 問題是,我無法動態確定容器內的主機IP地址,因此無法在不進行硬編碼的情況下將其傳遞給Eureka發現服務器(該服務器也作為Docker映像運行)。 使用代碼或配置,我只能公開內部Docker接口,而不能橋接。

因此,最重要的是-我想使用Docker,Beanstalk和Eureka構建支持微服務的應用程序。 解決方案應該是可擴展的,除了Eureka主機IP之外,不應有任何硬編碼的值。

謝謝。

  1. 不要使用Elastic Beanstalk –而是將ECS用於Docker部署。
  2. 要告訴Eureka應該使用哪個IP,如https://github.com/spring-cloud/spring-cloud-netflix/issues/30中所述, 使用以下代碼段:

    public EurekaInstanceConfigBean eurekaInstanceConfig() { InetUtilsProperties inetUtilsProperties = new InetUtilsProperties(); inetUtilsProperties.setDefaultHostname(EC2MetadataUtils.getLocalHostName()); inetUtilsProperties.setDefaultIpAddress(EC2MetadataUtils.getPrivateIpAddress()); EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(new InetUtils(inetUtilsProperties)); AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka"); config.setDataCenterInfo(info); info.getMetadata().put(AmazonInfo.MetaDataKey.publicHostname.getName(), EC2MetadataUtils.getLocalHostName()); config.setHostname(EC2MetadataUtils.getLocalHostName()); config.setIpAddress(EC2MetadataUtils.getPrivateIpAddress()); config.setNonSecurePort(port); return config; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM