Spring Cloud Gateway:如何配置到 Consul UI 的路由?

Spring Cloud Gateway: How to configure a route to Consul UI?

我尝试配置 spring 云网关转发到标准 ui 的 HashiCorp Consul,在“/consul/ui”或只是“/consul”下。但是我不知道如何正确地做到这一点。 Consul 是 运行 的标准配置。我在 10.2.0.2 上有一个外部 IP 地址和一个本地网络接口。我试过了:

routes:
    - id: consul
      uri: "http://127.0.0.1:8500"
      predicates:
        - Path=/consul/

curl -L 127.0.0.1/consul/ui 但是给了我 500,因为根据日志,网关不匹配 /consul 但 /consul/** 然后决定路由到 10.2.0.2 :8300 这是 Consuls rpc 端点。

再试一次:

- id: consul
      uri: "http://127.0.0.1:8500"
      predicates:
      - Path=/consul/**
      filters:
      - StripPrefix=1

...和另一个完全一样。 另一种有前途的方法:

- id: consul
      uri: "http://127.0.0.1:8500"
      predicates:
      - Path=/consul/**
      filters:
      - RewritePath=/consul/(?<segment>.*), /ui/$\{segment}

使用 curl -L 实际上在命令行上有效。但是,在浏览器中我只能看到 consul 徽标,但整个页面都无法加载。

我当然也试过其他一些组合,none成功了。

注意:consul /ui 端点传送状态 302,然后转发到实际页面。

注意:我在网关中使用 SSL。

注意:ssh -N -f -L 8500:localhost:8500 <user>@<host> 允许我在 localhost:8500 下本地打开预期的 ui。

更新: 显然 /consul/** 是一个糟糕的选择,因为 consul 本身已经在这条路线下注册了,因此我发生了冲突。这至少清楚了,为什么云网关尝试路由到端口 8300。

不幸的是,目前这个问题没有真正的答案,但有一些 hacky 解决方法。但是,人们正在研究一种能够代理 pass consul ui 的解决方案。参见例如https://github.com/hashicorp/consul/issues/1382