这篇文章将会介绍如何在 什么是应用网关, 以及应用网关的作用.

1. 应用网关是什么?

在百度百科中, 网关的定义是这样子的: 网关(Gateway)就是一个网络连接到另一个网络的"关口". 类似的, 应用网关是是 Rainbond 中的一个组件(rbd-gateway), 它是外部流量流入内部应用的"关口". 也可以说是南北向流量中, 北向流量流向南向流量的一个"关口".

2. 应用网关的作用

在介绍应用网关的作用前, 首先需要提一下 Ingress. Kubernetes 官方对 Ingress 的介绍是: 在Kubernetes v1.1 中添加的 Ingress, 暴露了从集群外部到集群内服务的 HTTP 和 HTTPs 路由. 流量路由 Ingress 定义的策略控制.

注意, Ingress 只是定义了从集群外部到集群内服务的路由策略, 并没有实现这些策略. 

应用网关的作用就是实现 Ingress 中定义的各种策略. 除了 HTTP 和 HTTPs 路由外, 应用网关还提供了其他丰富的功能. 目前支持的功能有:

  • HTTP 和 HTTPs 策略
  • TCP/UDP 策略
  • 泛域名策略
  • 多种负载均衡算法
  • 高级路由: 根据访问路径, 请求头, Cookie, 权重的访问控制

2.1 HTTP 和 HTTPs 策略

在 HTTP 和 HTTPs 策略中, 除了配置单独的 HTPP, HTTPs外, 还可以配置 HTTP 强转 HTTPs的策略. 另外, 还可以配置 HTTP 和 HTTPs 共存.

2.2 TCP/UDP 策略

在配置 TCP/UDP 策略的时候, 目前只支持端口的自定义, 当然, IP 的自定义以后版本中也会支持.

2.3 泛域名策略

泛域名在实际使用中作用是非常广泛的, 为此, 应用网关也对泛域名进行了支持. 泛域名有不少的作用:

  • 可以让域名支持无限的子域名(这也是泛域名解析最大的用途)
  • 防止用户错误输入导致的应用不能访问的问题
  • 可以让直接输入网址的用户输入简洁的网址即可访问应用
  • 在域名前添加任何子域名,均会被解析到同一个 IP

2.3 负载均衡

为了保证应用的高可用, 以及提高应用的性能, 我们一般会为应用部署多个实例. 这时候, 就必须要考虑负载均衡了. 应用网关目前默认的负载均衡算法是轮询, 也是目前支持的唯一一种负载均衡算法 . 当然, 在下个版本中将会支持更多的负载均衡算法.

轮询(Round Robin): 为第一个请求选择列表中的第一个服务器, 然后按顺序向下移动列表直到结尾, 然后循环.

2.4 高级路由(A/B 测试, 灰度发布)

只有 HTTP 或 HTTPs 策略才支持高级路由, TCP/UDP 策略不支持高级路由. 在应用网关中的高级路由是指, 通过设置策略中的path, cookie, header权重, 让同一个域名可以访问不同的应用.

高级路由主要是为 A/B 测试(A/B testing) 和 灰度发布(金丝雀部署, canary deployments) 服务.

2.4.1 A/B 测试

A/B 测试的本质是一个实验, 它将应用的两个或多个版本(变体)随机地显示给用户, 通过统计分析确认能够在给定指标中胜出的版本(变体).

我们可以在应用网关中, 为各个版本的应用配置域名相同, 但是cookie, header 或 权重不同的策略, 让用户通过同一个域名访问不同版本的应用. 然后对数据进行统计分析, 找出在给定指标下的胜者, 从而实现 A/B 测试.

2.4.2 灰度发布

灰度发布是将版本部署到服务器子集的模式. 首先将版本部署到一小部分服务器,对其进行测试,然后将版本扩散到其余服务器灰度发布可作为预警指示,对停机时间影响较小:如果灰度发布失败了,其余服务器不会受到影响.

为了实现灰度发布所要的效果, 我们只需为灰度发布的服务器分配较小的权重, 然后再慢慢地扩散, 增加权重.

3. 后续更新计划

  • 支持更多的负载均衡算法(一致性哈希, 粘性会话)
  • IP 池, 可以自定义IP