物联网网关神器 Kong ( 四 )- 利用 Konga 来配置生产环境安全连接 Kong
前言
上一篇我们讲解了 Konga 的搭建和与 Kong 进行默认连接,本篇文章将讲一下如何在生产环境中基于验证的连接 Kong ,并详细讲解其中的参数。
前期准备
如果你需要在生产环境使用,那么你可以将 admin 端口只监听 127.0.0.1 ,然后通过 Kong 自己进行代理并增加效验。
首先,你可以通过默认方法连接上你的 Kong admin,这样方便进行配置。而后创建 Service。
Service ( 服务 )
Service 是 Kong 对于服务的抽象概念。其本意为我们自定义的上游服务,可以通过 Kong 对路由的抽象( Route )来对一个请求进行转发或通过 Kong 的插件机制 ( Plugins )进行处理。
我们将在下文对 Route 和 Plugins 进行介绍。
下面我们将展示如何创建一个 Service。
属性详解:
- Name : 该服务的名称。
- Description : 用于对自定义服务的描述。
- Tags :为该服务打上标签,便于通过 tag 来区分。
- Url :方便配置 protocol、host、port、path。
- Protocol :使用 HTTP/HTTPS 连接被代理的服务。
- Host :被代理服务的 host。
- Port :被代理服务的端口。
- Path : 被代理服务的路径。
- Retries :代理请求失败重试几次。默认值为5秒。
- Connect timeout :与代理服务建立连接超时时间。
- Write timeout :与代理服务完成写请求的超时时间。
- Read timeout : 与代理服务完成读请求的超时时间。
- Client certificate :证书的id。( 关于怎么配置证书见下文 )
我们来填写相关属性,建立一个新的服务。
创建成功后可以看到一个新列表,里面就有我们刚才创建的 kong-admin
接下来我们需要点击这个 Name,进入该 Service 的配置页面。
进入配置页面后我们会发现左边有一个选择栏,右边则是这个服务的详细配置。
左边选择栏讲解:
- Service details : 服务的详细配置。
- Routes : 该服务的路由。
- Plugins : 该服务所使用的插件。
- Eligible Consumers : 适用于 ACL Kong 插件。( 具体用法日后再进行讲解 )
Route ( 路由 )
Route 是 Kong 对于服务路由的抽象。其功能类似于 Nginx
中的 location
结构块。
下面我们将展示如何创建一个 Route
属性详解:
- Name:Route 的名字
- Tags:为该路由打上标签,便于通过 tag 来区分。
- Hosts:路由所匹配的域名,可填写多个。( 填写后要按回车才会记录数据 )
- Paths:路由所匹配的域名的路径。
- Headers:路由所匹配 HTTP 请求 header 内携带的参数。
- Path handling:用于控制代理服务的时候如何转发请求路径。( 值为 V0、V1 )
V0 - 其主要实现的为:
请求 /user => 路由的 path /a 则最后会被组合为 /a/user
V1 - 其主要实现为:
请求 /user => 路由的 path /a 则最后被组合为 /auser
- Https redirect status code:当匹配到路由后如果协议不符合,则 Kong 会主动响应该状态吗。默认为426。
- Regex priority:正则匹配的优先级。在使用正则做路由匹配的时候会利用该标志使用优先级最高的。
如果路由匹配,且 Regex priority 也相同,则会按照最早创建的规则来匹配。
- Methods:HTTP 请求方法。如 GET 、POST 、PATCH 、PUT
- Strip Path:是否删除路由所匹配的路径。
例如路由的规则为 /a,请求为 /a/user。 则当 Kong 接受到该请求在转发时会将该路径改变为 => /user
- Preserve Host:是否将请求端的 host 保留
- Protocols:接受的协议。 HTTP 或 HTTPS
- SNIs:使用 Socket 路由时,与此路由匹配的SNI列表。 使用tcp或tls协议时,必须设置SNIs,源或目标之一。
- Sources:使用 Socket 路由时,与此路由匹配的传入连接的 IP 源列表。其格式为 IP:PORT。
- Destinations:使用 Socket 路由时,与此路由匹配的目标连接的 IP 源列表。其格式为 IP:PORT。
现在我们创建了一个 Service 的路由
接下来,我们可以使用该域名访问 Kong admin 了。
Consumer ( 消费者 )
为了配置 Kong 的插件,我们首先要了解什么是 Consumer 。 Consumer 代表服务的使用者或用户。 首先,我们创建一个 Consumer。
点击我们新建的 kong-admin 然后配置 Credentials 的 API KEYS。
点击 Create API KEY 来新建一个 key。
- key - 密钥。如果为空则会自动生成一个。
记住生成的密钥,待会儿会用。
Plugin ( 插件 )
刚才我们已经成功创建了密钥,接下来我们就要配置权限登陆了。
我们选取之前提到的 Key Auth 来进行验权安全登陆。
首先,打开 Plugins 的页面。
添加一个 Key Auth 插件。
填写相关的参数。
属性详解:
- consumer:用于区分 Kong 插件的消费者,为空则对应所有的消费者。
- key names:key 的名称,可支持多个 key 。
- hide credentials:是否隐藏凭据到上游 API 服务器。
- anonymous:配置匿名访问者的 id 。
重启 Kong 容器
经过这么多步骤的配置,现在我们我们已经对 Kong 的管理接口进行了验权。我们只需要重启 Docker 容器,使得其端口只监听内部的请求即可。
成功安全连接到 Kong
现在,我们已经配置好了安全连接。当我们访问刚才测试的域名时会得到一个异常。
好,接下来我们配置 Konga 进行安全连接。选择 Key AUTH 的登陆方式。然后把刚才记录的密钥填上。
- Name:连接名称
- Loopback API URL:kong 的管理端口 URL。格式为 http://… 或 https:// …
- API key:密钥
现在我们已经使用安全连接成功的连接到 Kong 服务。
总结
本篇文章利用配置安全连接 Kong 服务来讲解了 Kong 的 Service、Route、Consumer 和 Key Auth 插件。