欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

教你30分钟通过Kong实现.NET网关

程序员文章站 2022-06-09 20:27:55
什么是kongopenrestry是一个基于nginx与lua的高性能平台,内部有大量的lua库。其中ngx_lua_moudule使开发人员能使用lua脚本调用nginx模块。kong是一个open...

什么是kong

openrestry是一个基于nginx与lua的高性能平台,内部有大量的lua库。其中ngx_lua_moudule使开发人员能使用lua脚本调用nginx模块。kong是一个openrestry程序,而openrestry运行在nginx上,用lua扩展了nginx。所以可以认为kong = openrestry + nginx + lua。kong有很高的扩展性,可以通过其插件机制实现扩展。

官方文档:https://docs.konghq.com/
github:https://github.com/kong/kong

原理

教你30分钟通过Kong实现.NET网关

客户端请求到达kong,kong识别出是哪个consumer,根据路由规则将请求转发给service对应的上游服务。我们来看看这个过程中涉及到的核心组件

consumer:代表一个应用,可以为consumer定义plugin,制定其请求规则。

route:客户端与服务匹配的规则,是kong的入口,一旦匹配route规则,则将其代理到与其关联的service,一个route对应一个service,一个service有多个route

service:管理我们的api或者upstream server,service主要属性是url,端口,协议等

upstream:位于kong之后的服务/api,多实例部署实现负载均衡

plugin:提供高级功能并扩展gateway。例如身份认证,速率限制等。

安装kong

官方文档:https://konghq.com/install/#kong-community

大家可以安装企业版或者开源版,我这次安装企业版,但只使用其中的开源功能

#拉镜像 
docker pull kong/kong-gateway:2.6.0.0-alpine

#打标签 
docker tag kong/kong-gateway:2.6.0.0-alpine kong-ee

#创建网络 
docker network create kong-ee-net

#运行数据库容器 
docker run -d --name kong-ee-database --network=kong-ee-net -p 5432:5432 -e "postgres_user=kong" -e "postgres_db=kong" -e "postgres_password=kong" postgres:9.6

#数据库迁移
docker run --rm --network=kong-ee-net -e "kong_database=postgres" -e "kong_pg_host=kong-ee-database" -e "kong_pg_password=kong" -e "kong_password={password}" kong-ee kong migrations bootstrap

#运行kong
docker run -d --name kong-ee --network=kong-ee-net -e "kong_proxy_listen=0.0.0.0:8000,0.0.0.0:9080 http2" -e "kong_database=postgres" -e "kong_pg_host=kong-ee-database" -e "kong_pg_password=kong" -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" -e "kong_admin_gui_url=http://{hostname}:8002" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 -p 8002:8002 -p 8445:8445 -p 8003:8003 -p 8004:8004 -p 9080:9080 kong-ee

安装可视化界面konga

官方源码:https://github.com/pantsel/konga

docker pull pantsel/konga

docker run -d -p 1337:1337 --network kong-ee-net -e "token_secret=kongtoken" -e "db_adapter=postgres" -e "db_host=kong-ee-database" -e "db_user=kong" -e "db_password=kong" --name konga pantsel/konga

访问localhost:1337,新建用户,登录后创建连接:test/http://192.168.43.94:8001,指定kong api的端口8001

教你30分钟通过Kong实现.NET网关

kong代理http服务

我们用的演示项目是https://github.com/cysnet/gateway-aspnetcore-demo,其中包含以下内容

  • http服务:server1与server2
  • grpc服务:grpcservice1与grpcservice2
  • grpc客户端:grpcclient
  • identityserver4服务:idstest
  • 日志服务:logserver

1.代理http服务我们用server1,启动server1

教你30分钟通过Kong实现.NET网关

2.通过admin api在kong中创建service,也可使用可视化界面konga创建

post http://192.168.43.94:8001/services  --data name=server1 --data url='http://192.168.43.94:5000'

3.通过admin api创建路由,也可使用可视化界面konga创建

http://192.168.43.94:8001/services/server1/routes  --data 'paths[]=/http1'--data name=http1

4.测试

教你30分钟通过Kong实现.NET网关

kong代理grpc服务

1.代理grpc我们用grpcservice1,启动grpcservice1

教你30分钟通过Kong实现.NET网关

2.通过admin api在kong中创建service,也可使用可视化界面konga创建

