1.简介
Nginx凭借优异的性能和简化的配置文件成为占有率最高的 web 服务器,OpenResty 在 Nginx 的基础上适配了 lua 语言使其具备了更好的扩展能力拥有了更多的想像空间,大大降低了后端代码的开发难度。
Kong网关更进一步,提供更成熟的插件和开发的接口机制,更适合微服务环境。通过Konga 的图形界面实现对Kong 网关的配置操作最终实现对Nginx 的替换,实现图形化的管理操作,降低运维操作难度
Kong 的插件机制是其高可扩展性的根源,Kong 可以很方便地为路由和服务提供各种插件,网关所需要的基本特性,Kong 都如数支持:
- 云原生: 与平台无关,Kong可以从裸机运行到Kubernetes
- 动态路由: Kong 的背后是 OpenResty+Lua,所以从 OpenResty 继承了动态路由的特性
- 熔断
- 健康检查
- 日志: 可以记录通过 Kong 的 HTTP,TCP,UDP 请求和响应。
- 鉴权: 权限控制,IP 黑白名单,同样是 OpenResty 的特性
- SSL: Setup a Specific SSL Certificate for an underlying service or API
- 监控: Kong 提供了实时监控插件
- 认证: 如数支持 HMAC, JWT, Basic, OAuth2.0 等常用协议
- 限流
REST API: 通过 Rest API 进行配置管理,从繁琐的配置文件中解放 - 可用性: 天然支持分布式
- 高性能: 背靠非阻塞通信的 nginx,性能自不用说
- 插件机制: 提供众多开箱即用的插件,且有易于扩展的自定义插件接口,用户可以使用 Lua 自行开发插件
1.1.参考文档
nginx配置指南之一 https://blog.51cto.com/waringid/1438852
nginx操作指南之二 https://blog.51cto.com/waringid/1441632
nginx增加modsecurity模块 https://blog.51cto.com/waringid/1629905
也谈nginx的安全限制 https://blog.51cto.com/waringid/1608666
开源API网关系统(Kong教程)入门到精通 https://www.jianshu.com/p/a68e45bcadb6
配置详解 - 玩转Kong网关 https://www.jianshu.com/p/f3b1699777d6
Kong 源码分析 http://cyukang.com/archives/
Kong 轻量级 UI https://github.com/pocketdigi/kong-admin-ui
Kong 插件开发指南 https://ms2008.github.io/archives/
Linux 下 Nginx 服务 Rewrite 和 Proxy_Pass https://www.jianshu.com/p/10ecc107b5ee
Prometheus 入门与实践 https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/index.html
k8s 与监控–解读 prometheus 监控 kubernetes 的配置文件 https://segmentfault.com/a/1190000013230914
etcd 管理,证书配置,扩展,迁移恢复,带证书扩展节点 https://segmentfault.com/a/1190000016010980
k8s 集群节点更换 ip 或者 k8s 集群添加新节点 https://www.cnblogs.com/chenjw-note/p/11175250.html
2.konga 操作
2.1.设置连接
登录成功后会有下图所示的画面,在"name"栏中输入 kong 的连接地址。默认情况 kong 和 konga 安装在同一台服务器,输入“http://localhost:8001”即可完成连接。
konga 支持连接多个 kong 。对于不同地址的微服务网关,需要调整非本机 kong 的管理监听配置(安全考虑,kong 默认情况只允许本地网络访问微服务的管理端口)。
2.2.基础概念
仪表盘
仪表板显示有关您当前连接的Kong实例,基础数据库和可用插件的基本信息。更多详细信息可在INFO页面中找到。
快照
快照功能允许您轻松地跨节点备份,恢复和移动Kong配置。您还可以安排Kong实例的自动快照。
设置
设置页面提供了一种配置Konga并为用户帐户设置基本ACL的简单方法。
3.konga 配置反向代理
3.1.场景描述
将https://10.3.2.1基于 IP 地址的 URL 访问情况转化为基于域名的访问“https://office-gw.myj.lan”。
该类需求需要通过 kong 配置反向代理的方式实现。
3.2.增加上游服务器
点击“Upstreams ”进入 konga 的上游服务器(10.3.2.1)配置,通过“Create Upstreams”增加。在“Name”中输入上游代理的名称描述,该名称在后续的服务(service)中会用到,用于关联服务和上游服务器。增加了上游服务描述后通过“Target”增加具体的服务器地址,例如本例中的10.3.2.1。如果要实现多台主机负载均衡的配置,可以通过增加主机并调整策略的方式实现。
3.3.增加服务
Service服务,通过Kong匹配到相应的请求要转发的地方( 理解nginx 配置文件中server)。
自己定义的上游服务通过 Kong 匹配到相应的请求要转发的地方, Service 可以与下面的 Route 进行关联,一个 Service 可以有很多Route,匹配到的 Route 就会转发到 Service 中,、, 当然中间也会通过 Plugin 的处理,增加或者减少一些相应的 Header 或者其他信息。
导航到服务页面并添加新服务。填写内容如下:
url 参数是一个简化参数,用于一次性添加protocol,host,port和path。另外不要把Services当作后端的具体API,要把它当作一个大的服务,该服务下面有多个API(endpoint or route)。所以创建服务的时候填上该服务的域名就行了。当然也可以是一个url(带Path的),这样每个API(route)会路由到该path上。 |
需要注意“Host”的内容要和上游服务器的“Name”保持一致。
3.4.增加路由
Route 路由相当于nginx 配置中的location。
Route 实体定义匹配客户端请求的规则.。每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由。 每一个匹配给定路线的请求都将被提交给它的相关服务。
路由和服务的组合(以及它们之间的关注点分离)提供了一种强大的路由机制,,可以在 Kong 中定义细粒度的入口,从而引导你的访问到不同 upstream 服务。
这里的 Path 就是具体业务访问的路径(endpoint)。Hosts 不设置会默认采用 Services 里的 Host,但是一旦设置了,客户端请求该 route 的时候必须带上设置的 host,且必须一致。
如果 Strip path 设置为 YES,这里的 Path 可以加一个前缀,如:/passport/users,但最终会映射到后端真实的 API /users。Kong 转发到后端服务的时候会把前缀 /passport部分去掉。客户端调用 API 必须和 Routes 里的 Path一致才行(/passport/users),否则会得到404,无法匹配。用户的请求是先匹配 route,然后转发到 service。
4.配置 prometheus 监控
4.1.prometheus 相关
有关监控系统 prometheus 的介绍及配置请参考:
prometheus 配置指南 (待完善)
Prometheus 之 node-exporter 常用指标 (待完善)
4.2.启用监控插件
选择“Plugins”插件设置,选择“Prometheus” 监控插件并启用。需要主机插件的生效范围,例如下图中的生效范围是全局生效。
4.3.配置 metrics 访问
安全考虑,默认情况下启用“prometheus”监控插件只允许本机的管理端口访问,如下图示。由于 Prometheus 监控服务器是其它的 IP 地址,无法正常访问需要监控的数据指标,因此可以通过增加反向代理的方式通过域名访问解决。
目标:将 http://localhost:8001/metrics 的访问改为 http://metrics.myj.lan/metrics,并且只允许指定的 IP 地址访问。
1、增加上游服务器
上游服务器的目标地址是 http://localhos:8001
2、配置服务和路由
3、访问测试
4.4.增加监控配置
在 prometheus 的配置文件中增加新的服务器资源,如下图。完成配置后重新加载 prometheus 监控服务并确认已正常加载。
4.5.监控图形展示
5.nginx 配置迁移
1、将http://yunpan.xxx.com.cn 的访问自动转换为 https://yunpan.xxx.com.cn
2、内部网络不限制访问速度
3、转换location / 和 location /seafhttp 的跳转
思路:通过 kong 网关增加证书域名和 service 及 route 配置完成转换。
5.nginx 配置内容
5.1.配置证书
通过 konga 的界面增加证书配置,在 sni 项目中增加 yunpan.xxx.com.cn 的配置。
5.2.配置上游服务器
需要配置2个上游服务器,涉及同一个IP的2个不同端口。
5.3.配置服务
对应的需要配置2个 service
5.4.配置路由
5.5.配置跳转
在2个 route 项中启用 301https 的自动跳转插件。