Kong环境搭建(一)

1、简介

Kong是一个云原生、快速、可扩展的一个分布式微服务抽象层(API网关).
Kong是一个运行在Nginx中的Lua应用程序,由Lua - Nginx模块实现。Kong与OpenResty一起发布,而不是使用这个模块编译Nginx, OpenResty已经包含了lua- Nginx模块。OpenResty不是Nginx的分支,而是扩展其功能的一组模块。


1.1 特性

  • 云原生:平台无关,kong可以从裸机迁移到kubernetes中.
  • 动态负载均衡:跨多个上游服务的负载平衡流量.
  • Hash-based负载均衡:使用一致的散列/粘性会话实现负载平衡.
  • 熔断:智能的非健康上游服务检查.
  • 健康检查:提供active和passive两种方式对上游服务进行监控.
  • OAuth2.0:方便集成OAuth2.0的认证.
  • 认证:支持HMAC, JWT, Basic等.
  • 限流:基于许多变量阻塞和限制请求.
  • 插件:通过添加插件的方式对Kong的功能进行扩展
    更多个特性请查看GitHub上的说明,https://github.com/Kong/kong

1.2 安装

Kong可以通过Dockers、kubernetes、安装包、源码等方式进行安装,这里我们主要采用Docker进行安装配置。所以事先请自行安装Docker环境,具体可参照Docker官网说明:https://docs.docker.com/install/linux/docker-ce/centos/.

  1. 创建网络
    在Docker中可以创建独立的网络,从而实现各个服务的隔离,相互之间互不影响.
docker network create kong-net
  1. 创建数据库
    Kong提供了Cassandra和PostgreSQL两种类型的数据库支持,其主要用于存储services、routes、plugins等信息。这里采用PostgreSQL.
docker run -d --name kong-database \
               --network=kong-net \
               -p 5432:5432 \
               -e "POSTGRES_USER=kong" \
               -e "POSTGRES_DB=kong" \
               postgres:9.6
  1. 初始化数据库表
docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     kong:latest kong migrations bootstrap
  1. 启动Kong
docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -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
  1. 访问
 curl -i http://localhost:8001/

2、使用

Kong对外提供了两种端口,一种是Admin Api提供RestFul接口用于管理Services、routes、plugins等配置信息,一种是前端代理的接口。如上面配置的8001和8444、8000和8443分别对应Admin Api和Proxy Request使用的端口。

2.1 组件

  1. service:表示后端的服务
  2. route:定义路由规则,和后端服务的映射关系
  3. plugin:插件,如可以给后端的服务添加认证插件,只有携带有认证信息的consumer才能访问后端的服务
  4. consumer:标识使用后端服务的消费者,与使用您的服务的个人相关联,可以用于跟踪、访问管理等。

2.2 注册服务

这里使用Mockbin API进行测试,他是一个"echo"类型的公共站点,将返回和请求一致的响应。

  1. 添加服务
curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=example-service' \    # 设置服务名称
  --data 'url=http://mockbin.org'         # 设置服务对应的url地址
  1. 添加路由
curl -i -X POST \
  --url http://localhost:8001/services/example-service/routes \
  --data 'hosts[]=example.com'      # 配置按请求头信息进行转发
  1. 测试转发
curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: example.com'

2.3 添加插件

key-auth插件用于处理认证,表示只有携带的有正确的key的请求才会被代理到后端的service,否则将被kong拒绝

  1. 添加插件
curl -i -X POST \
  --url http://localhost:8001/services/example-service/plugins/ \
  --data 'name=key-auth'
  1. 测试
curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: example.com'

报错提示:在请求中没有找到key。


2.4 添加consumer

  1. 添加consumer
curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data "username=Jason"    # consumer的名称
  1. 颁发key凭证
curl -i -X POST \
  --url http://localhost:8001/consumers/Jason/key-auth/ \
  --data 'key=ENTER_KEY_HERE'     # 配置key的值
  1. 测试
curl -i -X GET \
  --url http://localhost:8000 \
  --header "Host: example.com" \
  --header "apikey: ENTER_KEY_HERE"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容