网关Kong的介绍使用实例

Kong 的介绍

帮助文档:https://docs.konghq.com/2.0.x/admin-api/#upstream-object

主要特性:

  • 云原生:与平台无关,Kong 可以从裸机运行到 Kubernetes
  • 高性能:背靠非阻塞通信的 Nginx,性能自不用说
  • 插件机制:提供众多开箱即用的插件,且有易于扩展的自定义插件接口,用户可以使用 Lua 自行开发插件
  • 熔断:可以通过插件实现熔断,避免系统雪崩
  • 日志:可以记录通过 Kong 的 HTTP,TCP,UDP 请求和响应
  • 鉴权:权限控制,IP 黑白名单,同样是 OpenResty 的特性
  • SSL:Setup a Specific SSL Certificate for an underlying service or API
  • 监控:Kong 提供了实时监控插件
  • 认证:如数支持 HMAC,JWT,Basic,OAuth 2.0 等常用协议
  • 限流:可以通过插件实现单个服务某些接口的限流,避免服务过载导致不可用
  • REST API:通过 REST API 进行配置管理,从繁琐的配置文件中解放
  • 可用性:天然支持分布式
  • 健康检查:自动检查,被动检查;节点不可用同步到所有的 Kong 节点需要 1 - 2 秒
  • 动态路由:Kong 的背后是 OpenResty + Lua,所以从 OpenResty 继承了动态路由的特性

主要有组件:

Kong Server :基于nginx的服务器,用来接收API请求。

Apache Cassandra/PostgreSQL :用来存储操作数据。

Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。

默认端口:

  • 8000:此端口是KONG用来监听来自客户端传入的HTTP请求,并将此请求转发到上有服务器;
  • 8443:有的地方使用8443代替8000, 此端口是KONG用来监听来自客户端传入的HTTP请求的。它跟8000端口的功能类似,但是它只是用来监听HTTP请求的,没有转发功能。可以通过修改配置文件来禁止它;
  • 8001:Admin API,通过此端口,管理者可以对KONG的监听服务进行配置;
  • 8444:有的地方使用8444代替8001,通过此端口,管理者可以对HTTP请求进行监控.

名词介绍:

Route:是请求的转发规则,按照Hostname和PATH,将请求转发给Service。
Services:是多个Upstream的集合,是Route的转发目标。
Consumer:是API的用户,里面记录用户的一些信息。
Plugin:是插件,plugin可以是全局的,绑定到Service,绑定到Router,绑定到Consumer。
Certificate:是https证书。
Sni:是域名与Certificate的绑定,指定了一个域名对应的https证书。
Upstream:是负载均衡策略。
Target:是最终处理请求的Backend服务。

Kong 的使用

测试用Api源码:

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/hello", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "it works",
		})
	})
	r.Run(":9090")
}

访问端口:http://192.168.10.203:9090/hello

Service配置项说明:

属性描述
name(必填)服务名称.
tags(可选)可选地向服务添加标记
url(可选)将协议、主机、端口和路径立即设置成简短的属性。这个属性是只写的(管理API从来不“返回”url)
protocol(必填)该协议用于与upstream通信。它可以是http(默认)或https。
host(必填)upstream服务器的主机。
port(必填)upstream服务器端口。默认为80
path(可选)在向upstream服务器请求中使用的路径。默认为空。
retries(可选)在代理失败的情况下执行的重试次数。默认值是5。
connect_timeout(可选)建立到upstream服务器的连接的超时时间。默认为60000。
write_timeout(可选)将请求发送到upstream服务器的两个连续写操作之间的超时时间。默认为60000。
read_timeout(可选)将请求发送到upstream服务器的两个连续读取操作之间的超时时间。默认为60000。

Router的配置项说明

属性描述
name(可选)定义名称
tags(可选)向路由添加标记
protocols(可选)这条路线应该允许的协议列表。默认情况下,它是“http”、“https”,这意味着路由接受这两种方式。当设置为“HTTPS”时,HTTP请求会被请求升级到HTTPS。通过表单编码,符号是协议=http&协议=https。使用JSON,使用数组。
methods(半可选)与此路由相匹配的HTTP方法列表。例如: [“GET”, “POST”].至少有一个主机、路径或方法必须被设置。用表单编码参数是methods[]=GET&methods[]=OPTIONS。使用JSON,使用数组。
hosts(半可选)与此路径匹配的域名列表。例如:example.com. 至少有一个主机、路径或方法必须被设置。用表单编码参数是 hosts[]=foo.com&hosts[]=bar.com。使用JSON,使用数组。
paths(半可选)与此路径相匹配的路径列表。例如: /my-path.至少有一个主机、路径或方法必须被设置。用表单编码参数是 paths[]=/foo&paths[]=/bar. 使用JSON,使用数组。
Regex priority(可选)当多个路由同时使用正则表达式匹配某个给定请求时,用来选择哪个路由解析该请求的数字。当两个路由匹配路径并且具有相同的regex_优先级时,将使用较旧的路由(最低创建位置)。注意,非regex路由的优先级不同(较长的非regex路由在较短的路由之前匹配)。默认为0。
strip_path(可选)当通过其中一条路径匹配路由时,从上游upstream请求URL中去掉匹配前缀。默认值为true。
preserve_host(可选)当通过一个主机域名匹配一条路由时,在upstream请求头中使用请求主机头。默认设置为false,upstream主机头将是服务主机的主机头。

注意事项:

客户端请求网关,优先到router,然后再到service,一个service可以对应多个router,router里面的host为test.example.com,这个地方要配置本机的DNS,进行解析

测试结果:

地址:<http://192.168.10.202:8000/v1>
结果:{"message":"it works"}

添加Router service鉴权

先找到目标路由、添加对应的插件,Details添加组、Credentials添加用户名和密码,当访问此接口时会提示输入密码。支持JWT,Oaut2等认证方式。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值