我提前为篇幅道歉 - 但这很有趣,特别是对于建筑师和 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 :)
帮助 ?
任何帮助或指出正确的方向将不胜感激!
我已经做到了。
查看此处展示的单独解决方案:
https://github.com/osher/lcdev-using-compose-and-traefik
TL;博士:
host.docker.internal
.结果:
traefik
将尝试开发机器。