kong(微服务网关的简单部署)(一)

1.简介

kong基于nginx和OpenResty,是一个具有分布式、高性能、高并发、可伸缩、可扩展、提供动态负载均衡、散列负载均衡、动态配置、服务注册、服务发现、服务熔断、健康检测、故障恢复、授权认证、速率限制、缓存处理、指标监控、日志收集、插件扩展、亚毫秒级延迟等特性和功能的微服务抽象层。
kong的内部设计为插拔体系结构,kong采用插件的方式统一收纳管理这些业务通用的功能,是它们之间边界清晰、彼此隔离、互不影响。其实和nginx是一类型的

  • 默认情况下kong监听的端口
  • 8000:监听来自客户端的HTTP请求流量,并将其路由转发给上游服务器
  • 8443:监听传入的HTTPS请求流量,并将其路由转发给上游服务器
  • 8001:监听来自Kong Admin API的HTTP请求流量
  • 8444:监听来自Kong Admin API的HTTPS请求流量

2.kong的安装部署

中文文档
官方文档

2.0 直接安装

[root@zhy ~]# yum install epel-release -y    
[root@zhy ~]# curl -Lo kong-2.0.0.amd64.rpm $( rpm --eval "https://download.konghq.com/gateway-2.x-centos-%{centos_ver}/Packages/k/kong-2.0.0.el%{centos_ver}.amd64.rpm")   ##下载kong安装包
[root@zhy ~]# yum install kong-2.0.0.amd64.rpm --nogpgcheck -y ##安装,关闭gpgcheck

