kong的介绍与使用

本文档详述了Kong API Gateway的安装、配置、管理和使用,包括在Kubernetes、CentOS环境下部署,Kong监听端口,停止与重启操作,以及安装Kong Dashboard和Konga管理界面。Kong作为API网关,提供了负载均衡、插件扩展、身份验证等功能,适用于高并发场景。文中还介绍了Kong的集群搭建、插件使用、请求处理行为及配置参考,展示了如何处理HTTP、HTTPS流量,以及如何配置SSL和处理WebSocket流量。此外,还探讨了Kong的负载均衡策略和代理行为,以及通过不同插件进行流量控制和安全防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本说明

本次学习安装kong在2.1.4版本,konga版本0.14.9
此文档地址获取地址: https://gitee.com/PengFei-io/introduction-and-use-of-kong.git

一、简介

​ Kong是由Mashape公司开源的可扩展的Api GateWay项目。它运行在调用Api之前,以插件的扩展方式为Api提供了管理。比如,鉴权、限流、监控、健康检查等,Kong是基于lua语言、nginx以及openResty开发的,所有拥有动态路由、负载均衡、高可用、高性能、熔断(基于健康检查)等。Kong提供了许多开箱即用的插件,用户也可以自定义规则使用lua开发插件。

Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。Kong 有两个主要组件:

1、Kong Server :基于nginx的服务器,用来接收 API 请求。

2、Apache Cassandra or Postgresql:用来存储操作数据。

你可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。

对于开源社区来说,Kong 中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,而且Kong还有如下几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。

Kong可运行在某些 Linux 发行版、Mac OS X 和 Docker 中,无论是本地机还是云端服务器皆可运行。

除了免费的开源版本,Mashape 还提供了付费的企业版,其中包括技术支持、使用培训服务以及 API 分析插件。

OpenResty解决的是高并发的痛点。现在服务的后台大部分是java写的,但是用java写出稳定的高并发服务是很复杂的一件事,首先是服务器的选择,web服务器有几个选型,tomcat,apache,weblogic,还有商用webphere. 1、tomcat官方宣称的并发量是1000,厉害点的做点参数调优,也不过3000并发,如果要开发一个并发百万的服务,1000000/3000,需要1000台服务器,想想都不可能。 2、apache的并发比tomcat更不堪,200-300 3、weblogic的并发稍好,平均能达到3000左右,但是也没有达到好一个数量级

但是nginx就不一样了,处理几万的请求很轻松,内存占用也不高,之前我们只是把它用作负载均衡,没想过当做一个web服务器,OpenResty的出现解决了享受nginx高并发优势的拦路虎,因为nginx是使用异步 事件模型,跟传统的编程思想不一样,而lua是用c解释执行的脚本语言(执行效率很高),可以用传统的同步编程思想上,在nginx请求接进来后处理稍复杂的逻辑。

对于高并发的系统来说,都是基于内存的,或者说是基于缓存的,题主说的用mysql支撑高并发是不现实的,mysql的并发量在4000-8000,超过这个量mysql性能就会急剧下降。一次内存读取的时间是几十纳秒,一次缓存读取是几毫秒,大家可能对纳秒比较陌生,一纳秒等于1秒的1000000000分之一,一毫秒等于1秒的1000分之一,请求过来之后直接走内存读取,在需要和数据库交互的时候把数据写入内存,然后再批量入库,快速响应。

web流量也符合二八原则,百分之八十的流量集中在百分之二十的页面,比如电商的首页,产品详情页,使用openResty支撑产品详情页的高并发访问,在处理订购单,购物车等环节用其他的高并发框架处理,比如java的NIO网络框架netty。

java的netty也是处理高并发的利器,不过我做过测试,整体性能可以达到nginx的80%,所以,脏活累活都让nginx做吧,关键业务用netty。

当然,每个人对高并发的理解可能不太一样,有人说1000并发就是高并发了,有人说1万的并发才是高并发,有人说并发百万才是高并发,OpenResty是可以做到百万并发的(当然需要各种调优),现在大部分业务OpenResty都可以胜任,但是像腾讯10亿用户,1亿的并发,OpenResty就搞不定了。

不同的并发量要应对的东西不一样,比如1000并发,用tomcat,springmvc框架加缓存就可以应对,1万的并发在关键节点使用内存处理也很容易,百万并发就需要linux内核调优,socket缓冲区,文件句柄数,内存池,RPS/RFS SMP等优化也可以达到。千万并发就需要考虑用户态协议dpdk了

