安装单机kong
su - postgres
psql
CREATE USER kong; CREATE DATABASE kong OWNER kong;
alter user kong with encrypted password '123456';
grant all privileges on database kong to kong;
\q
安装kong
yum安装:
sudo yum install epel-release
sudo yum install kong-1.0.3.*.noarch.rpm --nogpgcheck
rpm离线安装:
rpm包下载地址: https://kong.bintray.com/kong-rpm/centos/7/
rpm -ivh kong.****.rpm
安装完成后修改配置文件:
配置文件在 /etc/kong/kong.default.conf
cp kong.default.conf kong.conf
配置完成后初始化kong的数据库:
kong migrations up
kong start 启动
kong stop
kong-dashboard3.6 只能支持到kong 的1.0.3
如果登录kong-dashboard页面后不能操作,左侧的导航栏也少,说明,kong-dashboard不支持你安装kong的版本。
1、git启用kong-dashboard
kong-dashboard start --kong-url http://192.168.8.60:8001 --basic-auth admin=admin
2、docker启动:
docker pull pgbi/kong-dashboard
docker run –rm -p 8080:8080 pgbi/kong-dashboard start –kong-url http://192.168.10.150:8001 –basic-auth admin=admin
推荐使用konga 因为konga可以查看target的健康状态,kong-dashboard不行。
安装konga:
转自:https://blog.csdn.net/a12345678n/article/details/88188753
前提需要安装nodejs、npm、git
git clone https://github.com/pantsel/konga.git
npm install konga
将 config下的local_example.js改名为local.js
修改local.js中数据库连接方式:postgres
修改config下的connection.js文件中的数据库连接信息
此时需要在postgres中创建konga数据库。将ssl禁用。
npm start 启动konga
如果出现空白页:停止konga,运行 npm run bower-deps
kong自身的负载均衡:
没有主从,设置多个node节点,链接一个数据库,外部使用Nginx做kong 的负载均衡
所有的配置信息都在数据库中,当运行中时读取的所有配置信息都在缓存中,需要配置一个db_update_frequency时间(多少秒后,拉取数据库配置信息到缓存中,单位s),如果链接的数据库是集群,数据库集群间数据同步需要时间,未确保kong节点每次在数据库拉取数据时的数据都是最新的,需要配置一个拉取等待时间db_update_propagation,每次拉取数据库数据时都等待db_update_propagation秒,之后在拉取。所以kong集群node的实际缓存数据更新时间间隔为(db_update_frequency+db_update_propagation)
kong各个组件的关系:
Route:路由配置,用于匹配路由,分发请求到Service,每个Route指定到一个Service,每个Service可以有多个Route
Service:上游服务,可以时一个具体的API(指向ip),也可以时API的负载均衡(指向upstream)
Upstream:专门用来做负载均衡,Upstream的name 可以代替Service中的Host,Upstream是多个Target的集合
Target:单个API,负载均衡的最小单位
Consumer:可以代表一个服务,可以代表一个用户,可以代表一个消费者
Plugin:插件,可以和Service绑定,可以和Route绑定,可以和Consumer绑定,也可以绑定全局
Route >> Service >> Upstream >> Target
插件使用详解https://blog.csdn.net/mx472756841/article/details/80527462
使用kong做负载均衡:
1、
配置一个Upstream:
默认被动安全检查和主动安全检查都是关闭的
需要设置 healthchecks.passive.*设置被动安全检查
需要设置 healthchecks.active.*设置主动安全检查
healthchecks.active.healthy.interval = 0(健康节点安全检查间隔时间) 、healthchecks.active.unhealthy.interval = 0(不健康节点安全检查间隔时间)代表关闭主动安全检查
2、
为Upstream配置多个Target
curl -i -X POST \
--url http://localhost:8001/upstreams/9ee28b3d-4c83-4046-953c-ac571f1b2acf/targets \
--data 'target=147.94.209.20:7110'
curl -i -X POST \
--url http://localhost:8001/upstreams/9ee28b3d-4c83-4046-953c-ac571f1b2acf/targets \
--data 'target=147.94.209.20:7111'
3、
添加Service
注意 connect_timeout、 write_timeout、 read_timeout一定不能设置为0否则请求到不了upstream
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name= user-service' \
--data 'protocol=http' \
--data 'host= wechat.user.service'
4、
为Service添加Route
strip_path参数默认时true--省略匹配到的path路径(true:route的path:/hello ,请求时:ip:80/hello/hello1 到达upstream时就变成了 ip:80/hello1)
curl -i -X POST \
--url http://localhost:8001/routes/ \
--data 'protocols[]=http' \
--data 'protocols[]=https' \
--data 'methods[]=GET' \
--data 'methods[]=POST' \
--data 'hosts[]=api.example.com' \
--data 'paths[]=/foo' \
--data 'service.id=78adee90-dc14-418d-940c-590bc385212e'