Traefik 可以(也应该)在 Service Fabric 集群中以 "file" 模式使用吗?

Can (and should) Traefik be used in "file" mode in a Service Fabric cluster?

我正在研究在 Service Fabric 集群 运行 Docker 化的微服务中使用 Traefik 作为反向代理。 official way of running Traefik within Service Fabric is to use the Service Fabric provider. Running Traefik within a Docker container is not recommended according to the Github readme 因为您无法通过 localhost:19080 访问 Service Fabric API,而是必须通过其 public IP 访问它。这要求您安装 SSL 证书以安全地与 API 通信,这有点麻烦。

我很好奇使用 Traefix Service Fabric 提供程序(这需要复杂的设置)而不是仅 运行 容器中的 Traefix 运行 文件提供程序是否有任何优势。如果您的服务在 ApplicationManifest 中具有 ServiceDnsName 属性,从而允许 Service Fabric 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 调用分派到适当的内部服务。

优点:

缺点:

对我来说,如果您不一直更改和添加服务,这似乎是一种更简洁的方法。通常,这些东西会保持相当静态。

有没有我没有考虑到的陷阱,或者有任何强烈反对这样做的理由?

我会把我的两分钱加到你的考虑中:

动态静态配置之间的偏好。

好处是每次服务出现 Traefik 配置时,它都会重新加载所有新配置。今天你说 "it won't change",但几个月、几周或几天后,你可能会面临一个新的需求,你必须更新文件,如果系统发展很快,比如微服务解决方案,你很快就会面临一个手动更新此文件的辛苦工作。

如果你确定它几乎不会改变,不要被Service Fabric配置或文件所限制,Traefik可以从REST , ETCD, DynamoDB and many other configuration providers获取配置来加载规则。

对于File方法,可以在Azure FileShare中创建文件,然后作为卷挂载到容器中,这样就不需要重建容器来生效了。

然后您只需更新文件即可:

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