C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 架构基础

    • 发展历程
    • 服务演化
    • ORM框架
    • RPC框架
  • 分布式系统

    • 分布式系统 - 基础
    • 分布式系统 - 设计
    • 分布式系统 - 缓存
    • 分布式系统 - 通信方式
    • 分布式系统 - 一致性
    • 分布式系统 - 锁
    • 分布式系统 - 解决高并发、高性能、高可用
  • 微服务

    • 微服务 - 简介
    • 微服务 - 学习路线
    • 微服务 - 服务网关
    • 微服务 - 通信方式
    • 微服务 - 消息队列
    • 微服务 - 保护
    • 微服务 - 分布式搜索
    • 微服务 - 分布式事务
    • 微服务 - 多级缓存
    • 微服务 - 幂等性设计
  • 中间件

    • 消息队列 - ZeroMQ

      • ZeroMQ - 经典例子
      • ZeroMQ - 基础
      • ZeroMQ - 进阶
      • ZeroMQ - 高级请求-应答模式
    • RPC调用 - Dubbo

      • Dubbo - 框架学习
    • 配置中心 - Consul

      • Consul - 概述
      • Consul - 学习内容
      • Consul - 安装与使用
      • Consul - 服务健康检查
      • Consul - 常用的API
      • Consul - 存储个K/V
    • 配置中心 - Apollo

      • Apollo - 概述
      • Apollo - 设计
      • Apollo - Docker部署
      • Apollo - 使用配置中心
    • 监控平台 - Cat

      • Cat - 概述
      • Cat - Docker快速部署
      • Cat - C++客户端的docker镜像
    • 数据处理管道 - Logstash

      • Logstash - Elastic 总览
      • Logstash - 工作原理
      • Logstash - docker部署
      • Logstash - 实践
    • 服务网关 - Kong

      • Kong - 概述
      • Kong - Docker快速部署
      • Kong - C++客户端的docker镜像

Kong - 安装与使用

  • 动态负载均衡实现

Kong的安装过程

1 . 创建docker 虚拟网络

docker network create kong-net

2.运行postgresql 的数据库

docker run -d --name kong-database \
               --network=kong-net \
               -p 5432:5432 \
               -e "POSTGRES_USER=kong" \
               -e "POSTGRES_DB=kong" \
               -e "POSTGRES_PASSWORD=kong" \
               postgres:9.6

3 . 初始化数据库(迁移数据)

docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_USER=kong" \
     -e "KONG_PG_PASSWORD=kong" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     kong:latest kong migrations bootstrap

4 . 运行kong

docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_PG_USER=kong" \
     -e "KONG_PG_PASSWORD=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, 0.0.0.0:8444 ssl" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 8001:8001 \
     -p 8444:8444 \
     kong:latest

Kong 默认监听的端口

  • 8000 : 监听来自客户端的HTTP 流量,转发到你的 upstream 服务上
  • 8443 : 监听HTTPS的流量,功能跟 8000一样,可以通过配置文件禁止。
  • 8001 : kong的HTTP监听的 admin api 管理接口
  • 8444 : kong的HTTPS监听的 admin api 管理接口

5 . 验证是否安装成功

curl -i http://localhost:8001/

返回下面内容,表示安装成功,可以正常使用:

[root@iZuf61kbf845xt6tz10abgZ ~]# curl -i http://localhost:8001/
HTTP/1.1 200 OK
Date: Mon, 28 Mar 2022 23:06:40 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Length: 11040
X-Kong-Admin-Latency: 1
Server: kong/2.8.0

安装 kong 管理UI

konga带来的一个最大的便利就是可以很好地通过UI观察到现在kong的所有的配置,并且可以对于管理kong节点情况进行查看、监控和预警,konga主要特性如下:

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

Konga支持PostgreSQL数据库,定义挂载卷konga-postgresql

docker volume create konga-postgresql

创建konga的数据库:

docker run -d --name konga-database \
               --network=kong-net \
               -v konga-postgresql:/var/lib/postgresql/data \
               -p 5433:5432 \
               -e "POSTGRES_USER=konga" \
               -e "POSTGRES_DB=konga" \
               -e "POSTGRES_PASSWORD=konga" \
               postgres:9.6

初始化数据库:

docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@139.196.82.84:5433/konga

启动konga:

docker run -p 1337:1337 \
             --network=kong-net \
             -e "DB_ADAPTER=postgres" \
             -e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
             -e "NODE_ENV=production" \
             -e "DB_PASSWORD=konga" \
             --name konga \
             pantsel/konga

创建konga和kong的连接关系

1.创建账号,并登陆:

konga登陆

2.对应konga数据库也能看到对应记录

konga数据库记录

3.konga创建与kong的连接:

konga创建连接

Kong的快速使用

动态负载均衡实现

典型的nginx的配置文件

upstream demoupstream {
        server localhost:9950 weight=100;
}
server {
        listen 8000;
        location /demo {
                proxy_pass http://demoupstream;
        }
}

上面的简单Nginx配置,可以转为如下kong 配置

1 . 配置 Upstream

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

2 . 配置 target

curl -X POST http://localhost:8001/upstreams/demoupstream/targets --data "target=139.196.82.84:9950" --data "weight=100"
curl -X POST http://localhost:8001/upstreams/demoupstream/targets --data "target=139.196.82.84:4300" --data "weight=100"

3 . 配置 service

curl -X POST http://localhost:8001/services --data "name=demo" --data "host=demoupstream" --data "path=/"

4 . 配置 route

curl -X POST http://localhost:8001/services/demo/routes --data "name=demoroute" --data "paths[]=/demo"

5 . 验证

curl -i http://localhost:8000/demo

输出结果:

[root@iZuf61kbf845xt6tz10abgZ ~]# curl -i http://localhost:8000/demo
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 31
Connection: keep-alive
Access-Control-Allow-Origin: *
X-Kong-Upstream-Latency: 5
X-Kong-Proxy-Latency: 1
Via: kong/2.8.0

{"method":"get","recvInfo":""}

postman验证1:

postman验证1

postman验证2:

特别注意:curl -X POST http://localhost:8001/services --data "name=demo" --data "host=demoupstream" --data "path=/"

对应konga的默认配置

Path	/
The path to be used in requests to the upstream server. Empty by default.

postman验证2

postman验证3:

postman验证3

Last Updated:
Contributors: klc407073648
Prev
Kong - Docker快速部署