Kong 路由:由于未知原因,没有与这些值匹配的路由

问题描述 投票:0回答:1

对 Kong 非常陌生,并且在 Kong 路由方面遇到困难。在 Kong 3.3.0 版本上。

我正在从一台机器向另一台机器发出请求,通过两个网关,一个是 Nginx,另一个是 Kong。 Kong 网关返回以下错误...

{
  "message":"no Route matched with those values"
}

...尽管 URI 与预期的路由路径匹配。最奇怪的是,如果我在 Kong 网关所在的机器上发出相同的卷曲请求,它就会起作用。只是经过Nginx网关后,请求似乎无法匹配。

此外,我尝试使用此Kong 故障排除指南 进行调试失败了。我尝试使用 Kong-Debug,但如果我在 Kong 网关的计算机上发出请求,我只会收到调试响应标头。我无法使跟踪配置工作。并且没有全局或特定于路由的插件导致请求丢失。

这是否足以要求更多的调试想法和可能的问题?我在想也许这与 nginx 服务器有关,或者请求来自另一台机器?

curl 请求

curl -k --verbose   --location 'https://api.foo.com/identity-provider/oauth2/token'

香港航线

{
  "next": null,
  "data": [
    {
      "methods": null,
      "sources": null,
      "destinations": null,
      "created_at": 1727956168,
      "updated_at": 1727956168,
      "https_redirect_status_code": 426,
      "regex_priority": 0,
      "snis": [
        "api.foo.com"
      ],
      "tags": null,
      "name": "identity-provider",
      "id": "aca5d660-891d-491c-a337-a6b4c974e23f",
      "headers": null,
      "path_handling": "v0",
      "protocols": [
        "https"
      ],
      "response_buffering": true,
      "service": {
        "id": "4861e944-7086-49b9-9ff6-9cce79f0e16c"
      },
      "request_buffering": true,
      "preserve_host": false,
      "hosts": [
        "api.foo.com"
      ],
      "strip_path": true,
      "paths": [
        "/identity-provider"
      ]
    }
  ]
}

Kong日志

Remote: (172.16.1.126) kong [03/Oct/2024:12:03:56 +0000] POST /identity-provider/oauth2/token HTTP/1.1 404 Upstream: (-) api.myfoo.com 172.16.1.126, 172.16.1.126

log_format

log_format print_upstream 'Remote: ($remote_addr) $server_name [$time_local] $request $status Upstream: ($upstream_addr) $host Forwarded for: ($http_x_forwarded_for)';

nginx 配置(总结)

http {
  upstream foo-upstream {
    server api-other.foo.com:443;
    keepalive 10;
  }

  server {
    listen 443 ssl default_server;
    server_name api.bar.com;

    location /identity-provider/oauth2/token {
      access_log /var/log/nginx/security-server-endpoint.log main;
      proxy_pass https://foo-upstream/identity-provider/oauth2/token;
    }
  }
}

注意:我知道服务器名称是 api.bar.com 而不是 api.foo.com。我尝试更改服务器名称并设置证书。同样的路由匹配错误,所以我不认为这是根本原因。

带有nginx的机器上的dnsmasq配置

address=/api.foo.com/172.16.1.126
address=/api-other.foo.com/172.16.2.127
server=/foo.com/172.16.2.126

注:

  • Nginx 机器:
    172.16.1.126
  • 金刚机:
    172.16.2.126

据我了解,curl 请求的网络路径是这样的: api.foo.com

  1. (在 172.16.1.126 上)DNS 返回 172.16.1.126
  2. (在 172.16.1.126 上)nginx 返回 api-other.foo.com
  3. (在 172.16.1.126 上)DNS 返回 172.16.2.126
  4. (在 172.16.2.126 上)尽管主机是 api.foo.com,Kong 仍无法匹配路由
nginx gateway kong
1个回答
0
投票

相关答案在这里:Rails:通过 Kong (Heroku) 转发的请求没有路由匹配错误 文档:https://docs.konghq.com/gateway/latest/reference/configuration/#trusted_ips

答案是

trusted_ips
配置。我的可信 IP 配置包括带有 nginx 服务器的机器的 IP (
172.16.1.126
)。一旦我从网络掩码中排除该 IP 地址,请求就会按预期匹配。

© www.soinside.com 2019 - 2024. All rights reserved.