https://gitee.com/PengFei-io/pic_bed/raw/master/20210122/tsxAyRnuHFqG.png

二、使用k8s部署kong

  • 前置准备
1.k8s环境,Kong完全兼容k8s环境的部署与安装
2.使用相关资源清单进行部署
  • 使用以下三种方式安装Kong

1.资源清单部署,相关yaml文件 可在 https://gitee.com/PengFei-io/introduction-and-use-of-kong.git

中找到

2.Helm方式部署

$ helm repo add kong https://charts.konghq.com
$ helm repo update

# Helm 2
$ helm install kong/kong

# Helm 3
$ helm install kong/kong --generate-name --set ingressController.installCRDs=false

官网链接: https://charts.konghq.com/

3.Kustomize方式部署

kustomize build github.com/kong/kubernetes-ingress-controller/deploy/manifests/base

Kong for kubernetes官网地址:

https://docs.konghq.com/2.2.x/kong-for-kubernetes/using-kong-for-kubernetes/

三、Centos环境安装kong

推荐博客,安装的为1.0.2版本kong

https://www.cnblogs.com/langfanyun/p/10298491.html
  • 下载rpm安装包 ,这里以Centos7.0为例,rpm下载地址

    https://docs.konghq.com/install/centos/  或者
    https://bintray.com/kong/kong-rpm/centos/view/files/centos/7#files/centos/7
    
  • 安装

    如果已经下载了rpm安装包,则执行以下:

     $ sudo yum install   /path/to/package.rpm --nogpgcheck
    

​ 如果使用镜像库直接安装则执行:

 $ 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
  • 准备安装DB或者声明一个配置文件

    ​ kong 可以在有数据库的情况下进行运行,也可以无数据库独立运行,当你使用数据库时,您将使用 kong.conf 配置文件在启动时设置kong的配置属性,并将数据库设置为所有配置实体的存储,例如kong代理到的路由和服务。。如果不使用数据库进行独立运行时,您将使用 kong.conf 其配置属性和 kong.yml 文件将实体指定为声明性配置。

​ 1)使用数据库进行存储kong的信息,如果您使用的是 PostgreSQL,请预配数据库和用户:

  配置kong,以便它可以连接到您的数据库。kong支持 PostgreSQL 9.5+ 和 Cassandra 3.x.x 作为数据存储。
 create user kong with password '123456';
  CREATE DATABASE kong OWNER kong;

​ 2)无数据库下启动kong

如果要在无 DB 模式下运行kong,应首先生成声明性配置文件。以下命令将在当前文件夹中生成一个 kong.yml 文件。它包含有关如何填充它的说明。

$ kong config init

填充 kong.yml 文件后,编辑您的 kong.conf 文件。将数据库选项设置为关闭,declarative_config将选项设置为 kong.yml 文件的路径:
database = off
declarative_config = /path/to/kong.yml
  • 启动kong

    启动kong时,Nginx 主进程默认以root进程运行,工作进程作为kong运行。如果这不是所需的行为,您可以将 Nginx 主进程切换到在内置的 kong 用户或启动kong之前运行到自定义非root用户。有关详细信息,请参阅以非root用户运行孔。

$ kong start [-c /path/to/kong.conf]


- 校验是否启动成功

> curl -i http://localhost:8001/

***docker安装kong***

- 创建kong网络

