AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1025442
Accepted
Radagast the Brown
Radagast the Brown
Asked: 2020-07-17 01:33:00 +0800 CST2020-07-17 01:33:00 +0800 CST 2020-07-17 01:33:00 +0800 CST

docker-compose + traefik - 将流量定向到 docker-compose 网络之外的服务

  • 772

我提前为篇幅道歉 - 但这很有趣,特别是对于建筑师和 traefik 向导。

挑战:

底线是,我希望有一个设置,我们可以利用traefik动态配置功能:

自动检测容器何时停止,并知道回退到开发人员机器/外部主机上的外部服务。

或者 - 当一个 local-db 容器启动时,知道它比来自外部源的 db 服务更喜欢它。

完整的图片

我需要为几个团队优化工作流程。

约束:

  • 开发人员在多层复杂的微服务网格上工作
  • 网格中的服务数量约为 50,其中一些是内存密集型的
  • 本地演示和验收测试需要从最终用户的角度展示整个网格作品
  • 现在要求开发人员在本地运行所有网格,除了一些具有实时数据副本的共享数据库——有时也可能在本地运行。

这需要在开发人员机器上运行绝对最低要求。当前的解决方案依赖于 docker-compose 和[email protected],我被要求保留这个,但是,我相信升级到[email protected]会被接受。

追求的用例

实际上,我在这里与您一起追求两个用例,我相信它们具有相同的解决方案-至少在理论上...

用例一 - 多个微服务的本地开发

Dev-Mode = running a process in debug mode, with IDE, file-watch live reloads, etc.

AS A    - developer of services in mid layers of the service mesh
I WANT  - to be able to direct traffic to services under development to
          native processes on my machine, and keep the rest in the compose 
          network
SO THAT - I can run in Dev-Mode only services under development, 
          while all the rest in the mesh run using production-level docker 
          images in docker-compose.

用例二 - 本地开发和外部数据库

AS A    - developer of data brokers in the mesh
I WANT  - to control if containers get to the shared db or to local 
          db container using traefik
SO THAT - I can keep applications in the containers completely agnostic to 
          the topography in which they run

那么缺少什么?

作为一个开始 - 由于 Traefik 是所有容器间通信通过的服务总线 - 我正在寻找一种配置方法traefik来使用来自docker-compose 网络之外的服务。

第一个用例意味着traefik用作服务总线——知道每个服务在哪里运行的唯一实体,可以是容器,也可以是 docker-compose 网络外部的服务。

第二个用例意味着设置traefik将流量引导到在 docker-compose 网络之外运行的进程,但特别是在开发人员的机器上,这反过来又使用来自 compose 网络的服务(为此,dev compose,不像生产 compose - 为网格中的每个节点公开一个入口点,包括仅在生产内部使用的服务)。

两个一个的价格

我知道这里有两个问题,但我想不出另一种方法来分别提出每个问题并获得与全貌相关的答案......

我希望有一个设置,我们可以利用traefik动态配置功能来:

自动检测容器何时停止,并知道回退到开发人员机器或任何其他主机上的外部服务。或者 - 当一个 db 容器启动时,知道比外部 db 服务更喜欢它。

我们可以要求开发人员将记录添加到他们的hosts文件中,但基于 DNS 的解决方案会更受欢迎,特别是如果我们可以使用 docker 内置的 DNS :)

帮助 ?

任何帮助或指出正确的方向将不胜感激!

architecture docker docker-compose
  • 1 1 个回答
  • 241 Views

1 个回答

  • Voted
  1. Best Answer
    Radagast the Brown
    2020-07-21T11:53:34+08:002020-07-21T11:53:34+08:00

    我已经做到了。

    查看此处展示的单独解决方案:

    https://github.com/osher/lcdev-using-compose-and-traefik

    TL;博士:

    1. 开发者主机在 docker-compose 网络中以host.docker.internal.
    2. 文件提供者为团队维护的每项服务提供服务和路由。文件提供程序中的路由设置为低优先级。
    3. docker provider 为每个 docker-compose 容器提供服务和路由。以这种方式创建的路由设置为高优先级。

    结果:

    • 当容器存在时 - 它已被使用。
    • 当容器停止时 -traefik将尝试开发机器。
    • 0

相关问题

  • SMTP 仅出站:或多或少有信誉?

  • 地理数据库同步镜像

  • 网络设计

  • 什么服务器架构适合多人在线游戏?

  • 嵌入式显示设备的架构选择

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve