服务准备

准备一台kong服务器(192.168.250.246)来提供API网关服务,本文所有的操作都将在该服务器上进行。

再准备一个API服务器(192.168.250.245),用来提供无需验证的WebApi。该服务使用Visual Studio 2022来创建,项目模板为ASP.NET Core Web Api。

打开“WeatherForecastController.cs”,修改

 [Route("[controller]")]public class WeatherForecastController : ControllerBase{

修改成如下内容

 [Route("api/[controller]")]public class WeatherForecastController : ControllerBase{

整个项目无需添加任何代码(仅一处修改),项目默认会提供swagger来展示和测试Web Api,直接运行示例项目,会得到一个“/WeatherForecast”的 Web Api。

这篇文章示例中,我们使用默认的示例进行演示。这里我将服务端口修改成了80端口(最简单的方式,将项目发布到IIS,即可)。

在Windows的浏览器中打开下面网页

http://localhost:5214/WeatherForecast

或者在命令行执行

curl http://localhost:5214/WeatherForecast

都会得到一串json字符串(数据为随机生成,内容不同,但格式相同):

[
{
“date”: “2021-11-01T08:27:23.8059871+08:00”,
“temperatureC”: 8,
“temperatureF”: 46,
“summary”: “Cool”
},
{
“date”: “2021-11-02T08:27:23.8066421+08:00”,
“temperatureC”: 30,
“temperatureF”: 85,
“summary”: “Scorching”
},
{
“date”: “2021-11-03T08:27:23.8066469+08:00”,
“temperatureC”: 6,
“temperatureF”: 42,
“summary”: “Chilly”
},
{
“date”: “2021-11-04T08:27:23.8066472+08:00”,
“temperatureC”: 53,
“temperatureF”: 127,
“summary”: “Balmy”
},
{
“date”: “2021-11-05T08:27:23.8066473+08:00”,
“temperatureC”: 21,
“temperatureF”: 69,
“summary”: “Sweltering”
}
]

将localhost修改为192.168.250.245,可以在其它计算机上访问,比如在192.168.250.246(kong服务器)这台计算机上,需要将localhost修改为192.168.250.245才能正常访问。

接下来所有操作均在192.168.250.246这台服务器上操作,也就是直接在运行了kong服务的API网关上操作。

添加一个服务

curl -i -X POST http://172.17.0.1:8001/services \--data name=gdlisnet \--data url='http://192.168.250.245/api/'

输出结果

{
“connect_timeout”: 60000,
“protocol”: “http”,
“id”: “6122903e-b6eb-4b75-adab-5e189fddb66f”,
“created_at”: 1635643735,
“updated_at”: 1635643735,
“host”: “192.168.250.245”,
“retries”: 5,
“write_timeout”: 60000,
“ca_certificates”: null,
“port”: 80,
“read_timeout”: 60000,
“client_certificate”: null,
“path”: “/api/”,
“name”: “gdlisnet”,
“tags”: null,
“tls_verify”: null,
“tls_verify_depth”: null
}

由于本系统对kong的管理服务(8001端口)仅向172.17.0.1所在网段开放,其它网络无法访问管理服务,包括127.0.0.1也无法访问,当然192.168.250.246也是不可访问的。如果你没做安全设置,那么无论是127还是172,192,都应该是可以访问。

在这里创建了一个“Services”,名称为“gdlisnet”,提供了一个“http://192.168.250.245/api/”的服务。

这里只写了两个配置,当然还有其它可选配置,这里不再赘述,如果你有兴趣了解,请看kong官网(http://www.konghq.com)文档。

验证服务

curl -i http://172.17.0.1:8001/services/gdlisnet

kong管理服务:http://172.17.0.1:8001/services/
服务名:gdlisnet

执行后,将会得到如下结果,与添加后返回结果相同。

{
“connect_timeout”: 60000,
“protocol”: “http”,
“id”: “6122903e-b6eb-4b75-adab-5e189fddb66f”,
“created_at”: 1635643735,
“updated_at”: 1635643735,
“host”: “192.168.250.245”,
“retries”: 5,
“write_timeout”: 60000,
“ca_certificates”: null,
“port”: 80,
“read_timeout”: 60000,
“client_certificate”: null,
“path”: “/api/”,
“name”: “gdlisnet”,
“tags”: null,
“tls_verify”: null,
“tls_verify_depth”: null
}

添加路由

curl -i -X POST http://172.17.0.1:8001/services/gdlisnet/routes \--data 'paths[]=/gdlisnet' \--data name=gdlisnet

kong管理服务:http://172.17.0.1:8001/services/
服务名:gdlisnet
路由:routes
路径数组:/gdlisnet
路由名称:gdlisnet

这里添加了一个路由,也就是一个path,路径“/gdlisnet”,将来可以通过“http://172.17.0.1/gdlisnet”来访问的路径。

执行后,得到如下结果

{
“hosts”: null,
“id”: “201ecab4-45b0-4a57-962a-af634aec2d0f”,
“created_at”: 1635644135,
“sources”: null,
“regex_priority”: 0,
“strip_path”: true,
“request_buffering”: true,
“response_buffering”: true,
“headers”: null,
“https_redirect_status_code”: 426,
“preserve_host”: false,
“tags”: null,
“updated_at”: 1635644135,
“methods”: null,
“path_handling”: “v0”,
“snis”: null,
“paths”: ["/gdlisnet"],
“name”: “gdlisnet”,
“protocols”: [“http”, “https”],
“destinations”: null,
“service”: {
“id”: “6122903e-b6eb-4b75-adab-5e189fddb66f”
}
}

验证刚才添加的路由

直接访问245上的Web Api如下

curl -i -X GET http://192.168.250.245/api/WeatherForecast

通过kong服务器访问

curl -i -X GET http://172.17.0.1/gdlisnet/WeatherForecast

执行结果:

[{
“date”: “2021-11-01T09:26:45.2960934+08:00”,
“temperatureC”: 47,
“temperatureF”: 116,
“summary”: “Bracing”
}, {
“date”: “2021-11-02T09:26:45.2960977+08:00”,
“temperatureC”: 24,
“temperatureF”: 75,
“summary”: “Freezing”
}, {
“date”: “2021-11-03T09:26:45.296098+08:00”,
“temperatureC”: -15,
“temperatureF”: 6,
“summary”: “Mild”
}, {
“date”: “2021-11-04T09:26:45.2960982+08:00”,
“temperatureC”: 45,
“temperatureF”: 112,
“summary”: “Warm”
}, {
“date”: “2021-11-05T09:26:45.2960984+08:00”,
“temperatureC”: 1,
“temperatureF”: 33,
“summary”: “Balmy”
}]

确保直接访问,与通过kong服务器访问,可以得到一致的结果。

安装Key Authentication认证插件

curl -X POST http://172.17.0.1:8001/routes/gdlisnet/plugins \--data name=key-auth

执行结果:

{
“enabled”: true,
“id”: “f72a73d6-4b4f-4b88-b068-ec9043485a83”,
“consumer”: null,
“config”: {
“key_names”: [“apikey”],
“run_on_preflight”: true,
“key_in_header”: true,
“anonymous”: null,
“key_in_body”: false,
“key_in_query”: true,
“hide_credentials”: false
},
“tags”: null,
“route”: {
“id”: “201ecab4-45b0-4a57-962a-af634aec2d0f”
},
“name”: “key-auth”,
“protocols”: [“grpc”, “grpcs”, “http”, “https”],
“created_at”: 1635644400,
“service”: null
}

验证认证

重新通过kong来访问web api

curl -i http://172.17.0.1/gdlisnet
curl -i http://172.17.0.1/gdlisnet/WeatherForecast

都会得到如下信息,表明认证插件已生效

HTTP/1.1 401 Unauthorized
Date: Sun, 31 Oct 2021 01:41:06 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Key realm=“kong”
Content-Length: 45
X-Kong-Response-Latency: 15
Server: kong/2.6.0

{
“message”:“No API key found in request”
}

设置用户和认证凭据

curl -i -X POST http://172.17.0.1:8001/consumers/ \--data username=yuntu \--data custom_id=id_yuntu

运行后,得到如下结果:

{
“custom_id”: “id_yuntu”,
“username”: “yuntu”,
“id”: “356c894c-9ee5-4c4e-9850-e1f402a8b6ad”,
“tags”: null,
“created_at”: 1635644718
}

为apikey设置密码

curl -i -X POST http://172.17.0.1:8001/consumers/yuntu/key-auth \--data key=myApikey

得到如下结果

{
“id”: “254b4234-b8fa-4d15-9954-99140504c049”,
“created_at”: 1635644846,
“key”: “myApikey”,
“ttl”: null,
“consumer”: {
“id”: “356c894c-9ee5-4c4e-9850-e1f402a8b6ad”
},
“tags”: null
}

验证

curl -X GET http://172.17.0.1:8001/routes/gdlisnet/plugins/

得到如下结果:

{
“next”: null,
“data”: [{
“enabled”: true,
“id”: “f72a73d6-4b4f-4b88-b068-ec9043485a83”,
“consumer”: null,
“config”: {
“key_names”: [“apikey”],
“run_on_preflight”: true,
“key_in_header”: true,
“anonymous”: null,
“key_in_body”: false,
“key_in_query”: true,
“hide_credentials”: false
},
“tags”: null,
“route”: {
“id”: “201ecab4-45b0-4a57-962a-af634aec2d0f”
},
“name”: “key-auth”,
“protocols”: [“grpc”, “grpcs”, “http”, “https”],
“created_at”: 1635644400,
“service”: null
}]
}

验证Key Authentication认证

未提供认证,执行

curl -i http://172.17.0.1/gdlisnet/WeatherForecast

执行结果:

{
“message”:“No API key found in request”
}

提供认证,执行:

curl -i http://172.17.0.1/gdlisnet/WeatherForecast \-H 'apikey:myApikey'

执行结果:

[{
“date”: “2021-11-01T09:41:23.5599289+08:00”,
“temperatureC”: 4,
“temperatureF”: 39,
“summary”: “Freezing”
}, {
“date”: “2021-11-02T09:41:23.559936+08:00”,
“temperatureC”: 27,
“temperatureF”: 80,
“summary”: “Scorching”
}, {
“date”: “2021-11-03T09:41:23.5599363+08:00”,
“temperatureC”: 50,
“temperatureF”: 121,
“summary”: “Scorching”
}, {
“date”: “2021-11-04T09:41:23.5599365+08:00”,
“temperatureC”: 31,
“temperatureF”: 87,
“summary”: “Sweltering”
}, {
“date”: “2021-11-05T09:41:23.5599367+08:00”,
“temperatureC”: 18,
“temperatureF”: 64,
“summary”: “Hot”
}]

到此,配置完毕!

为Kong添加服务、路由和认证相关推荐

  1. 微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理

    微服务架构的实现首先需要提供一些基础组件,这些基础的功能性组件主要包括服务之间的通信.面向事件驱动的架构设计方法.负载均衡.服务路由.API网关和分布式配置中心等,我们对这六大基本组件进行初步的分析定 ...

  2. Dubbo源码解析之服务路由策略

    1. 简介 服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者.在详细分析服务路由的源码之前,先来介绍一下服务路由是什么.服务路由包含一条 ...

  3. 微服务常见安全认证方案Session token cookie跨域

    HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述.HTTP 基本认证的过程如下: ...

  4. Knative 基本功能深入剖析:Knative Serving 之服务路由管理

    导读:本文主要围绕 Knative Service 域名展开,介绍了 Knative Service 的路由管理.文章首先介绍了如何修改默认主域名,紧接着深入一层介绍了如何添加自定义域名以及如何根据 ...

  5. java静态路由_Linux添加静态路由两种实现方法解析

    添加路由的命令: 1.route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 #添加一条静态路由 route add d ...

  6. linux静态路由添加自启动,LINUX添加静态路由

    LINUX添加静态路由 建议,先用命令添加,测试生效未有其他影响后,添加到配置文件中. 以本次127前置添加静态路由为例 用户需要添加路由如下,命令格式为windows添加格式. route -a - ...

  7. linux下永久添加静态路由

    在linux下永久添加静态路由有两种方法: 添加路由的命令: 1,route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 ...

  8. linux centos7重启路由命令行,centos7 永久添加静态路由

    查看路由表 ip route show|column -t route -n 永久添加路由 vim /etc/sysconfig/network-scripts/route-ens224 ./ via ...

  9. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化...

    序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...

  10. Windows 批量添加删除路由资源性能优化

    首先,本文只涉及如何优化Windows批量添加删除路由资源的速度优化. 基于虚拟网卡来实现虚拟网络的组建的架构图如下所示: 图片来自网络 起因: 一般来说,私有网络的一个资源对应本地的一条路由(比如: ...

最新文章

  1. Kali Linux安装VMware Tools
  2. python3.6进度条_Python实现下载界面(带进度条,断点续传,多线程多任务下载等)...
  3. 为什么有的网站要改服务器才能打开吗,为什么有些网站进不了,怎样设置DNS才能进 – 手机爱问...
  4. 啊哈算法(python)
  5. gallery3d 代码分析
  6. 霍尔传感器学习使用心得
  7. Android 仿QQ、新浪相册的实现
  8. MATLAB数字图像处理(二)直方图
  9. scrapy_redis种子优化
  10. 利用大数据打造智慧港航运
  11. 有没有游泳可以戴的耳机、防水耳机能戴着游泳
  12. 【NLP】Pyhon+讯飞开放平台:​手把手带你写一个智能语音播报系统
  13. libuv访问mysql_libuv中的QUEUE
  14. AI智能语音客服机器人方案介绍/优点/核心
  15. 【172. 阶乘后的零】
  16. Springboot-静态资源访问
  17. vPython窗口-原文完整翻译
  18. python 奶茶系统2.0
  19. 计算理论中的莱斯定理(Rice's Theorem)——证明与应用
  20. 测试工具篇:postman技巧

热门文章

  1. php获取后缀的文件名,php获取文件名及其后缀方法一览
  2. 手机里重力感应器和陀螺仪的区别
  3. 自动合并两个.bib 去除.bib中的重复条目
  4. Jmeter——控制器与取样器
  5. PotPlayer没有声音解决方案
  6. 三流大学和一流大学学生的简历有什么区别?
  7. java 实现 PTF远程连接带有中文下载,解决文件损失
  8. 计算机1946考试试题,统考计算机考试试题及答案
  9. VB简易绘图板的实现
  10. 小米硬盘路由器服务器,小米路由零售版699元 1T硬盘定位家庭服务器