globalTunnel
覆盖所有 http 请求,因此假设 Loggly 库使用标准http
库,则不需要在 Loggly 库中进行进一步的代理配置。
我觉得这里可能有两个问题:
Linkerd 路由规则
linkerd 需要路由规则来代理到外部互联网。您需要一个dtab来识别host:port
请求并相应地路由它们:
dtab: |
/ip-hostport => /$/inet;
/svc => /$/io.buoyant.hostportPfx/ip-hostport;
使用以下命令确认路由工作:
$ http_proxy=localhost:4140 curl -s -o /dev/null -w "%{http_code}" www.google.com:80
200
Loggly 标头处理
Loggly 似乎使所有包含带有正斜杠的标头的请求都失败:
# working request:
$ curl -H "foo: bar" -s -o /dev/null -w "%{http_code}" logs-01.loggly.com
403
# failed request:
$ curl -H "foo: /bar" -s -o /dev/null -w "%{http_code}" logs-01.loggly.com
400
Linkerd 在出站请求上设置了几个标头,用于跟踪、服务发现和上下文信息。其中一些标头包括带有正斜杠的字符串。
为了解决这个问题,我们有两种选择:
- 修改 linkerd 以清除出站请求的标头。我已经提交了 github.com/linkerd/linkerd/issues/1218 来跟踪这项工作。
- 设置代理服务器来处理 Loggly 的出站请求,如https://github.com/loggly/loggly-jslogger#setup-proxy-for-ad-blockers中所述。然后,假设服务设置在
internal-nginx-proxy
,您可以使用此路由规则:
dtab: |
/svc/logs-01.loggly.com => /$/inet/internal-nginx-proxy/80;