amazon-web-services - 如何使用 AWS Beanstalk 和 Spring Cloud Netflix 在 Docker 容器之间建立连接

标签 amazon-web-services docker amazon-elastic-beanstalk microservices netflix-eureka

我的应用程序由几个微服务组成。
我想使用 NetFlix Eureka 作为发现服务器,并且我想将我的应用程序部署为 Docker 容器。我想在我的服务之间建立通信,但是有几个问题:

  • Beanstalk 始终使用 nginx 作为容器的反向代理,默认情况下将所有请求路由到端口 80。好吧,我已经使用一些棘手的脚本解决了这个问题。
  • 我的 EC2 Beanstalk 实例上有几个网络接口(interface) - docker0 是 docker 的桥接器,eth0 是主机 IP。问题是,我无法动态确定容器内的主机 IP 地址,因此我无法在没有硬编码的情况下将其传递给 Eureka 发现服务器(也作为 Docker 镜像运行)。使用代码或配置,我只能公开内部 Docker 接口(interface)而不是桥接。

  • 所以,底线 - 我想使用 Docker、Beanstalk 和 Eureka 构建支持微服务的应用程序。解决方案应该是可扩展的,并且除了 Eureka 主机 IP 之外不应该有任何硬编码值。

    谢谢。

    最佳答案

  • 不要使用 Elastic Beanstalk - 改为使用 ECS 进行 Docker 部署。
  • 告诉 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; }
  • 关于amazon-web-services - 如何使用 AWS Beanstalk 和 Spring Cloud Netflix 在 Docker 容器之间建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165181/

    相关文章:

    python - css 在 aws 上的 django 的管理页面中不起作用

    amazon-web-services - 使用 golang 无法将文件上传到 SFTP 主机

    amazon-web-services - 限制对 Cloudform 中的 VPC 对 API 网关端点的访问

    python - 在 Amazon Web Services 上开始使用 Django

    docker - kubernetes微服务Spring Cloud

    amazon-web-services - AWS Cloudformation+Beanstalk 错误 YAML 模板无效

    php - docker compose 的最佳部署策略(LAMP 堆栈)

    docker - 在 Windows Server '19 上 docker 可以与 IIS 并行运行吗?

    amazon-web-services - AWS EB 从 docker 部署 TypeError

    elasticsearch - Elasticsearch-在path_route上找不到嵌套类型