简介

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 的自动跳转插件。

  • 无标签
写评论...