首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >微服务 - kong安装,API网关设计(原理篇)

微服务 - kong安装,API网关设计(原理篇)

原创
作者头像
stark张宇
发布2023-04-26 15:28:48
发布2023-04-26 15:28:48
1.1K0
举报
文章被收录于专栏:stark张宇stark张宇

概述

微服务实践的第二个关键组件,微服务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数据时会出现各种问题。

代码语言:txt
复制
docker pull postgres:9.6-bullseye
docker pull kong/kong-gateway:2.4.1.0-alpine
docker pull pantsel/konga:0.14.9

创建网络,把所有的依赖都放到一个network中。

代码语言:txt
复制
docker network create gateway_net

1. 安装postgres,kong依赖于postgres:

代码语言:txt
复制
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数据表信息:

代码语言:txt
复制
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做了一些数据分析
代码语言:txt
复制
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数据信息

代码语言:txt
复制

docker run --rm --network=gateway_net \

pantsel/konga:latest -c prepare -a postgres -u \

postgresql://kong:kong@postgres:5432/kong

代码语言:txt
复制

5.启动konga

代码语言:txt
复制

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

代码语言:txt
复制

kong 和 konga 、postgres就安装成功了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 网关的作用和意义
  • 主流网关对比
  • Kong 实现原理
    • Konga
    • Kong 关键概念
  • 安装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档