Azure service fabric Traefik是否可以(也应该)用于;文件";服务结构集群中的模式?

Azure service fabric Traefik是否可以(也应该)用于;文件";服务结构集群中的模式?,azure-service-fabric,traefik,Azure Service Fabric,Traefik,我正在研究在运行停靠微服务的服务结构集群中使用Traefik作为反向代理。在服务结构中运行Traefik的方法是使用服务结构提供程序。不建议在Docker容器中运行Traefik,因为您无法通过localhost:19080访问Service Fabric API,而必须通过其公共IP访问它。这要求您安装SSL证书以安全地与API通信,这有点麻烦 我很好奇,使用Traefix服务结构提供程序(需要复杂的设置)是否比在与文件提供程序一起运行的容器中运行Traefix有什么好处。如果您的服务在App

我正在研究在运行停靠微服务的服务结构集群中使用Traefik作为反向代理。在服务结构中运行Traefik的方法是使用服务结构提供程序。不建议在Docker容器中运行Traefik,因为您无法通过localhost:19080访问Service Fabric API,而必须通过其公共IP访问它。这要求您安装SSL证书以安全地与API通信,这有点麻烦

我很好奇,使用Traefix服务结构提供程序(需要复杂的设置)是否比在与文件提供程序一起运行的容器中运行Traefix有什么好处。如果您的服务在ApplicationManifest中具有
ServiceDnsName
属性,从而允许服务结构DNS找到它们,那么这似乎是一种更简单的方法。Traefik配置看起来像:

[frontends]
  [frontends.api]
  backend = "api"
  passHostHeader = true
  [frontends.api.routes.forwarder]
  rule = "PathPrefixStrip: /api/"

  [frontends.someservice]
  backend = "someservice"
  passHostHeader = true
  [frontends.someservice.routes.forwarder]
  rule = "PathPrefixStrip: /SomeService/"


[backends]
  [backends.api]
    [backends.api.servers.endpoint]
    url = "http://Api:11080"
  [backends.someservice]
    [backends.someservice.servers.endpoint]
    url = "http://SomeService:12080"
您需要将端口80映射到您的Traefix服务,然后该服务将根据URL前缀将HTTP调用分派到相应的内部服务

优点:

  • 无需与Service Fabric API交谈,从容器中进行此操作有点麻烦
  • 可能更安全;一切都是内部的,无需担心安装证书
缺点:

  • 您的服务路由现在绑定到Docker容器中的TOML文件,而不是集成到服务和应用程序清单文件中。如果不重新部署该容器,则无法修改此内容
  • 除非所有服务都在一个容器中运行,否则我认为这是行不通的(尽管我相信如果启用了reserve代理,您可以使用
    http://localhost:19081/AppName/ServiceName
    相反)
在我看来,如果您不总是更改和添加服务,这似乎是一种更干净的方法。但通常情况下,这些东西保持相当静止


有没有什么我没有考虑的问题,或者有什么强烈的理由反对这样做?

我会在你的考虑中加上我的两分钱:

动态静态配置之间的首选项

其好处是,每次服务使用Traefik配置时,它都会重新加载所有新配置。今天,您说“它不会改变”,但在几个月、几周或几天内,您可能会面临一个新的需求,您必须更新文件。如果系统发展很快,就像在Microservices解决方案上一样,您很快将面临手动更新此文件的艰巨工作

如果您确信它几乎不会更改,则不受服务结构配置或文件的限制,Traefik可以从中获取配置并加载规则

对于文件方法,您可以在Azure FileShare中创建文件并在容器中作为卷装载,因此无需重建容器即可生效

然后,您可以只更新文件并执行以下操作:

  • 重新启动容器以重新加载文件,或
  • 更好的方法是使用
    file.watch
    设置,您不需要重新启动容器,它将监视文件中的任何更改

据我所知,这应该很好。你是要在Azure上托管还是在本地托管?@OlegKarasik-这是在Azure上托管的。我有一个原型设置,它似乎工作得很好。是的,关于将文件存储在某种共享存储中的好建议,这种共享存储很容易访问,而不是Docker映像的一部分。使用另一个提供者可能也是一个不错的选择。我相信我可以从这个设置开始,如果我们发现编辑服务配置太多,需要一个简单的方法来完成,我可以稍后进行更改。谢谢除了rest、etcd和dynamodb之外,该文件是迄今为止最方便手工编辑的。Rest通常用于集成目的,etcd通常用于HA。如果您不需要这些文件,那么就没有理由选择其他文件而不是其他文件。