kong
Kong 插件开发语言 Kong 支持使用多种语言开发自定义插件: 语言 方式 说明 Lua 原生支持 Kong 基于 OpenResty/Lua 构建,Lua 是最成熟、性能最好的插件开发语言,官方内置插件均用 Lua 编写 Go Go PDK 通过 go-pdk 库开发,编译为独立进程,Kong 通过 IPC 通信调用 JavaScript / TypeScript JavaScript PDK 通过 kong-js-pdk 开发,运行在独立的 Node.js 进程中 Python Python PDK 通过 kong-python-pdk 开发,运行在独立进程中,适合快速原型开发 WebAssembly (Wasm) Wasm Filter Kong 3.4+ 支持,可以用 Rust、C/C++、Go (TinyGo) 等编译到 Wasm 的语言开发,性能接近原生 除 Lua 外的其他语言插件都通过进程间通信(IPC)与 Kong 交互,会有一定的性能开销。生产环境对性能要求高的场景推荐使用 Lua 或 Wasm。 kong run postgresql docker network create kong-net # 创建 postgresql, 并创建一个实例 kong-db # KONG_DATABASE 数据库类型,必须是 postgres # 初始化 kong 数据库 nerdctl run --rm \ -e KONG_DATABASE=postgres \ -e KONG_PG_HOST=postgresql \ -e KONG_PG_PORT=5432 \ -e KONG_PG_USER=user_0 \ -e KONG_PG_PASSWORD=password_0 \ -e KONG_PG_DATABASE=kong_db \ -e KONG_PASSWORD=password_0 \ kong:3.9.1 kong migrations bootstrap # kong OSS + kong manager OOS nerdctl run -d --name kong \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=postgresql" \ -e "KONG_PG_PORT=5432" \ -e "KONG_PG_USER=user_0" \ -e "KONG_PG_PASSWORD=password_0" \ -e "KONG_PG_DATABASE=kong_db" \ -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ -e "KONG_PROXY_LISTEN=0.0.0.0:8000,0.0.0.0:8443 ssl" \ -e "KONG_ADMIN_LISTEN=0.0.0.0:8001,0.0.0.0:8444 ssl" \ -e "KONG_ADMIN_GUI_LISTEN=0.0.0.0:8002" \ -p 80:8000 \ -p 443:8443 \ -p 8444:8444 \ -p 8001:8001 \ -p 8002:8002 \ kong:3.9.1 # -p 80:8000 # HTTP 代理端口 # -p 443:8443 # HTTPS 代理端口 # -p 8001:8001 # Admin API HTTP 端口 # -p 8444:8444 # Admin API HTTPS 端口 # -p 8002:8002 # Admin GUI HTTP 端口 curl -i -X GET --url http://localhost:8001/services # Kong Manager OSS http://kong:8002/ load balance # 创建一个 upstream curl -X POST http://192.168.50.31:8001/upstreams --data "name=k8s" # 添加两个 targets 到 upstream curl -X POST http://192.168.50.31:8001/upstreams/k8s/targets \ --data "target=192.168.50.80:6443" \ --data "weight=100" curl -X POST http://192.168.50.31:8001/upstreams/k8s/targets \ --data "target=192.168.50.82:6443" \ --data "weight=100" # 创建一个Service 目标到 Blue upstream # host: upstream name curl -X POST http://192.168.50.31:8001/services/ \ --data "name=k8s-service" \ --data "host=k8s" # 最后, 添加一个 Route 作为一个端点到 Service curl -X POST http://192.168.50.31:8001/services/k8s-service/routes/ \ --data "hosts[]=k8s.wiloon.com" commands curl -s localhost:8001 | jq '.configuration' kong manager add route upstreams name: enx-api targets target address: enx:8080 gateway service new gateway service name: enx-api-service service endpoint protocol: https host: enx-api-upstream ca certificate cert: past the content of ca-cert.crt certificates cert: the content of wiloon.crt key: wiloon.key upstreams Upstream 是在 Kong 中管理后端服务的负载均衡机制。当请求到达 Service 时,Kong 会通过定义的 Upstream 来选择一个具体的后端实例(例如,一个微服务的多个副本)。 如果不使用负载均衡就不需要配置 upstreams 了, 直接在 gateway service 中配置 service endpoint 即可. ...