概述
微服务实践的第二个要害组件,微服务API网关规划,API网关是对微服务做一致的鉴权、限流、是非名单、负载均衡等功用完成,这篇咱们先来介绍Api网关的含义和装置kong/konga需求的组件。
网关的效果和含义
网关能够使得服务本身更专心自己的领域,对服务供给者和服务调用着做了隔离。
- 集合多个Api,一致Api入口
- 防止内部信息泄露
- 供给安全验证
- 支持混合的通讯协议(Http/Rpc)
- 降低微服务的复杂度
缺陷:
- 集合增加额外的办理和维护本钱
- 防止开发时需遵从网关的路由规则
- 简单引发毛病
干流网关对比
- Nginx : Nginx 作为网关有天然的优势,高性能,反向署理等功用
- Zuul:
- Kong: 专心于微服务Api网关的渠道
Kong 完成原理
-
Kong是微服务中的一个网关组件,它具有高可用和可扩展性,能供给于运用的RestFul Api来操作和装备Api办理体系,同时它能够通过负载均衡的功用把恳求均匀分发到各个服务器上,应对很多的恳求。
-
Kong是公司开发的Api网关和Api服务办理层,它基于Nginx和OpenResty,是一个具有分布式、高性能、高并发、可弹性,亚毫秒级延迟等特性和功用的微服务抽象层。
Konga
Kong的UI办理界面,以插件的方法Konga,Konga的特点:
- 多用户办理,办理多个kong节点
- 运用快照备份,还原和搬迁Kong节点
- 运用运行状况查看监控节点和Api状况
- 轻松的数据库集成postgresSQl
Kong 要害概念
- Upstream : Upstream表明虚拟的主机名,可用于通过多个服务对传入恳求进行负载均衡,和Nginx的Upstream概念是对应的。
- Target : 方针的IP地址和主机,其端口表明后端服务的实例,能够有多个Target,而且能够动态的添加Target。
- Service : 指的是上游的后端服务,对应Nginx Upstream 装备的后端服务。
- Route :对应Nginx Location 。
- Consumer : 表明服务的运用者或者是用户
- Plugin : Kong 能够通过AdminApi装备大局和特定的路由和服务的插件,通过在署理转发不同生命周期和节点上嵌入事务逻辑完成。
装置
这3个镜像的版别必须匹配,否则初始化kong、konga数据时会出现各种问题。
docker pull postgres:9.6-bullseye
docker pull kong/kong-gateway:2.4.1.0-alpine
docker pull pantsel/konga:0.14.9
创建网络,把一切的依靠都放到一个network
中。
docker network create gateway_net
1. 装置postgres,kong依靠于postgres:
docker run -d --network=gateway_net --name postgres \
-p 5432:5432 \
-e "POSTGRES_USER=你的数据库用户名" \
-e "POSTGRES_DB=你的数据库名" \
-e "POSTGRES_PASSWORD=你的数据库密码" \
postgres:9.6-bullseye
2.初始化kong数据表信息:
docker run --rm --network=gateway_net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=postgres" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PASSWORD=kong" \
kong/kong-gateway:2.4.1.0-alpine kong migrations bootstrap
3.发动kong,kong有5个端口需求对外露出:
- 8000:对应的http恳求署理端口,后边装备署理时,需求用到它,这里对外露出端口改成了9000
- 8001: http接口的办理端口
- 8443: 对应的https恳求的署理端口
- 8444: https接口的办理端口
- 8002: 对api做了一些数据分析
docker run -d --name kong-ee --network=gateway_net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=postgres" \
-e "KONG_PG_PASSWORD=kong" \
-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_GUI_URL=http://127.0.0.1:9002" \
-p 9000:8000 \
-p 9443:8443 \
-p 9001:8001 \
-p 9444:8444 \
-p 9002:8002 \
kong/kong-gateway:2.4.1.0-alpine
kong发动之后,能够在浏览器输入:http://127.0.0.1:9002/overview,能够通过这个链接,查看kong是否装置成功.
** 4.初始化konga数据信息**
docker run --rm --network=gateway_net \
pantsel/konga:latest -c prepare -a postgres -u \
postgresql://kong:kong@postgres:5432/kong
5.发动konga
docker run -d -p 1337:1337 --network gateway_net --name konga \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:kong@postgres:5432/kong" \
-e "DB_PASSWORD=kong" \
-e "NODE_ENV=production" \
pantsel/konga:0.14.9
kong 和 konga 、postgres就装置成功了。