我在同一个配置多个服务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"
从它提到的文档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。