问题描述
我正在同一个 kong.yaml
中配置多个服务。例如
services:
- host: service1.com
name: service1
port: 8000
route: ...
- host: service2.com
name: service2
port: 9000
route: ...
当我向客户提出请求时,例如
curl -X GET -k https://localhost:8443/v1/service2/api -H "apiKey: service2-api-key"
默认情况下它一直被代理到 service1 并收到以下错误:
2021/05/14 01:46:40 [error] 26#0: *37325 [lua] balancer.lua:1064: execute(): DNS resolution failed: dns server error: 3 name error. Tried: ["(short)service1.com:(na) - cache-miss","service1.com:33 - cache-miss/scheduled/querying/dns server error: 3 name error","service1.com:1 - cache-miss/scheduled/querying/dns server error: 3 name error","service1.com:5 - cache-miss/scheduled/querying/dns server error: 3 name error"],client: 172.18.0.5,server: kong,request: "GET /v1/service2/api HTTP/2.0",host: "localhost:8443"
从 docs 中提到,您可以向路由对象添加 hosts
属性,并让客户端向标头中的主机发出请求(这有效)。例如
curl -X GET -k https://localhost:8443/v1/service2/api -H "apiKey: service2-api-key" -H "Host: service2.com"
但是,我无法更改客户端发出请求的方式,因为这已经在生产中。有没有办法可以代理请求而不必更改客户端的请求以在标头中包含主机 (Host: <given host>
)?
另外,需要注意的是,如果我完全删除 service1,那么它就可以工作,它默认为 service2 路由,无需在请求的标头中包含额外的 Host。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)