【发布时间】:2021-05-14 01:54:08
【问题描述】:
我在同一个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。
【问题讨论】:
标签: kong kong-plugin