Skip to main content

通过域名访问提供HTTP服务的组件

本文适用于应用开发者和运维人员

部署到 Rainbond 的提供 HTTP 协议服务的组件如何被访问是本文描述的重点。Rainbond 的网关服务设计成可直接面向公网环境,因此使用 Rainbond 网关可以直接管理企业所有业务的公网流量流向。在对外提供服务的场景中,访问 HTTP 服务最常见的方式是使用域名。企业通常对外只有一个外网 IP 地址,端口资源特别 80/443 端口资源非常有限,使用域名的方式可以很好的复用端口。

接下来我们开始操作绑定一个域名到 Rainbond 网关并访问到已部署的组件。

前提条件

  1. 已成功部署可访问的提供 HTTP 服务的组件,比如基于源代码部署任意一个 Demo。
  2. 准备一个可以使用的域名并做好 DNS 解析(测试情况下可以做本地解析,正式使用请配置好正确的 DNS 解析)

操作流程

  1. 确认前提条件已经准备就绪 假设准备的域名为 www.example.com
  2. 配置网关策略 为了便于用户配置网关策略,管理和新增策略的的入口有三个,分别是:团队视图/网关/访问策略管理页面;应用视图/网关策略管理页面;组件管理面板,端口管理下;不同的管理页面主要是管理的策略范围不同,添加的方式一致。添加策略主要分为两部分配置:`路由规则`和`访问目标`。我们在路由规则中填写 `www.example.com` 这个域名,在访问目标中选择已经部署的 Demo 组件确认保存即可。
  3. 验证策略是否生效 直接点击已经添加的策略发起访问,正常打开组件页面即已配置成功。

了解原理和更多配置参数

Rainbond 网关实现可以认为是一个 ingress-controller,基于 openresty 1.19.3.2版本实现。用户配置的策略会被翻译成 Kubernetes Ingress 资源,然后自动在 Rainbond 网关中生效。如何生成的 Kubernetes Ingress 资源是 Rainbond 内部实现对于用户透明,因此这里暂不做详细解读,这里主要讲解配置策略时除了域名以为其中支持的参数。

路由参数

  • 域名: 最主要的路由参数,上文例子中我们只设置了这一个参数,同一个域名可以重复设置,路由访问不同的组件目标,服务于灰度发布场景。
  • 请求路径: 在域名相同的情况下,可以根据不同的请求路径来区分请求不同的组件服务。
  • 路径重写: 可以使用变量,结合正则表达式和标志位实现 URL 重写以及重定向。
  • 请求头: 使用请求头来区分不同的请求路由主要应用于灰度发布场景中。
  • HTTPs 证书: 选择配置了 HTTPs 证书即将当前策略升级为 HTTPS,同时支持配置 HTTP 转移策略,包括 HTTPS/HTTP 共存和 HTTP 强转 HTTPS。HTTPs 证书需要在证书管理中提前上传添加。 Rainbond Cloud 版本中目前支持自动签发证书,即根据配置的域名自动匹配已有证书,若不存在则调用第三方平台自动完成签发,随后完成证书绑定。
  • 权重: 当多条策略的上述路由参数全部一致时,权重即可生效。设置不同的权重访问到不同的组件(一般情况下是同一个业务的不同版本同时部署多个组件),适用于灰度发布场景。

代理参数设置

代理参数需要在策略添加后在管理列表中点击参数设置进行更改,支持动态生效。

  • 连接超时时间定义与上游服务器(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, 网关会自动为当前的策加上这两个请求头。

默认域名机制

HTTP 协议的组件在打开端口的对外访问权限时,若没有配置任何访问时自动为其分配一个默认域名。默认域名的生成策略如下:

{port}.{service-alias}.{team-alias}.{default_domain_suffix}
# eg. http://5000.gr6f1ac7.64q1jlfb.17f4cc.grapps.cn

其中 default_domain_suffix 在每一个集群安装过程中用户可以指定或 Rainbond 自动分配。

参考视频

使用域名访问组件操作参考视频: https://www.bilibili.com/video/BV1Wz411q7Rm/

常见问题

  • 配置了域名后怎么不能访问

    不能访问可能有一以下几个原因:DNS 解析错误;组件未处于正常运行状态;组件端口配置与实际监听端口不一致;组件不是提供的 HTTP 服务。可跟随上述优先级依次排查故障。

  • 默认分配域名可否修改

    默认分配的域名首先可以进行删除动作移除,其次默认域名分配的后缀可以通过修改集群属性进行修改,分配的策略目前暂不支持修改。

  • 是否支持泛域名策略

    支持,域名配置可直接使用泛域名,比如*.example.com,那么不管访问 a.example.com还是b.example.com都可以路由到指定的组件。