访问控制
这篇文章将会介绍如何在配置应用网关中的规则, 从而对应用的访问进行控制.
在这篇文章中, 你将会完成:
前期准备
请确保你能够满足以下条件:
- 一个状态健康的 Rainbond.
- 一个或多个运行中的服务
- 一个可用, 并且已经解析到应用网关所在机器上的域名(机器的 IP 可以在添加策略的面板上找到)
添加 HTTP 策略
- 准备一个服务,参考服务创建文档
- 点击 应用网关 -> 访问控制 -> 添加策略
- 填写路由条件等信息
- 点击 确认
配置完成后, 就可以通过域名(www.test.com)对应用(Nginx)进行访问了.
HTTPs 策略, HTTP 强转 HTTPs 策略
- 准备一个服务,参考服务创建文档
- 点击 应用网关 -> 访问控制 -> 添加策略
- 填写 域名,
绑定证书
, 应用(组), 服务组件, 端口号,HTTP Rewrite HTTPs
等信息 - 点击 确认
如果没有勾选 HTTP Rewrite HTTPs, 那么将会是单纯的HTTPs
配置完成后, 用 http://www.test.com 进行访问, 将被强制转成 https://www.test.com.
TCP 访问策略
基于四层的访问策略支持的路由条件有:IP地址和端口。 IP地址支持选择目前集群所有网关节点的内外网IP地址或使用0.0.0.0通配地址全局生效。 针对每个IP地址可选择性设置不冲突的端口。需要注意的是80/443端口是保留端口不能使用。 这里的IP地址可以是固定IP地址或虚拟IP地址,内网IP地址或外网IP地址。
0.0.0.0 是指此策略将在全部网关节点生效,可以通过所有网关节点的IP地址和映射到网关节点的公网IP地址访问。
添加方式:
- 准备一个服务,参考服务创建文档
- 点击 应用网关 -> 访问控制 -> TCP/UDP -> 添加策略
- 填写 IP, 端口, 应用(组), 服务组件, 端口号, 负载均衡
- 点击 确认
TCP 策略会有一个系统自动分配的端口, 你也可以指定端口, 但是要注意端口冲突的问题.
配置完成后, 就可以通过 IP+Port(47.92.168.60:20128)访问应用了.
泛域名
- 准备一个服务,参考服务创建文档
- 点击 应用网关 -> 访问控制 -> 添加策略
- 填写
泛域名
, 应用(组), 服务组件, 端口 - 点击 确认
配置完成后, 任何一个解析到47.92.168.60的 test.com 的子域名都会访问同一个应用(Nginx).
高级路由(A/B 测试, 灰度发布)
在高级路由中, 我们可以对不同的服务绑定同一个域名, 通过设置不同的 请求路径, Cookie, Header, 将流量路由到相应的服务上. 另外, 我们还可以通过设置权重, 将流量按权重分配到不同的服务上. 以上的功能, 可以帮助我们轻松地实现 A/B 测试, 灰度发布.
Cookie
在 HTTP 策略中添加两个Cookie信息, branch=v5.0和version=beta, 如下图所示:
设置了Cookie后, 单纯的通过域名已经无法访问应用了:
172:~ abe$ curl test.goodrain.com
<html>
<head><title>502 Bad Gateway</title></head>
...
在访问的时候需要带上Cookie信息才能正常地对应用进行访问:
172:~ abe$ curl --cookie "branch=v5.0;version=beta" test.goodrain.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
Header
在 HTTP 策略中添加两个请求头信息, branch=v5.0 和 version=beta, 如下图所示:
设置了请求头后, 单纯的通过域名已经无法访问应用了:
172:~ abe$ curl test.goodrain.com
<html>
<head><title>502 Bad Gateway</title></head>
...
在访问的时候需要带上请求头信息才能正常地对应用进行访问:
172:~ abe$ curl -H "branch:v5.0" -H "version:beta" test.goodrain.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
权重
首先, 准备两个应用, 2048和Nginx:
然后, 给这两个应用, 分别添加一条 除了权重, 其他信息都一样的策略
. 2048的权重设置为75, Nginx的权重设置为25.
最后, 通过他们的域名test.goodrain.com
访问; 可以发现, 有75%的概率访问的是2048, 25%的概率访问的是Nginx.
通过以上对 Cookie, Header, 权重的配置, 就可以灵活地配置 A/B 测试
和 灰度发布
.
参数配置
网关目前支持的参数有以下几个:
连接超时时间
定义与上游服务器(upstream)建立连接的超时时间. 单位是秒, 默认: 75.
请求超时时间
设置将请求传输到上游服务器(upstream)的超时时间. 单位是秒, 默认: 60. 仅在两次连续写入操作之间设置超时时间, 而不是为整个请求的传输. 如果上游服务器服务器在此时间内未收到任何内容,则关闭连接.
响应超时时间
定义从上游服务器(upstream)读取响应的超时时间. 单位是秒, 默认: 60. 仅在两个连续的读操作之间设置超时, 而不是为整个响应的传输. 如果上游服务器在此时间内未传输任何内容, 则关闭连接.
上传限制
设置上传内容(或请求正文)的最大限制, 将大小设置为0将不作限制. 单位是 Mb, 默认: 1.
自定义请求头
设置了自定义请求头后, 每个发往上游服务器(upstream)的请求都会带上这些请求头.
后端响应缓冲区
对应 Nginx 的 proxy_buffering 参数, 默认关闭. 如果关闭了后端响应缓冲区,那么 Nginx 会立即把从后端收到的响应内容传送给客户端;. 如果开启了后端响应缓冲区, 那么 Nignx 会把后端返回的内容先放到缓冲区当中,然后再返回给客户端; 并且这个过程是边收边传,不是全部接收完再传给客户端.
Websoket
在网关支持的 WebSocket 与单纯的 WebSocket 不同, 是在 HTTP 的基础上, 使用 HTTP Upgrade 机制将连接从 HTTP 升级到 WebSocket. 这个 HTTP Upgrade 机制是在请求中添加两个自定义请求头, 分别是 'Upgrade $http_upgrade' 和 'Connection "Upgrade"', 当勾选了 Websoket, 网关会自动为当前的策加上这两个请求头. 更多的信息可以参考: NGINX as a WebSocket Proxy