post 192.168.43.96:8001/services --data name=gserver1 --data protocol=grpc --data host=192.168.43.94  --data port=6001

3.通过admin api创建路由,也可使用可视化界面konga创建

post 192.168.43.94:8001/services/gserver1/routes  --data protocols[]=grpc --data name=r-gserver1  --data paths[]=/greet

4.测试,运行grpcclient

教你30分钟通过Kong实现.NET网关

kong负载http服务

1.启动server1与server2

教你30分钟通过Kong实现.NET网关

2.通过admin api在kong中创建upstreams,也可使用可视化界面konga创建

post http://192.168.43.94:8001/upstreams --data name=u-http1

3.为u-http1创建target,指向server1与server2

post http://192.168.43.94:8001/upstreams/u-http1/targets  --data target='192.168.43.94:5000'
post http://192.168.43.94:8001/upstreams/u-http1/targets  --data target='192.168.43.94:5001'

4.修改http1 service的指向,让其指向u-htttp1这个upstream

patch http://192.168.43.94:8001/services/server1 --data host='u-http1'

5.测试,调用以下api

http://192.168.43.94:8000/http1/name

教你30分钟通过Kong实现.NET网关

kong负载grpc服务

1.启动grpcservice1与grpcservice2

教你30分钟通过Kong实现.NET网关

2.通过admin api在kong中创建upstreams,也可使用可视化界面konga创建

post http://192.168.43.94:8001/upstreams --data name=u-gserver1

3.为u-gserver1创建target,指向grpcservice1与grpcservice2

post http://192.168.43.94:8001/upstreams/u-gserver1/targets  --data target='192.168.43.94:6001'
post http://192.168.43.94:8001/upstreams/u-gserver1/targets  --data target='192.168.43.94:6002'

4.修改gserver1 service的指向,让其指向u-gserver1这个upstream

patch http://192.168.43.94:8001/services/gserver1 --data host=‘u-gserver1'

5.测试,运行grpcclient

教你30分钟通过Kong实现.NET网关教你30分钟通过Kong实现.NET网关

集成identityserver4实现jwt认证

1.给server1开启jwt插件

post http://localhost:8001/services/server1/plugins -d “name=jwt ” –d “config.key_claim_name=client_id”

2.创建consumer

post localhost:8001/consumers -d "username=c-server1"

3.获取ids4证书公钥与私钥

openssl安装https://slproweb.com/products/win32openssl.html

openssl pkcs12 -in chester.pfx -nocerts -nodes -out private_pc.key
从密钥对中提取私钥(头部格式:-----begin rsa public key-----)
openssl rsa -in  private_pc.key -out private.pem
从密钥对提取公钥(头部格式:-----begin public key-----)
openssl rsa -in private_pc.key -pubout -out public.key

4.为c-server1创建凭证

post localhost:8001/consumers/c-server1/jwt -d "algorithm=rs256" -d "key=big_cat" -d "secret=xxxxxx" -d "rsa_public_key=xxxxxxxxx“

教你30分钟通过Kong实现.NET网关

5.启动id4test获取jwttoken

教你30分钟通过Kong实现.NET网关

6.调用api验证token

教你30分钟通过Kong实现.NET网关

ratelimit限流插件

post http://<admin-hostname>:8001/plugins --data name=rate-limiting --data config.minute=5 --data config.policy=redis --data redis_host=192.168.43.102 --data limit_by=ip –data redis_password=123456

多次调用触发则触发限流

教你30分钟通过Kong实现.NET网关

cache插件

post http://localhost:8001/plugins  --data name=proxy-cache  --data config.content_type="text/plain; charset=utf-8"  --data config.cache_ttl=30 --data config.strategy=memory

多次调用x-cache-status=hit则命中缓存成功

教你30分钟通过Kong实现.NET网关

日志插件

启动logserver

教你30分钟通过Kong实现.NET网关

开启日志插件

post http://localhost:8001/services/server1/plugins  --data "name=http-log"  --data "config.http_endpoint=http://192.168.43.94:5555/log"  --data "config.method=post"

请求http://192.168.43.94:8000/http1/name,查看logserver输出

教你30分钟通过Kong实现.NET网关

到此这篇关于30分钟通过kong实现.net网关的文章就介绍到这了,更多相关kong实现.net网关内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: Kong .NET 网关