Kong部署与使用

本文详细介绍了Kong的部署过程,包括Kong、Kong-Dashboard和Konga的安装与配置,以及Kong的节点信息查看、Upstream、Target、Service和Route的使用。Kong是一个高性能、可扩展的云原生API网关,提供负载均衡、身份验证、日志记录等功能。文章还提到了Kong在微服务架构中的重要角色及其主要特性。

一、Kong简介

Kong是一个云原生,快速,可扩展的分布式微服务抽象层(也被称为API网关或API中间件),
它的核心价值是高性能和可扩展性,于2015年作为一个开源项目提供;Kong可以充当微服务请求的网关(或辅助工具),同时通过插件提供负载均衡,日志记录,身份验证,速率限制,转换等功能,从而为您提供帮助。

Kong的主要特征:
• Cloud-Native:与平台无关,kong可以从裸机运行到Kubernetes
• 动态负载均衡:在多个上游服务之间平衡流量
• 基于哈希的负载均衡:具有一致的哈希/粘性回话的负载均衡
• 断路器:智能跟踪不健康的上游服务
• 运行状况检查:主动和被动监视上游服务
• 服务发现:在Consul等第三方DNS解析器中解析SRV记录
• 无服务器:直接从Kong调用和保护AWS Ladbda或OpenWhisk记录
• WebSockets:通过WebSockets与您的上游服务器进行通信
• gRPC:与gRPC服务进行通信,并通过日志记录和可观察性插件观察流量
• OAuth2.0:轻松将OAuth2.0身份验证添加到您的API中
• 记录:通过HTTP,TCP,UDP或磁盘记录对系统的请求和响应
• 安全性:ACL,僵尸程序检测,白名单/黑名单IP等
• Syslog:登录到系统日志
• SSL:为基础服务或API设置特定的SSL证书
• 监视:实时监视提供关键的负载和性能服务器指标
• 转发代理:使Kong连接到透明的中介HTTP代理
• 认证:HMAC,JWT,Basic等
• 速率限制:基于许多变量的阻止和限制请求
• 转换:添加,删除或处理HTTP请求和响应
• 缓存:在代理层缓存并提供响应
• CLI:从命令行控制Kong集群
• REST API:Kong可以使用其RESTful API进行操作,以实现最大的灵活性
• 地理复制:跨不同区域的配置始终是最新的
• 故障检测和恢复:如果您的Cassandra节点之一发生故障,则Kong不会受到影响
• 集群:所有Kong节点自动加入集群,并在各个节点之间更新其配置
• 可伸缩性:Kong本质上是分布的,只需要添加节点即可水平扩展
• 性能:Kong通过扩展和使用Nginx作为核心轻松处理负载
• 插件:可扩展的体系结构,用于向Kong和API添加功能

二、Kong部署

系统环境:
• OS版本:CentOS 7.6
• PostgreSQL版本:11
• Node.js版本:12.0.0
• Npm版本:6.9.0
• Git版本:1.8.3
• Kong版本:1.3.0

1)安装PostgreSQL数据库

注意:PostgreSQL数据库的版本必须要大于9.6的版本,不然安装Kong会报数据库不兼容错误
PostgreSQL软件包官网下载地址

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql11
yum install postgresql11-server
/usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl enable postgresql-11
systemctl start postgresql-11
ss -tunlp | grep 5432

2)创建数据库与用户

su - postgres
psql
CREATE USER kong; 
CREATE DATABASE kong OWNER kong;
alter user kong with encrypted password '123456';
\q

3)修改数据库配置文件
修改PostgreSQL数据库的/var/lib/pgsql/11/data/postgresql.conf配置文件中监听地址为本机所有地址

listen_addresses = '*'

修改PostgreSQL数据库的/var/lib/pgsql/11/data/pg_hba.conf配置文件,添加如下内容

host    all             all             0.0.0.0/0               md5

重启数据库服务

systemctl restart postgresql-11
ss -tunlp | grep 5432

4)下载并安装Kong

cd /usr/local
wget https://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-1.3.0.el7.amd64.rpm
yum localinstall kong-1.3.0.el7.amd64.rpm

5)修改Kong配置文件

whereis kong
cd /etc/kong/
cp kong.conf.default kong.conf

修改kong.conf配置文件中的如下信息

database = {DB_Name}
pg_host = {DB_Host}
pg_port = {DB_Port}
pg_user = {DB_User}
pg_password = {DB_Password}
pg_database = {DB_DatabaseName}

DB_Name:连接数据库时所用的数据库用户信息,默认为postgres
DB_Host:数据库所在的IP地址信息,例如192.168.172.138
DB_Port:数据库的监听端口信息,默认为5432
DB_User:程序连接数据库时所使用的用户名,例如第二步中所创建的kong用户
DB_Password:用户的密码信息
DB_DatabaseName:程序所使用的数据库库名,例如第二步中所创建的kong数据库

6)初始化Kong的数据库

kong migrations bootstrap

7)启动Kong

ulimit -n 4096
kong start -c /etc/kong/kong.conf
ss -tunlp | grep 8001

Kong默认监听端口说明:
• 8000端口:监听来自客户端的HTTP流量,转发到上游的upstream服务上
• 8443端口:监听HTTPS的流量,功能跟8000一样,可以通过配置文件禁止此端口
• 8001端口:Kong的HTTP监听的API管理接口
• 8444端口:Kong的HTTPS监听的API管理接口

8)访问并测试

curl -i http://localhost:8001/

三、Kong-Dashboard部署

1)部署Node.js环境

cd /usr/local/
wget https://nodejs.org/dist/v12.0.0/node-v12.0.0-linux-x64.tar.xz
tar -xf node-v12.0.0-linux-x64.tar.xz
cd node-v12.0.0-linux-x64
ln -s /usr/local/node-v12.0.0-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/node-v12.0.0-linux-x64/bin/npm /usr/local/bin/npm
node -v
npm -v
npm config set registry https://registry.npm.taobao.org

2)安装Kong-Dashboard

npm install -g kong-dashboard
ln -s /usr/local/node-v12.0.0-linux-x64/bin/kong-dashboard  /usr/local/bin/kong-dashboard
kong-dashboard start --help
kong-dashboard start --kong-url http://127.0.0.1:8001 --port 8080
ss -tunlp | grep 8080

3)访问并测试

根据启动后的提示信息在浏览器端来访问Kong-Dashboard,访问格式如下

http://{IP}:{PORT}

IP:输入主机的IP地址
PORT:输入启动时提示的端口号,默认为8080
在这里插入图片描述

四、Konga部署

Konga程序是Kong的查看与管理UI界面,可以通过Konga观察到当前Kong的所有配置,并且可以对于管理Kong节点情况进行查看、监控和预警,Kong主要是用AngularJS写的,运行于Node.js服务端上。

Konga具有以下特性:
• 多用户管理
• 管理多个Kong节点
• 电子邮件异常信息通知
• 管理所有的Kong Admin API
• 使用快照备份,还原和迁移Kong节点
• 使用运行状况检查监控节点和API状态
• 轻松的数据库集成(MySQL、PostgreSQL、MongDB)

1)克隆Konga代码

cd /usr/local
git clone https://github.com/pantsel/konga.git

2)下载依赖包

cd /usr/local/konga
npm install -g --unsafe-perm node-sass@4.9.0
chown root:root -R /usr/local
npm install --unsafe-perm

3)启动服务

npm start
ss -tunlp | grep 1337

4)访问服务

根据启动后的提示信息在浏览器端来访问Konga,访问格式如下

http://{IP}:{PORT}

IP:输入主机的IP地址
PORT:输入启动时提示的端口号,默认为1337

5)注册账号
在这里插入图片描述
在这里插入图片描述
6)连接Kong

在这里插入图片描述
在这里插入图片描述

五、查看节点信息及状态

1)查询节点信息

curl http://localhost:8001 

关键字段信息说明:
• node_id:正在运行的kong节点的uuid,当kong启动时随机生成,每次kong重启时uuid会改变
• availabel_on_server:kong节点上安装的plugins的名称
• enabled_in_cluster:kong节点中启用的插件,即在数据库中生成了对应的存储表

2)查询节点状态信息

curl http://localhost:8001/status

关键字段信息说明:
• total_requests:客户端的请求总数
• connections_active:活跃连接数,包括等待连接的活动客户端的当前数量
• connections_accepted:接受的客户端的连接总数
• connections_handled:已处理连接的总数,一般来说,除非达到一定的资源限制,否则参数值与接受值相同
• connections_reading:当前Kong正在读取请求头的连接数
• connections_writing:将响应写入客户端的连接的当前数量
• connections_waiting:等待请求的空闲客户端连接的当前数量
• reachable:反映数据库连接状态的布尔值,注意:此标志不反映数据库本身的健康状况

六、Upstream使用

Upstream是指位于Kong后端的与您API相关的服务,转发客户端的请求,类似于Nginx中配置负载均衡时使用Upstream模块定义的后端服务器集群时的组名。

1)创建Upstream

curl -X POST http://localhost:8001/upstreams --data "name={Upstream_Name}"

Upstream_Name:Upstream的名称

示例:

curl -X POST http://localhost:8001/upstreams --data "name=myUpstream"

2)查看Upstream

curl -X GET http://localhost:8001/upstreams/{Upstream_Name}

Upstream_Name:要查询的Upstream的名称

示例:

curl -X GET http://localhost:8001/upstreams/myUpstream

查看所有的Upstream

curl -X GET http://localhost:8001/upstreams/

3)删除Upstream

curl -X DELETE http://localhost:8001/upstreams/{Upstream_Name}

Upstream_Name:要进行删除操作的Upstream的名称

示例:

curl -X DELETE http://localhost:8001/upstreams/myUpstream

七、Target使用

Target是用来定义实际的后端主机节点的,它必须要与一个Upstream相关联,通过Upstream来访问后端实际的Target定义的后端节点。

1)创建Target

curl -X POST http://localhost:8001/upstreams/{Upstream_Name}/targets \
--data "target={IPaddr}:{Port}" \
--data "weight=100"

Upstream_Name:指明要在哪个Upstream上创建Target
IPaddr:指明后端服务器的IP地址或域名
Port:指明后端服务所监听的端口
Weight:指明此Target被调度的权重大小

示例:

curl -X POST http://localhost:8001/upstream/myUpstream/targets --data "target=localhost:3000" --data "weight=100"

2)查看Target

curl -X GET http://localhost:8001/upstreams/{Upstream_Name}/targets

Upstream_Name:要查看哪个Upstream下的Target

示例:

curl -X GET http://localhost:8001/upstreams/myUpstream/targets

3)删除Target

curl -X DELETE http://localhost:8001/upstreams/{Upstream_Nmae}/targets/{Target_ID}

Upstream_Name:指明要删除哪个Upstream下的Target
Target_ID:指明要删除的TargetID信息

示例:

curl -X DELETE http://localhost:8001/upstreams/myUpstream/targets/91b96cf8-9e18-4587-9db3-a8fcef59012c

八、Service使用

Service是upstream services的抽象,Service的主要属性是它的URL服务要与路由相相关联,一个服务可以有许多与之关联的路由。

1)添加Service

格式语法:

curl -i -X POST http://localhost:8001/services -d "name={Service_Name}" -d "url=http://{IPaddr}"
字段说明
name服务名称
protocol协议:http或https,默认为http
host后端服务域名或IP
port后端服务端口,默认为80
path后端服务站点访问路径,默认为’/’
retries重试次数,默认为5次
connect_timeout请求后端服务的超时时间,默认为60000ms,即一分钟
write_timeout写超时时间,默认为60000ms
read_timeout读超时时间,默认为60000ms
url后端服务的url地址

示例:

curl -i -X POST --url http://localhost:8001/services/ \
--data 'name=myservice' \
--data 'protocol=http' \
--data 'host=myUpstream' \
--data 'port=80'

注意:Service与Upstream进行绑定时,host选项要指明Upstream的名称

2)查询Service

查询所有Service

curl -i -X GET http://localhost:8001/services/

查询指定的Service

curl -i -X GET http://localhost:8001/services/{Service_Name}

Service_Name:指明要进行查询的Service的名称

示例:

curl -X GET http://localhost:8001/services/myservice

3)更新Service

curl -i -X PUT http://localhost:8001/services/example-service \
--data "name={Service_Name}" --data "protocol=http" \
--data "path=/" --data "host={Upstream_Name}"

Service_Name:指明要更新哪个Service
Upstream_Name:指明更新所要绑定的Upstream的名称

九、Route使用

Route是用来定义匹配客户端请求的规则的,每个Route与一个Service相关联,一个服务可能有多个与之关联的路由,匹配给定的路由的每个请求都将代理到其关联的服务上。

1)创建Route

curl  -i X POST --url http://localhost:8001/routes/ \
--data 'protocols[]=http&protocols[]=https' \
--data 'paths={Path}' \
--data 'service.id={Service_ID}'
--data 'hosts={Daemon_Name}'

Path:指明访问的路径信息
Service_ID:指明要与之关联的ServiceID
Daemon_Name:指定一个主机名或域名信息,将此信息填写为Kong所在的主机上的信息,Kong主机所能解析

示例:

curl  -i X POST --url http://localhost:8001/routes/ \
--data 'protocols[]=http&protocols[]=https' \
--data 'paths=/' \
--data 'service.id=0a81cdbd-3399-459c-bf09-9154971b3525'
--data 'hosts=test.com'

2)删除Route

curl  -i X DELETE --url http://localhost:8001/routes/{Route_ID}

Route_ID:指明要删除的RouteID信息

示例:

curl  -i X DELETE --url http://localhost:8001/routes/27bebac7-6a48-4a87-8eda-1f21f0584c23

访问测试查看:

curl test.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值