- 创建者: 虚拟的现实,上次更新时间:10月 07, 2023 需要 5 分钟阅读时间
简介
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 自行开发插件
参考文档
kong 网关配置 https://wiki.waringid.me/x/UwES
kong 的常用指令 https://wiki.waringid.me/x/aQES
kong 插件机制 https://wiki.waringid.me/x/bgES
开源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
k8s 配置 https://kubernetes.feisky.xyz/pai-cuo-zhi-nan/network
etcd 管理,证书配置,扩展,迁移恢复,带证书扩展节点 https://segmentfault.com/a/1190000016010980
k8s 集群节点更换 ip 或者 k8s 集群添加新节点 https://www.cnblogs.com/chenjw-note/p/11175250.html
konga 操作
设置连接
登录成功后会有下图所示的画面,在"name"栏中输入 kong 的连接地址。默认情况 kong 和 konga 安装在同一台服务器,输入“http://localhost:8001”即可完成连接。
konga 支持连接多个 kong 。对于不同地址的微服务网关,需要调整非本机 kong 的管理监听配置(安全考虑,kong 默认情况只允许本地网络访问微服务的管理端口)。
基础概念
仪表盘
仪表板显示有关您当前连接的Kong实例,基础数据库和可用插件的基本信息。更多详细信息可在INFO页面中找到。
快照
快照功能允许您轻松地跨节点备份,恢复和移动Kong配置。您还可以安排Kong实例的自动快照。
设置
设置页面提供了一种配置Konga并为用户帐户设置基本ACL的简单方法。
konga 配置反向代理
场景描述
将https://10.3.2.1基于 IP 地址的 URL 访问情况转化为基于域名的访问“https://office-gw.myj.lan”。
该类需求需要通过 kong 配置反向代理的方式实现。
增加上游服务器
点击“Upstreams ”进入 konga 的上游服务器(10.3.2.1)配置,通过“Create Upstreams”增加。在“Name”中输入上游代理的名称描述,该名称在后续的服务(service)中会用到,用于关联服务和上游服务器。增加了上游服务描述后通过“Target”增加具体的服务器地址,例如本例中的10.3.2.1。如果要实现多台主机负载均衡的配置,可以通过增加主机并调整策略的方式实现。
增加服务
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”保持一致。
增加路由
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。
配置 prometheus 监控
prometheus 相关
有关监控系统 prometheus 的介绍及配置请参考:
1401-prometheus 配置指南 https://wiki.myj.com.cn/x/WADG
1402-Prometheus 之 node-exporter 常用指标 https://wiki.myj.com.cn/x/fADG
启用监控插件
选择“Plugins”插件设置,选择“Prometheus” 监控插件并启用。需要主机插件的生效范围,例如下图中的生效范围是全局生效。
配置 metrics 访问
安全考虑,默认情况下启用“prometheus”监控插件只允许本机的管理端口访问,如下图示。由于 Prometheus 监控服务器是其它的 IP 地址,无法正常访问需要监控的数据指标,因此可以通过增加反向代理的方式通过域名访问解决。
目标:将 http://localhost:8001/metrics 的访问改为 http://metrics.myj.lan/metrics,并且只允许指定的 IP 地址访问。
1、增加上游服务器
上游服务器的目标地址是 http://localhos:8001
2、配置服务和路由
3、访问测试
增加监控配置
在 prometheus 的配置文件中增加新的服务器资源,如下图。完成配置后重新加载 prometheus 监控服务并确认已正常加载。
监控图形展示
nginx 配置迁移
1、将http://yunpan.myj.com.cn 的访问自动转换为 https://yunpan.myj.com.cn
2、内部网络不限制访问速度
3、转换location / 和 location /seafhttp 的跳转
思路:通过 kong 网关增加证书域名和 service 及 route 配置完成转换。
nginx 配置内容
upstream yunpan.myj.com.cn { server 10.2.5.100:8000; keepalive 6000; } server { listen 80; server_name yunpan.myj.com.cn; rewrite ^(.*) https://$server_name$request_uri permanent; } server { listen 443 ssl; server_name yunpan.myj.com.cn; root html; index index.html index.htm; ssl_certificate /root/myj/214828708690016.pem; ssl_certificate_key /root/myj/214828708690016.key; ssl_session_cache shared:SSL:20m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; location / { root html; index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://yunpan.myj.com.cn; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Forwarded-Proto https; proxy_read_timeout 1200s; client_max_body_size 0; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://192.168.5.100:8082; client_max_body_size 0; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; send_timeout 36000s; limit_rate 1024k; } error_page 404 /50x.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置证书
通过 konga 的界面增加证书配置,在 sni 项目中增加 yunpan.myj.com.cn 的配置。
配置上游服务器
需要配置2个上游服务器,涉及同一个IP的2个不同端口。
配置服务
对应的需要配置2个 service
配置路由
配置跳转
在2个 route 项中启用 301https 的自动跳转插件。
- 无标签