如何使用Docker Compose启动kong服务

Kong 的定义

Kong 是一个用于构建、部署和管理 API 的开源微服务 API 网关。它提供了许多功能,包括请求路由、访问控制、插件支持、负载均衡、认证和授权等。Kong 旨在简化 API 的管理和保护,并提供了一个可扩展的平台,适用于微服务架构。

Kong 特性

  1. API 管理: Kong 提供了一个集中化的 API 管理平台,让你能够轻松管理多个 API。它支持 API 注册、版本控制和发布。
  2. 请求路由: Kong 可以根据请求的路径、主机和其他条件将请求路由到相应的后端服务。这有助于构建灵活的 API 网关。
  3. 插件支持: Kong 的插件系统允许你轻松扩展其功能。它提供了许多内置插件,如认证、授权、日志记录等,同时你还可以开发自定义插件以满足特定需求。
  4. 负载均衡: Kong 可以将请求分发到多个后端服务,从而实现负载均衡。这有助于提高系统的可伸缩性和可用性。
  5. 安全性: Kong 提供了许多安全性功能,包括身份验证、访问控制、SSL/TLS 支持等,以确保 API 的安全性。
  6. 可扩展性: Kong 是一个高度可扩展的平台,支持插件和自定义扩展,以适应不同的业务需求。
  7. 开源和社区支持: Kong 是一个开源项目,具有庞大的社区支持。它的源代码可在 GitHub 上获得,并且有广泛的文档和社区讨论。

Kong Gateway 环境部署流程

一个生产环境的 kong gateway 最少包括以下三个部分:

数据存储、kong核心服务、可视化UI界面。

通常在服务器中手动部署或者Docker部署都需要按顺序安装和配置。

比如:

  1. 创建 kong 的net-work
  2. 安装 postgres 数据
  3. 配置 kong database 的信息
  4. 启动 kong 服务
  5. 配置 可视化UI界面 konga 的参数信息
  6. 启动 可视化UI界面 konga

一套下来需要很长的时间,而且容易出错。

为了解决以上问题,提高效率,我们可以通过 docker compose 将 以上内容进行编排处理,做到一行命令部署 kong 整体服务,简化多容器服务的维护和管理工作。

通过 Docker compose 创建 Kong 服务环境

创建 docker-compose.yml

yml 复制代码
version: '3'
services:
  kong-database:
    image:  postgres:9.6
    restart: always  #每次总是启动
    networks:
      - kong-net
    environment:
      POSTGRES_USER: kong
      POSTGRES_DB: kong
      POSTGRES_PASSWORD: kong
    ports:
      - "5432:5432"
    volumes:
      - /root/docker/kong/data:/var/lib/postgresql/data
  #######################
  # 执行数据库迁移
  ######################
  kong-migration:
    image: kong:2.8.1
    command: "kong migrations bootstrap"
    networks:
      - kong-net
    restart: on-failure
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_DATABASE=kong
      - KONG_PG_PASSWORD=kong
      - KONG_PG_HOST=kong-database
    links:
      - kong-database #连接的是kong-database服务的
    depends_on:
      - kong-database #依赖于kong-database服务

  #####################
  # kong gateway
  #####################
  kong:
    image: kong:2.8.1
    restart: always
    networks:
      - kong-net
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_PASSWORD: kong
      KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
      # KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443 重点:开启443用上面的代码,此行有问题
      KONG_ADMIN_LISTEN: 0.0.0.0:8001
    depends_on:
      - kong-migration
    links:
      - kong-database
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://kong:8001" ]
      interval: 5s
      timeout: 2s
      retries: 15
    ports:
      - "8001:8001"
      - "80:8000" # 对外暴漏端口
      - "443:8443" # 对外暴漏端口
      - "8444:8444"
  #######################
  #以下两个是konga  GUI
  #######################
  konga-prepare:
    image: pantsel/konga:0.14.9
    command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"  #注意是用户名:密码@数据库服务名称:端口
    networks:
      - kong-net
    restart: on-failure
    links:
      - kong-database
    depends_on:
      - kong        #依赖kong服务
      - kong-database #依赖kong-database服务

  konga:
    image: pantsel/konga:0.14.9
    restart: always
    networks:
      - kong-net
    environment:
      DB_ADAPTER: postgres
      DB_HOST: kong-database
      DB_USER: kong
      DB_DATABASE: konga
      DB_PASSWORD: kong #必须加上密码,不然会失败
    depends_on:
      - kong
      - kong-database
    ports:
      - "1337:1337"
networks:
  kong-net:
    driver: bridge

在文件目录下执行 docker compose up -d 部署 kong 服务环境

docker compose down 关闭并删除 kong 服务相关容器

踩过的一些坑

创建完成kong,重启后相关数据丢失,每次需要重新配置,很麻烦

解决方案:postgresql 本地数据持久化

通过 volume 技术将 postgresql 数据挂载到宿主机目录下,实现每次重启时与本地数据同步。

yml 复制代码
volumes:
      - /root/docker/kong/data:/var/lib/postgresql/data

volumes 挂载报错,导致启动失败

解决方案:挂载本地宿主机的路径需要授权 chmod -R 777 .

HTTPS 注册的问题

在 konga 可以导入 https 证书,但是网上的一些教程给的 docker-compose.yml 文件配置是

makefile 复制代码
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443

最目前版本中,这样配置是无效的。

需要改成本文 docker-compose.yml 中的配置

yml 复制代码
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl

KONG_PROXY_LISTEN_SSL 不再需要,把 ssl 的配置信息放在 KONG_PROXY_LISTEN 一行即可。

版本问题

之前,在网上搜到的 docker-compose.yml 中 kong konga 的版本号都是 latest。

最近,在一台新服务器上配置,发现报错了和 postgresql 的版本不匹配。

经过调试,将版本锁定到了本文 docker-compose.yml 的版本地址,不再使用 latest。

相关推荐
smchaopiao10 分钟前
如何用CSS和JS搞定全屏图片展示
前端·javascript·css
酉鬼女又兒17 分钟前
零基础快速入门前端CSS Transform 与动画核心知识点及蓝桥杯 Web 应用开发考点解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·css·职场和发展·蓝桥杯·html
山川行20 分钟前
Python快速闯关8:内置函数
java·开发语言·前端·笔记·python·学习·visual studio
春日见29 分钟前
GIT操作大全(个人开发与公司开发)
开发语言·驱动开发·git·matlab·docker·计算机外设·个人开发
Sarapines Programmer32 分钟前
【Docker】Windows 安装 Docker 简明指南
运维·docker·容器
徐小夕1 小时前
花了一周时间,我们开源了一款PDF编辑SDK,支持在线批注+脱敏
前端·vue.js·github
前端Hardy1 小时前
Qwik 2.0 Beta 来了:不靠 AI,只靠 Resumability,首屏交互快到离谱
前端·javascript·面试
1-1=01 小时前
ExtJS 快速入门—— 面板 详细版
前端·jquery
前端攻城狮Qwen1 小时前
Service Worker在电子菜单中的实际应用
前端
前端Hardy1 小时前
NW.js v0.109.1 最新稳定版发布:被遗忘的桌面开发神器?启动快 3 倍,内存省 70%!
前端·javascript·vue.js