【发布时间】:2019-01-11 05:50:05
【问题描述】:
我已经在 Azure Service Fabric 集群上部署了 Traefik。一切正常,就像在 Traefik(使用 SFC 的 API)中找到其他访客服务并动态创建前端和后端配置文件一样。所以我没有静态配置任何前端。
有没有办法告诉 Traefik 为来自所有前端的所有响应添加自定义标头?
【问题讨论】:
标签: azure-service-fabric traefik
我已经在 Azure Service Fabric 集群上部署了 Traefik。一切正常,就像在 Traefik(使用 SFC 的 API)中找到其他访客服务并动态创建前端和后端配置文件一样。所以我没有静态配置任何前端。
有没有办法告诉 Traefik 为来自所有前端的所有响应添加自定义标头?
【问题讨论】:
标签: azure-service-fabric traefik
Traefik 具有用于匹配前端规则的自定义标头功能,如 here 所述。
根据规则应用自定义标题...
可以通过前端配置自定义标头,以向符合前端规则的请求或响应添加标头
因为您使用的是动态配置,所以您需要将这些规则添加到服务中,而不是在 traeffik 配置中进行设置。
类似:
<StatelessServiceType ServiceTypeName="WebServiceType">
<Extensions>
<Extension Name="Traefik">
<Labels xmlns="http://schemas.microsoft.com/2015/03/fabact-no-schema">
<Label Key="traefik.frontend.rule.example2">PathPrefixStrip: /a/path/to/strip</Label>
<Label Key="traefik.enable">true</Label>
<Label Key="traefik.frontend.headers.customRequestHeaders">heaver:value</Label>
</Labels>
</Extension>
</Extensions>
</StatelessServiceType>
AFAIK,没有办法以全局方式应用于所有响应。
【讨论】:
已接受答案中建议的 XML 不适用于 SFC 上动态发现的服务。不过我确实接受了它,因为它指出它可以通过 API 来完成。
为了他人的利益,要调用 API,可以使用“sfctl”(Service Fabric 的 CLI)或直接使用 cUrl 调用 API。
我无法让 CLI 工作 (https://github.com/Microsoft/service-fabric-cli/issues/175),但我使用 cUrl 成功了:
curl -kv -X PUT -H 'Content-Type: application/json' -d '{"PropertyName": "traefik.frontend.headers.customResponseHeaders","Value": {"Kind": "String","Data": "Access-Control-Allow-Origin: https://some_value"}}' --cert /Users/me/client_cert.crt --key /Users/me/client_cert.key https://****.westus2.cloudapp.azure.com:19080/Names/full/service/name/$/GetProperty?api-version=6.0 --http1.1
参考:https://docs.microsoft.com/en-us/rest/api/servicefabric/sfclient-api-putproperty
【讨论】: