# kong网关之go插件开发 **Repository Path**: BossKing/go-plug-in-of-kong-gateway ## Basic Information - **Project Name**: kong网关之go插件开发 - **Description**: kong开放了go插件的安装,使得我们在开发kong插件的时候,不需要拘谨于lua语法 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-12-24 - **Last Updated**: 2022-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # kong网关之go插件开发 ## 1.前言 [Kong API网关](https://github.com/Kong/kong)是目前市面上最受欢迎的API网关之一,同时kong开放了go插件的安装,使得我们在开发kong插件的时候,不需要拘谨于lua语法。而且Kong基于nginx可以为我们进行数据接口api的管理,同时配备了限流,熔断等多种插件进行支持,符合网关具备的基本功能。最近一直在考虑轻量化网关,但自身对nignx并不是那么熟练,就考虑到使用Kong来进行端口转发和数据api的管理。也考虑到开发多个gin单体服务后,一直想用微服务的概念把几个单体集合起来,通过网关进行登录校验和权限管理,基于以上场景需求,决定预研kong集成go插件构建微服务网关。 ## 2.kong网关搭建 Kong官方网站有详细的配套流程,但在阅读英文文档的过程中也遇到了一些问题,最终还是完成了基本网关的搭建,以下是基于docker运行的实例代码: ### 构建docker net-work ```shell docker create netwokr kong-net ``` ### 第一步:搭建Postgresql数据库 ```shell docker run -d --name kong-database --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=kong" postgres:9.6 ``` ### 第二步:同步数据 ```shell docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" kong:latest kong migrations bootstrap ``` ### 第三步:DockerFile构建镜像 代码中的go-hello是从官方例子下载下来,大家可自行下载 ```dockerfile FROM golang:alpine as builder # 更换alpine下载镜像 RUN sed -i 's!http://dl-cdn.alpinelinux.org/!https://mirrors.ustc.edu.cn/!g' /etc/apk/repositories RUN apk add --no-cache git gcc libc-dev curl RUN mkdir /go-plugins RUN go env -w GOPROXY=https://goproxy.cn,direct RUN go env -w GOSUMDB=sum.golang.google.cn RUN go env -w GO111MODULE=on COPY ./go-hello.go /go-plugins/go-hello.go RUN cd /go-plugins && go mod init kong-go-plugin && go get github.com/Kong/go-pdk && go mod tidy && go build go-hello.go ##################### ## Release image ##################### FROM kong:2.7.0-alpine # Copy Go files COPY --from=builder /go-plugins/go-hello /usr/local/bin/ ENV KONG_PLUGINS=bundled,go-hello ENV KONG_PLUGINSERVER_NAMES=go-hello ENV KONG_PLUGINSERVER_GO_HELLO_QUERY_CMD="go-hello -dump" USER kong ``` ``` docker build -t kong-demo . ``` ### 第四步:运行容器 ```shell docker run -d --name kong --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" -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_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 127.0.0.1:8001:8001 -p 127.0.0.1:8444:8444 kong-demo:latest ``` ## 3.致谢 [B站某Up主](https://tech.aufomm.com/use-custom-plugins-with-kong/) [Kong官方文档-如何集成其他语言插件](https://docs.konghq.com/gateway/2.7.x/reference/external-plugins/)