首页 > 其他分享 >记录升级 KONG 网关遇到的坑

记录升级 KONG 网关遇到的坑

时间:2023-02-08 17:14:06浏览次数:54  
标签:网关 HTTP GET kong 升级 plugins path KONG 路由

记录升级 KONG3.1 网关遇到的坑

原始版本:2.1

升级版本:3.1.1

动态路由

  • 默认使用插件 request-transformer

假如你有一个真实路由 /user/all,现在需要网关做转发,前端请求路由为/web/v1/demo/user/login

原始版本你需要在 Konga 路由页面配置PATH/web/v3/demo/user/login$,然后通过插件就能正常将接口转发到后端真实路由

升级版本你需要在 Konga 路由页面配置PATH~/web/v3/demo/user/login$,然后才能通过插件就能正常将接口转发到后端真实路由

具体缘由如下:

企业微信截图_0f9e1c1b-a64a-4a64-afa3-bd500fa51e8d

路由参数(strip_path

可能需要指定路径前缀来匹配路由,但不要将其包含在上游请求中。为此,请strip_path通过配置路由来使用布尔属性,如下所示:

{
    "paths": ["/service"],
    "strip_path": true,
    "service": {
        "id": "..."
    }
}

启用此标志指示 Kong Gateway 在匹配此路由并继续代理服务时,不应上游请求的 URL 中包含 URL 路径的匹配部分。比如下面客户端对上面路由的请求:

GET /service/path/to/resource HTTP/1.1
Host: ...

这会导致 Kong Gateway 发送以下上游请求:

GET /path/to/resource HTTP/1.1
Host: ...

同样,如果在已启用的路由上定义了 Regex 路径strip_path ,则整个请求 URL 匹配序列将被剥离。例如:

{
    "paths": ["/version/\d+/service"],
    "strip_path": true,
    "service": {
        "id": "..."
    }
}

以下 HTTP 请求匹配提供的正则表达式路径:

GET /version/1/service/path/to/resource HTTP/1.1
Host: ...

由 Kong Gateway 在上游代理为:

GET /path/to/resource HTTP/1.1
Host: ...
  • 举例说明

当你需要通过一个管理接口 /admin-api通过代码去实现 Konga 管理功能的话,strip_path参数需要设置为 True

strip_path设置为 False 时,通过代码获取虚拟主机信息时,Kong 接收到的请求为

kong   | 127.0.0.1 - qidian [14/Jan/2023:11:46:47 +0800] "GET /admin-api/upstreams/e307a6ee-1fae-4cde-97de-701c7f633725 HTTP/1.1" 404 23 "-" "python-requests/2.28.1"   ## 重点关注
kong   | 172.31.0.1 - qidian [14/Jan/2023:11:46:47 +0800] "GET /admin-api/upstreams/e307a6ee-1fae-4cde-97de-701c7f633725 HTTP/1.1" 404 23 "-" "python-requests/2.28.1"

这时会出现错误,错误详情为

project.kong.manager.exceptions.APIException: {"message":"Not found"} (Http 404) (Method GET) (Url https://172.16.120.186:48443/soc-admin-api/upstreams/e307a6ee-1fae-4cde-97de-701c7f633725)

strip_path设置为 True时,通过代码获取虚拟主机信息时,Kong 接收到的请求为

kong   | 127.0.0.1 - qidian [14/Jan/2023:11:47:09 +0800] "GET /upstreams/e307a6ee-1fae-4cde-97de-701c7f633725 HTTP/1.1" 404 23 "-" "python-requests/2.28.1"  ## 重点关注
kong   | 172.31.0.1 - qidian [14/Jan/2023:11:47:09 +0800] "GET /admin-api/upstreams/e307a6ee-1fae-4cde-97de-701c7f633725 HTTP/1.1" 404 23 "-" "python-requests/2.28.1"

这时通过 Konga 管理接口转发到 Kong 网关时的真实请求路径会将 /admin-api删除,可以正常请求

自定义插件

当你自定义插件后需要挂载到网关容器中,需要修改两个地方

1、docker-compose 文件

kong:
    image: kong:3.1
    container_name: kong
    restart: always
    networks:
      - network
    env_file:
      - kong.env
    ports:
      - 48000:8000 # 接收处理 http 流量
      - 48443:8443 # 接收处理 https 流量
      #- 8001:8001 # http 管理 API
      #- 8444:8444 # https 管理 API
    volumes:
      - './plugins/soc-log:/usr/local/share/lua/5.1/kong/plugins/soc-log'  # 挂载路径不可变,需要是/usr/local/share/lua/5.1/kong/plugins/
      - './plugins/soc-ip-restriction:/usr/local/share/lua/5.1/kong/plugins/soc-ip-restriction'
      - './plugins/soc-rate-limiting:/usr/local/share/lua/5.1/kong/plugins/soc-rate-limiting'
      - './plugins/constants.lua:/usr/local/share/lua/5.1/kong/constants.lua'  ## 必须挂载,因为需要修改文件后使用自定义文件

2、constants.lua文件

constants.lua文件 plugins 处添加自定义的插件名称

local plugins = {
  "jwt",
  "acl",
  "correlation-id",
  "cors",
  "oauth2",
  "tcp-log",
  "udp-log",
  "file-log",
  "http-log",
  "key-auth",
  "hmac-auth",
  "basic-auth",
  "ip-restriction",
  "request-transformer",
  "response-transformer",
  "request-size-limiting",
  "rate-limiting",
  "response-ratelimiting",
  "syslog",
  "loggly",
  "datadog",
  "ldap-auth",
  "statsd",
  "bot-detection",
  "aws-lambda",
  "request-termination",
  "prometheus",
  "proxy-cache",
  "session",
  "acme",
  "grpc-gateway",
  "grpc-web",
  "pre-function",
  "post-function",
  "azure-functions",
  "zipkin",
  "opentelemetry",
  "customize-ip-restriction",  ## 自定义插件名称,上边的插件名称不要进行删除和修改
}

标签:网关,HTTP,GET,kong,升级,plugins,path,KONG,路由
From: https://www.cnblogs.com/zhangweijie01/p/17102518.html

相关文章

  • Kong 网关简介及简单使用
    Kong网关简介及简单使用1、kong网关简介Kong是在客户端和微服务端转发API通信的API网关,可以通过插件扩展功能。Kong主要有两个重要的的组件:KongServer:基于ngi......
  • MySQL 升级最佳实践 --- MySQL 5.6升级至MySQL 8.0
    MySQL升级最佳实践---MySQL5.6升级至MySQL8.0背景介绍MySQL8.0新特性数据字典更改MySQLServer8.0合并了一个全局数据字典,其中包含有关事务表中数据库对象的信息。......
  • 工业智能网关在半导体电子厂设备管理有何作用?
    在电子信息,集成电路的发展与各行各业紧密联系在一起,特别是半导体技术,是电子产品的核心单元。我国半导体行业在飞速发展的同时,也面对一些问题。半导体电子厂用电量大,而且大部......
  • centos7升级git
    移除旧版本sudoyumremovegitsudoyumremovegit-*添加EndPointPackageRepository在 CentOS7 上安装新版本 Git 最快的方法是通过 EndPoint 库。s......
  • Linux之Centos7内核版本升级
    参考文档https://blog.csdn.net/carefree2005/article/details/1148198851、内核升级步骤1)、查看可升级版本使用命令yumlistkernel可以查看已安装的内核版本和可以升级......
  • 该给node、vue2升级了
      今天没事逛了逛一下,node、vue2官网,发现了一些奇妙的事情......
  • 袋鼠云数栈UI5.0焕新升级,全新设计语言DT Design,更懂视觉更懂你!
    数栈作为袋鼠云打造的一站式数据开发与治理平台,从2016年发布第⼀个版本开始,就始终坚持着以技术为核⼼、安全为底线、提效为⽬标、中台为战略的思想,坚定不移地⾛国产化信创......
  • 物联网中利用OTA进行远程升级的详细操作方法
    物联网设备OTA软件升级之:升级包下载过程之旅第一:OTA概述大家好,我是一个软件升级包。这几天呢,我将会进行一次神奇的网络之旅,从开发者的电脑中,一直跑到终端嵌入式设备中。大家......
  • Openssh升级记录
    执行升级前备份文件cp-r/etc/ssh /etc/ssh_bakcp/etc/init.d/sshd /etc/init.d/sshd_bakcp/usr/sbin/sshd /usr/sbin/sshd_bak一、查看openssl 1、查看opens......
  • GVM升级手册
    #停止服务systemctlstopospd-openvas.servicesystemctlstopopenvas-manager.servicesystemctlstopgsad.servicesystemctlstopgvmd.servicesystemctlstoppostg......