```shell
$ docker network create kong-net
  • 初始化数据库

    $ docker run --rm \
    	--network=kong-net \
        -e "KONG_DATABASE=postgres" \
        -e "KONG_PG_HOST=192.168.220.128" \
        -e "KONG_PG_USER=kong" \
        -e "KONG_PG_PASSWORD=123456" \
         kong:2.1.4-centos kong migrations bootstrap
    
  • 启动容器

     docker run -d --name kong2.1.4 \
    	 --network=kong-net \
    	 -e "KONG_DATABASE=postgres" \
    	 -e "KONG_PG_HOST=192.168.220.128" \
    	 -e "KONG_PG_USER=kong" \
    	 -e "KONG_PG_PASSWORD=123456" \
    	 -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 \
    	 --restart always \
    	  kong:2.1.4-centos
    

四、Kong 监听的端口说明:

  • :8000 kong侦听来自客户端的传入 HTTP 流量,然后转发到您的上游服务。
  • :8443 kong侦听传入的 HTTPS 流量。此端口具有与":8000"端口类似的行为,只不过它仅需要 HTTPS 流量。可以通过配置文件禁用此端口。.
  • :8001 [管理员 API] 用于配置kong侦听。
  • :8444 管理员 API 侦听 HTTPS 流量。

五、停止与重启kong

$ kong stop
$ kong reload

重要: kong启动后外部主机无法访问8001管理端口

   问题的根本原因就是因为nginx监听的端口,kong默认将admin的管理端口只允许服务器本机访问,不允许给外部机器访问,这样`很安全`,但是一方面就会不方便,解决方案如下:

方案1)添加环境变量,因为Kong启动的时候会读取环境变量进行配置,这点在以下内容会介绍

export KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl

方案2)指定kong的启动文件,在启动文件中配置这个值
添加以下内容
admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl

六、安装Kong Dashboard管理界面 非推荐,功能简单

kong仪表板是一个 GUI,将允许您管理您的kong网关设置。以下是kong与kong Dashboard的版本匹配

Kong-Dashboard versions Kong versions Node versions
1.x.x >= 0.6, < 0.10
2.x.x 0.10
3.0.x >= 0.9, <0.12 >= 6.0.0
3.1.x, 3.2.x >= 0.9, <0.13 >= 6.0.0
3.3.x, 3.4.x >= 0.9, <0.14 >= 6.0.0
3.5.x >= 0.9, <0.15 >= 6.0.0
3.6.x >= 0.9, <2.0.0 >= 6.0.0
Using npm:
# Install Kong Dashboard
npm install -g kong-dashboard

# Start Kong Dashboard
kong-dashboard start --kong-url http://kong:8001

# Start Kong Dashboard on a custom port
kong-dashboard start \
  --kong-url http://kong:8001 \
  --port [port]

# Start Kong Dashboard with basic auth
kong-dashboard start \
  --kong-url http://kong:8001 \
  --basic-auth user1=password1 user2=password2

# See full list of start options
kong-dashboard start --help
Using Docker:
# Start Kong Dashboard
docker run --rm -p 8080:8080 pgbi/kong-dashboard start --kong-url http://kong:8001

# Start Kong Dashboard on a custom port
docker run --rm -p [port]:8080 pgbi/kong-dashboard start --kong-url http://kong:8001

# Start Kong Dashboard with basic auth
docker run --rm -p 8080:8080 pgbi/kong-dashboard start \
  --kong-url http://kong:8001
  --basic-auth user1=password1 user2=password2

# See full list of start options
docker run --rm -p 8080:8080 pgbi/kong-dashboard start --help

官方链接: https://github.com/PGBI/kong-dashboard

推荐博客:https://blog.csdn.net/xiaoliu598906167/article/details/85785420

七、安装 Konga管理界面 推荐使用,功能相对丰富

​ 由于konga管理工具有自己的用户信息,所以会创建相关的DB进行维护,为了统一kong的数据库,所以统一使用Postgresql进行存储,提前创建相关数据库以及用户信息:

create user konga with password 'konga123456';
CREATE DATABASE konga OWNER konga;
grant all privileges on database konga to konga;
Using docker:
  • 拉取镜像 版本不要拉取最新,以免不兼容kong
$ docker pull pantsel/konga:0.14.9
  • 启动容器
  $ docker run -d -p 1337:1337 -e "TOKEN_SECRET=699a85ee59a1" -e "DB_ADAPTER=postgres" -e "DB_HOST=192.168.220.128" -e "DB_PORT=5432" -e "DB_USER=konga" -e "DB_PASSWORD=konga123456" -e "DB_DATABASE=konga" -e "NODE_ENV=development" --name konga pantsel/konga:0.14.9

TOKEN_SECRET:是创建者随机生成即可

启动后浏览器访问:宿主机IP + 映射端口即可

八、使用案例

成熟的流程:

配置upstream -> 配置target -> 配置服务 -> 配置路由 -> 安装插件[可选]

1.使用管理API将你的服务添加到Kong:
$ curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=nginx-service-demo' \
  --data 'url=http://192.168.220.130:30001/'

client调用服务名称nginx-service-demo,访问http://192.168.220.130:30001地址

添加成功后,系统将返回如下信息:

HTTP/1.1 201 Created
Date: Tue, 19 Jan 2021 10:07:45 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/1.0.2
Content-Length: 268

 {
    "host":"192.168.220.130",
    "created_at":1611050865,
    "connect_timeout":60000,
    "id":"88563cdd-44c1-4c3b-abdd-89073b24f643",
    "protocol":"http",
    "name":"nginx-service-demo",
    "read_timeout":60000,
    "port":30001,
    "path":"/",
    "updated_at":1611050865,
    "retries"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值