2.1 使用yum仓库安装(下载最新版本)

 $ sudo yum update -y
 $ sudo yum install -y wget
 $ wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
 $ export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1`
 $ sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo
 $ sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
 $ sudo yum update -y
 $ sudo yum install -y kong  

2.2 docker安装kong

2.2.1 安装docker

2.2.2 安装kong

[root@zhy yum.repos.d]# docker pull kong:2.0
[root@zhy yum.repos.d]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
kong         2.0       fc5b7eb60cde   3 months ago   146MB

2.3 k8s安装

参考中文文档

3.kong数据库的配置

kong数据库支持PostgreSQL、Cassandra、DB-less(无数据库)三种安装模式。

3.1 PostgreSQL(实验所用数据库)

3.1.1 简介

  • PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。

  • PostgreSQL完全免费

  • Postgresql是个全栈数据库,功能强大,扩展性很强
    内部集成了一些功能(比如流复制主从备份,数据库备份还原等等一些功能),就算内部没有某些功
    能也可以通过安装插件或者集成第三方的软件进行实现(现在一些市面上常用的软件,有点
    名气的都提供了对Postgresql的支持,比如Redis,citus,MongoDB,等等一些软件。)

  • Postgresql是个多进程多线程数据库
    配置文件里面可以配置多线程并行查询(使用多个子进程进行重新)

  • Postgresql对ANSI SQL支持很友好
    在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨

  • 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨
    OLTP(联机事务处理)线上请求处理
    详细:
    强调支持短时间内大量并发的小型操作(增删改查)能力,
    每个查询涉及的数据量都很小(比如几十到几百字节)
    强调事务的强一致性(想想银行转账交易,容不得差错)
    举例:“双十一”期间,可能有几十万用户在同一秒内下订单。
    后台数据库要能够并发的、以近乎实时的速度处理这些订单请求
    (如果下了订单,十几分钟还没有反应,用户肯定要骂人了)
    OLAP(联机分析处理)后台数据分析处理
    详细:
    偏向于复杂的只读查询,读取海量数据进行分析计算,查询时间往往很长
    举例:“双十一”结束,淘宝的运营人员对订单进行分析挖掘,找出一些市场规律、
    分析刷单行为等等。这种分析可能需要读取所有的历史订单进行计算,
    耗时几十秒甚至几十分钟都有可能。

  • 支持所有主流的多表连接查询的方式(如: “Nest loop”、 “hashjoin” "sort merge join"等)
    支持绝大多数的SQL语法(如: with子句)

  • PostgresQL对正则表达式支持最强、内置函数也是最丰富的数据库。字段类型还支持数组类型
    数据类型支持比较丰富。PostgreSQL不仅支持复杂的SQL,还支持大量的分析函数,非常适合做数据仓库。

  • Postgresql移动数据很方便:能平滑迁移至同属Pg生态的GreenPlum,DeepGreen,HAWK
    数据库,数据库数据可以直接移动,只要是同生态圈的数据库可以直接移库

  • Postgresql内部功能处理的很好,性能优化工具度量信息很足。
    PostgresQL数据库中有大量的性能视图,可方便地定位问题(比如:可看到正在执行的SQL,
    可通过锁视图看到谁在等待、哪条记录被锁定等), PostgresQL中设计了专门的架构和进程
    用于收集性能数据,既有物理方面的统计,也有表扫描及素引扫描方面的性能数据。

3.1.2 安装

3.1.2.1 docker下安装
[root@zhy ~]# docker pull  postgres:9.6  ##拉取数据库镜像
[root@zhy ~]# mkdir -p /opt/postgres/data  ##创建数据存储目录
[root@zhy ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
postgres     9.6       5505f5c4eb7b   2 weeks ago    200MB
kong         2.0       fc5b7eb60cde   3 months ago   146MB
[root@zhy ~]# docker network create kong-net    ##创建网络
5cb9b7e248846c80e470588df53e810ffdeec8908f8d3d2077733e8e9a465c61
[root@zhy ~]# docker run -d --name kong-database --network=kong-net  -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_PASSWORD=kong" postgres:9.6
1996ddd4ff29f6b8d5b43edc575c32a5c73afee3b8936148f9c714a11c63b3af
[root@zhy ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                    NAMES
1996ddd4ff29   postgres:9.6   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:5432->5432/tcp   kong-database
[root@zhy ~]# docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
091c8d7b1f38   bridge     bridge    local
ab75e0153def   host       host      local
5cb9b7e24884   kong-net   bridge    local
13ee44bc7ee9   none       null      local

在这里插入图片描述

3.1.2.2 仓库安装

官网安装方法

# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql96-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
sudo systemctl enable postgresql-9.6
sudo systemctl start postgresql-9.6

在这里插入图片描述

3.1.3 准备数据库

#1.创建用户和数据库
[root@zhy ~]# sudo -s -u postgres   #创建一个名为 kong 的用户,并且创建一个名为 kong 的数据库。
psql
CREATE USER kong WITH PASSWORD 'kong'; 
CREATE DATABASE kong OWNER kong;
GRANT ALL PRIVILEGES ON DATABASE kong to kong;
#2.修改配置文件
#设置对外访问策略:
#vim /var/lib/pgsql/9.6(自己的版本号)/data/pg_hba.conf 
#或者
#vi /var/lib/pgsql/data/pg_hba.conf 
#在最后一行增加: host  all  all 0.0.0.0/0  md5
[root@zhy kong]# vim /var/lib/pgsql/9.6/data/pg_hba.conf 

#pgsql开启远程访问:
[root@zhy kong]# vim /var/lib/pgsql/9.6/data/postgresql.conf
#将 listen_address去掉注释并设置值为 '*' ,即:
#listen_addresses = '*'
[root@zhy kong]# systemctl restart postgresql-9.6.service 

3.2 Cassandra

3.2.1 简介

  • 其是一个开源的分布式NoSQL数据库系统,支持结构化数据、半结构化数据、非结构化数据存储,具有高可用、高性能、高可靠、可扩展、无单点以及支持多数据中心集群部署等优点,是目前流行的一种分布式数据存储方案。

3.2.2 安装(docker安装)

官网rpm安装方式

[root@zhy ~]# docker pull cassandra:3.11
[root@zhy ~]# mkdir -p /opt/cassandra/data 
[root@zhy ~]# docker run -d --name cassdra  --network=kong-net -p 9042:9042 -e CASSANDRA_BROADCAST_ADDRESS=47.116.106.14 cassandra:3.11
435e8ed120e1924525498bed4a84110852087025cf88d2249172ad45fe4f6722
[root@zhy ~]# docker ps 
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                       NAMES
435e8ed120e1   cassandra:3.11   "docker-entrypoint.s…"   5 seconds ago    Up 3 seconds    7000-7001/tcp, 7199/tcp, 9160/tcp, 0.0.0.0:9042->9042/tcp   cassdra
1996ddd4ff29   postgres:9.6     "docker-entrypoint.s…"   22 minutes ago   Up 22 minutes   0.0.0.0:5432->5432/tcp  kong-database

3.3 DB-less(无数据库模式)

3.3.1 简介

通过yaml或json文件直接进行声明式配置即可
优势:
减少过多依赖:所有配置都加载并存储在内存中,不需要数据库的安装和管理
适用于CI/CD场景,配置文件可以保存在Git存储仓库中,方便使用。

3.3.2 使用测试

yaml配置文件书写参考

[root@zhy ~]# docker network create kong-net  #创建网络
[root@zhy ~]# docker volume create kong-vol #创建volume
[root@zhy ~]# docker volume inspect kong-vol  #查看逻辑卷内容
[
    {
        "CreatedAt": "2021-08-06T15:42:14+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/kong-vol/_data",
        "Name": "kong-vol",
        "Options": {},
        "Scope": "local"
    }
]
[root@zhy ~]# vim /var/lib/docker/volumes/kong-vol/_data/kong.yaml
[root@zhy ~]# cat /var/lib/docker/volumes/kong-vol/_data/kong.yaml
_format_version: "1.1"   ##这一句是必须的
services:
- name: my-service
  url: https://example.com
  plugins:
  - name: key-auth
  routes:
  - name: my-route
    paths:
    - /

consumers:
- username: my-user
  keyauth_credentials:
  - key: my-key
[root@zhy ~]# docker run -d --name kong  --network=kong-net  -v "kong-vol:/usr/local/kong/declarative"  -e "KONG_DATABASE=off"  -e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml"  -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, 0.0.0.0:8444 ssl"  -p 8000:8000  -p 8443:8443  -p 8001:8001  -p 8444:8444  kong:2.0
2af2ea6d8988cf2329ac352a556cfc9a79cbf9fec7f2bb77b71f9a593a75e2bd
[root@zhy ~]# curl -i http://example.com   ##测试是否成功

在这里插入图片描述

4.启动Kong

4.1 docker下操作

##1.准备数据库
[root@zhy ~]# docker run --rm --network=kong-net  -e "KONG_LOG_LEVEL=debug" -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database"  -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database"  kong:2.0 kong migrations bootstrap

## 2.启动kong
[root@zhy ~]# docker run -d --name kong --network=kong-net  \
   -e "KONG_DATABASE=postgres" \      ##数据类型
   -e "KONG_PG_HOST=kong-database" \  ##数据库的ip地址
   -e "KONG_PG_PORT=5432" \           ##数据库的端口
   -e "KONG_PG_PASSWORD=kong"  \      ##数据库密码
   -e "KONG_PG_DATABASE=kong"  \      ##数据库名称可以不要
   -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 
   -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_LISTEN_SSL=0.0.0.0:8444" \
    -p 8000:8000 \                  ##容器代理端口到外部的映射
    -p 8443:8443 \                  ##容器SSL代理端口到外部的映射
    -p 8001:8001 \                  ##容器管理端口到外部的映射
    -p 8444:8444 \                  ##容器SSL管理端口到外部的映射
    kong:2.0 
29b204aa3b97b835f5bfc77824b1ab3e3796b2efce9762ce148ec272fc8f8598
[root@zhy ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                                                                NAMES
29b204aa3b97   kong:2.0       "/docker-entrypoint.…"   25 seconds ago      Up 4 seconds       0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp   kong
1996ddd4ff29   postgres:9.6   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:5432->5432/tcp   

##3.测试是否成功
[root@zhy ~]# curl -i http://localhost:8001/

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

在这里插入图片描述

4.2 通过rpm包(实验所用)

4.2.1 修改配置文件

[root@zhy kong]# cp /etc/kong/kong.conf.default /etc/kong/kong.conf   ##复制模板
[root@zhy kong]# vim /etc/kong/kong.conf
#------------------------------------------------------------------------------
# DATASTORE
#------------------------------------------------------------------------------
database = postgres             # Determines which of PostgreSQL or Cassandra
pg_host = 10.99.35.231           # Host of the Postgres server.
pg_port = 5432                  # Port of the Postgres server.
#pg_timeout = 5000               # Defines the timeout (in ms), for connecting,
                                 # reading and writing.
pg_user = kong                  # Postgres user.
pg_password = kong                 # Postgres user's password.
pg_database = kong              # The database name to connect to.

#------------------------------------------------------------------------------
# NGINX
#------------------------------------------------------------------------------
proxy_listen = 0.0.0.0:80 , 0.0.0.0:443 ssl  ##代理服务器端口调整成80和443,方便使用             
admin_listen = 0.0.0.0:8001, 127.0.0.1:8444  ssl  ##值改为0.0.0.0是因为后面需要通过此Admin API进行外部访问,而127.0.0.1只能访问本地

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

在这里插入图片描述

4.2.2 启动和停止

#1.启动
[root@opsys-vm12-231 kong]# kong migrations bootstrap -c /etc/kong/kong.conf   ##kong初始化数据库
[root@opsys-vm12-231 kong]# kong start -vv   ##启动kong,可以看详细信息
[root@opsys-vm12-231 kong]# curl http://10.99.35.231    ##测试是否成功
{"message":"no Route matched with those values"}
[root@opsys-vm12-231 kong]# kong health   #也可以检测是否启动成功
nginx.......running

Kong is healthy at /usr/local/kong
#2.停止
[root@opsys-vm12-231 kong]# kong quit -t 10   ##等待10s停止
[root@opsys-vm12-231 kong]# kong stop      ##直接停止


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

5.konga部署

  • konga是kong的一个可视化管理后台。
  • konga功能:
    管理Kong Admin API的所有对象
    支持多种数据源的导入(数据库、文件、API等)
    管理多个kong集群节点
    使用快照来备份还原和迁移kong节点
    根据健康检测监控节点和API状态
    电子邮件和异常的通知
    多个用户的登录和权限管理
    多种数据库的存储集成(如mysql、PostgreSQL、MongoDB)

5.1 源码安装

5.1.1 安装git和node.js

[root@zhy ~]# yum install git -y 
[root@zhy ~]# git --version   ##验证是否安装
[root@zhy ~]# curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash
[root@zhy ~]# yum install -y nodejs   ##安装nodejs
[root@zhy ~]# node -v    #检测是否安装成功

5.1.2 安装konga

[root@zhy ~]# git clone https://github.com/pantsel/konga.git   ##克隆konga 源代码
Cloning into 'konga'...
remote: Enumerating objects: 14392, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 14392 (delta 30), reused 0 (delta 0), pack-reused 14346
Receiving objects: 100% (14392/14392), 8.30 MiB | 866.00 KiB/s, done.
Resolving deltas: 100% (10458/10458), done.
[root@zhy ~]# cd konga/   ##进入konga 目录
[root@zhy konga]# npm i     ##安装konga,其中i是install的缩写

在这里插入图片描述

5.1.3 配置konga

[root@zhy konga]# pwd
/root/konga
[root@zhy konga]# cp .env_example .env   
[root@zhy konga]# vim .env  ##配置环境变量
[root@zhy konga]# cat .env
PORT=1337      ##端口
NODE_ENV=development    ##环境变量
KONGA_HOOK_TIMEOUT=120000   ##等待启动完成的时间(毫秒)
DB_ADAPTER=postgres     ##采用的数据库类型
DB_URI=postgresql://localhost:5432/konga   ##数据库连接字符串
KONGA_LOG_LEVEL=warn      ##日志的级别

5.1.4 启动konga

[root@zhy konga]# npm start   ##启动
> kongadmin@0.14.9 start /root/konga
> node --harmony app.js

Using postgres DB Adapter.
Failed to connect to DB { error: Ident authentication failed for user "root"
    at Connection.parseE (/root/konga/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:539:11)
    at Connection.parseMessage (/root/konga/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:366:17)
    at Socket.<anonymous> (/root/konga/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:105:22)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
  name: 'error',
  length: 97,
  severity: 'FATAL',
  code: '28000',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'auth.c',
  line: '308',
  routine: 'auth_failed' }

在这里插入图片描述

##如果是生产环境,需要完成数据库的迁移,即创建表到数据库
[root@zhy konga]# node ./bin/konga.js  prepare --adapter postgres --uri postgresql://localhost:5432/konga
[root@zhy konga]# npm run production

出错解决问题

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

在这里插入图片描述

5.1.5 界面展示

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值