我尝试将spring cloud网关配置为转发到'/ consul / ui'或'/ consul'下的HashiCorp Consul的标准ui。但是我不知道如何正确地做到这一点。领事以标准配置运行。我在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领事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实际上可在命令行上使用。但是,在浏览器中,我只能看到领事徽标,但不会加载整个页面。
我当然也尝试了其他组合,但都没有用。
注:领事/ ui端点传递状态302,然后转发到实际页面。
注意:我在网关中使用SSL。
注意:ssh -N -f -L 8500:localhost:8500 <user>@<host>
允许我在localhost:8500下在本地打开所需的ui。
UPDATE:显然,/consul/**
是一个错误的选择,因为领事本身已经在此途径下注册,因此我发生了冲突。这至少说明了为什么云网关尝试路由到端口8300。
遗憾的是,目前尚无此问题的真正答案,但有一些棘手的解决方法。但是,人们正在研究能够代理通行证的解决方案。参见例如https://github.com/hashicorp/consul/issues/1382