首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在kong api-网关上将请求路由到动态端点

如何在kong api-网关上将请求路由到动态端点
EN

Stack Overflow用户
提问于 2022-06-14 14:25:36
回答 1查看 1.2K关注 0票数 1

我有一个名为alpha的服务(使用python创建),它运行在http://127.0.0.1:9000上,并具有这两个端点。

  • /health返回{"health": "OK"} status 200
  • /codes/<str:code>返回{"code": code} status 200

我还有一个在本地主机端口80上运行的无db声明模式的kong api网关。

在kong.yaml中,我有两个服务

代码语言:javascript
运行
复制
services:
  - name: local-alpha-health
    url: http://host.docker.internal:9000/health
    routes:
      - name: local-alpha-health
        methods:
          - GET
        paths:
          - /alpha/health
        strip_path: true
  - name: local-alpha-code
    url: http://host.docker.internal:9000/code/ # HOW TO WRITE THIS PART???
    routes:
      - name: local-alpha-code
        methods:
          - GET
        paths:
          - /alpha/code/(?<appcode>\d+) # Is this right???
        strip_path: true

  • ,如果我向http://127.0.0.1/alpha/health发送GET请求,它会返回{"health": "OK"} status 200,这表明http://127.0.0.1/alpha/health在工作。
  • ,我想发送一个请求,比如http://127.0.0.1/alpha/code/123,我希望收到{"code": 123} status 200,但是我不知道如何设置kong.yaml文件来完成这个任务。如果我向http://127.0.0.1/alpha/code/123发送请求,我从(从alpha django应用程序)获得404,这意味着kong正在将请求路由到alpha服务,但是如果我向http://127.0.0.1/alpha/code/abc发送请求,则得到{"message": "no Route matched with those values"},这表明regex正在运行

我能做到的

代码语言:javascript
运行
复制
services:
  - name: local-alpha-health
    url: http://host.docker.internal:9000/
    routes:
      - name: local-alpha-health
        methods:
          - GET
        paths:
          - /alpha
        strip_path: true

然后发送给http://127.0.0.1/alpha/code/123的请求将转到http://127.0.0.1:9000/code/123`,但我无法用regex控制

如何将请求路由到江港api-网关上的动态端点?

此内容似乎相关,但无法解决如何设置https://docs.konghq.com/gateway-oss/2.5.x/proxy/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-15 13:34:09

注意,像http://127.0.0.1/alpha/code/abc这样的请求实际上与您添加的规则不匹配,因为\d+ (它匹配一个或多个数字)。此外,http://127.0.0.1/alpha/code/123将作为对/的请求到达上游,因为strip_path设置为true。

我已经通过一些小的调整来测试您的示例,以代理到具有类似端点(/status/<code>)的本地httpbin服务。

启动本地httpbin服务:

代码语言:javascript
运行
复制
$ docker run --rm -d -p "8080:80" kennethreitz/httpbin

使用以下配置启动Kong:

代码语言:javascript
运行
复制
_format_version: "2.1"

services:
  - name: local-alpha-code
    url: http://localhost:8080
    routes:
      - name: local-mockbin-status
        methods:
          - GET
        paths:
          - /status/(?<appcode>\d+)
        strip_path: false

请注意,strip_path设置为false,因此整个匹配路径被代理到上游。

用以下方法进行测试:

代码语言:javascript
运行
复制
$ http :8000/status/200                                       
HTTP/1.1 200 OK
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72618713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档