`

kong 实战

阅读更多

        

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

  • Kong Server :基于nginx的服务器,用来接收API请求。
  • Apache Cassandra :用来存储操作数据。

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

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

全部的功能是要收费的! 一张图说明使用Kong-API网关前后的效果:


Paste_Image.png

brew安装kong


brew tap mashape/kong
brew install kong

5分钟体验


基本操作

启动kong

kong start  -c <path_to_config>

检查kong是不是正常启动了

正常启动会输出:[OK] Started,kong会监听两个端口:

  • 8000: API请求的代理层。
  • 8001: restful的配置管理API。

停止kong

kong stop

重新加载kong

kong reload

添加API

通过RESTful API添加你的API

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=mockbin' \
  --data 'upstream_url=http://mockbin.com/' \
  --data 'request_host=mockbin.com'

检查API是不是已经被加如了:

HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive

{
  "request_host": "mockbin.com",
  "upstream_url": "http://mockbin.com/",
  "id": "2eec1cb2-7093-411a-c14e-42e67142d2c4",
  "created_at": 1428456369000,
  "name": "mockbin"
}

发起一个请求

curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: mockbin.com'

启动插件


通过API配置插件

下面增加一个key-auth插件

curl -i -X POST \
  --url http://localhost:8001/apis/mockbin/plugins/ \
  --data 'name=key-auth'

检查API是否已经被配置了

curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: mockbin.com'

# 返回错误,应该key-auth要求提供apikey头和其他参数

HTTP/1.1 403 Forbidden
...

{
  "message": "Your authentication credentials are invalid"
}

增加用户


用户可以被单独管理,以及控制他们对API的访问。

新建一个用户

$ curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data "username=Jason"  \
  --data "custom_id=13"

HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive

{
  "username": "Jason",
  "created_at": 1428555626000,
  "id": "bbdf1c48-19dc-4ab7-cae0-ff4f59d87dc9"
}

为用户创建秘钥

$ curl -i -X POST \
  --url http://localhost:8001/consumers/Jason/key-auth/ \
  --data 'key=ENTER_KEY_HERE'

{
    "consumer_id": "876bf719-8f18-4ce5-cc9f-5b5af6c36007",
    "created_at": 1443371053000,
    "id": "62a7d3b7-b995-49f9-c9c8-bac4d781fb59",
    "key": "62eb165c070a41d5c1b58d9d3d725ca1"
}

如果不指定key参数,kong会为你生成一个,推荐不指定。

检查用户凭证是否有效

curl -i -X GET \
  --url http://localhost:8000 \
  --header "Host: mockbin.com" \
  --header "apikey: ENTER_KEY_HERE"

使用API key

# 参数
curl http://kong:8000/{api path}?apikey=<some_key>

# headers
curl http://kong:8000/{api path} -H 'apikey: <some_key>'

上游HTTP头。

当一个客户端被验证通过后,这个插件会附加一些参数到请求中,可以用来完成你自己的逻辑。

  • X-Consumer-ID, the ID of the Consumer on Kong
  • X-Consumer-Custom-ID, the custom_id of the Consumer (if set)
  • X-Consumer-Username, the username of the Consumer (if set)

kong如何和consul搭配使用

github-Example with consul.io

很多项目用consul做服务发现,consul支持dns做服务发现,所以直接将kong的dns服务器地址配置成consul就可以了。

dns_resolver: server
dns_resolvers_available:
  server:
    address: "192.168.9.31:8600"

问题:kong是否可以配置2-3个dns服务器,然后自己负载均衡。

目前不能,kong只能接受1个dns地址,需要用户自己在consul前面搭建一个load balancer,然后在kong中配置这个lb的地址。

问题:kong不支持consul

kong使用普通dns查询,不支持SRV查询,但是Consul的服务发现只支持SRV查询。
kong会在0.9.0加入支持.

 

分享到:
评论

相关推荐

    API网关Kong实战(水印).pdf

    Kong是一个高可用、易扩展的API网关项目,其核心基于OpenResty构建,利用了Nginx的高性能和Lua语言的灵活性。Kong的设计允许它轻松应对大量网络请求,并且可以水平扩展,实现多个Kong服务器的集群部署。它通过负载...

    Kong入门指南.pdf

    Kong是一个专门用于微服务架构的开源API网关,它以轻量级、高性能和可扩展性著称。API网关作为微服务架构中的重要组件,负责处理外部请求并将其适配到后端的微服务上。Kong支持多种插件,这些插件可以实现访问控制、...

    KONG OPENRESTY.pdf

    Kong OPENRESTY Kong 是一个开源的 API 管理层,用于保护、管理和扩展 API 和微服务。它提供了一种灵活的方式来管理 API 流量、身份验证、速率限制、分析和插件等功能。 API Gateway 模式是微服务架构中的一种常见...

    Kong入门指南.zip

    Kong是开源的企业级API网关,它提供了一种在微服务架构中管理和保护API的方式。这个"Kong入门指南.zip"文件包含了一份PDF文档,帮助初学者了解并掌握Kong的基本概念、安装与配置,以及如何利用其特性来构建安全、可...

    Ex3-Godzilla vs Kong_king_C++_

    《哥斯拉大战金刚:C++编程实战》 在标题"Ex3-Godzilla vs Kong_king_C++_"中,我们可以推断这是一个关于C++编程的练习项目,它以电影中的经典对决——哥斯拉(Godzilla)与金刚(Kong)为主题。这可能是一个趣味性...

    边缘计算 edgexfoundry 实战与源码剖析 之 安全模块

    掌握edgexfoundry go语言版本 管理模块运行制理与源码解读,包括jwt 与 oauth2 两种安全模式。 vault kong 实战 docker 镜像制作

    Java分布式架构设计实战视频课程(2022最新版,13章全)

    Java分布式架构设计实战课程是2022年最新的学习资源,涵盖了从基础到高级的全方位内容,旨在帮助开发者深入理解并掌握Java在分布式系统中的应用。这套课程共有13个章节,每个章节都针对特定的分布式架构技术或概念...

    微服务气相实战源码.zip

    在"微服务气相实战源码.zip"这个压缩包中,我们可以期待找到一系列与微服务相关的编程源代码。这些源码可能是用于实现微服务架构中的不同组件,包括服务发现、负载均衡、API网关、配置管理、数据库访问层以及业务...

    1-4+DataVisor风控架构设计&OpenResty实战.pdf

    OpenResty的优势在于其开发速度快、运行性能高、支持动态加载脚本、资源占用少,并且没有Stop-the-World (STW)现象,因此在业界常被用来作为流量接入网关,如K8S Ingress和知名的API网关Kong、APISIX等都是基于...

    微服务架构设计与实战.docx

    微服务架构设计与实战是当前IT领域中的热门话题,它是一种新型的应用开发和部署模式,旨在提高系统的可扩展性、可维护性和敏捷性。微服务架构通过将单一应用程序拆分为一组小型、独立的服务来实现这一目标,每个服务...

    service mesh 学习实践笔记.zip

    08 | 微服务网关(Kong):网关在微服务架构中的作用 09 | 配置中心:如何在微服务治理中发挥更大的作用? 10 | 可观测性之 Trace:更快速定位问题 11 | 可观测性之监控告警:利用 Prometheus 和 Grafana 收集监控...

    Learning-OpenCV-4-Computer-Vision-with-Python-Third-Edition:Packt发行的《使用Python 3学习OpenCV 4计算机视觉》第三版

    使用Python 3学习OpenCV 4计算机视觉-第三版 这是Packt发行的的代码库。...并对面Kong的性别和年龄进行分类构建增强现实应用程序以跟踪3D图像使用机器学习模型,包括SVM,人工神经网络(ANN)和深度神经网络(DNN)

    stargan-v2:StarGAN v2-官方PyTorch实施(CVPR 2020)

    在CelebA-HQ和新的动物面Kong数据集(AFHQ)上进行的实验验证了我们在视觉质量,多样性和可伸缩性方面的优越性。 为了更好地评估图像到图像的翻译模型,我们发布了AFHQ,具有较大域间和域内差异的高质量动物脸。 ...

    Openstack学习资料链接总结-这些链接都不收藏还怎么学ops

    2. **孔令贤**(http://blog.csdn.net/lynn_kong):华为公司的工程师,他在博客中分享了他在OpenStack项目中的实践和理解,对于了解OpenStack在企业环境中的应用非常有帮助。 3. **liujunwei1234**...

    使用机器学习和深度学习对城市声音进行分类:体验两种技术(ML 和 DL)对音频数据(城市声音)进行分类-matlab开发

    =4s),它们是: 冷气机汽车喇叭孩子们玩耍狗皮钻Kong发动机怠速枪声手提钻警笛街头音乐 随附的元数据包含每个声音摘录的唯一 ID 及其给定的类名。 此数据集的示例包含在随附的 git 存储库中,完整数据集可从此处...

    gitbooks

    作者由零基础慢慢深入,由浅入深,逐步掌握Java知识生态圈,帮助Javaava初学者和爱好者,预测帮助读者掌握Java基础知识,了解开发技巧并积累一定的项目实战经验。为什么要写这样一本书荀子曰:“不闻不若闻之,闻之...

    枣阳市2017年中考适应性考试英语试题(含听力)精选.doc

    总的来说,这份试题反映了中考英语听力测试的基本要求和格式,为学生提供了实战演练的机会,同时也是教师评估学生听力水平和教学效果的重要工具。通过这样的练习,学生能更好地适应中考的听力部分,提高整体英语成绩...

    乐高机器人实验室建设方案.pdf

    9. 地区和学校资源:文中出现了CCCRotarySecondarySchool,HongKong的提及,表明实验室的建设可能与香港的某所中学(罗德岛中学)有关联,这反映了乐高机器人实验室可能与特定的教育机构合作,或者是在该学校建立的...

    FreeBSD.Device.Drivers.2012

    本书《FreeBSD Device Drivers》由Joseph Kong编写,为开发者提供了全面且深入的FreeBSD设备驱动程序开发指导。无论你是初学者还是有经验的开发者,都能从中获得宝贵的见解和技术知识。通过学习这本书,你将能够有效...

    Estudos-Python

    描述中的“气Kong”可能是由于输入错误,我们暂且忽略,因为这并没有提供具体的信息。 标签“Python”确认了这个压缩包与Python编程语言相关,可能包含了代码示例、学习笔记、实战项目或者教程文档。由于没有更具体...

Global site tag (gtag.js) - Google Analytics