通过IP地址访问任意类型组件

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

部署到 Rainbond 的对外提供服务的组件如何被访问是本文描述的重点,比如部署的数据库被外网访问、部署的物联网服务被外网访问等等。这些组件都会用到基于 IP 地址加端口的访问策略模式。

前提条件

  1. 基于应用市场部署一个 Mysql 组件 参考创建组件文档
  2. 本地准备一个 Mysql 客户端用来测试连接 Mysql 服务

操作流程

1.确认前提条件已经准备就绪,测试应用中已经存在一个 Mysql 组件

2.配置网关策略,进入网关策略管理页面,切换到 TCP/UDP 策略模式下,点击添加策略。与配置 HTTP 策略类似的是 TCP 策略依然包括路由规则和访问目标两个部分。访问目标部分与 HTTP 策略一致。路由规则部分只有一个配置项那就是 IP 和端口的组合。IP 是一个可选列表,其中包括 Rainbond 网关服务所在节点的所有 IP 地址(排除 docker0 网卡和容器网络的网卡),若你需要访问的 IP 地址不在选项中(比如阿里云的 EIP 不会挂载到虚拟机,所以列表中不会显示)请选择 0.0.0.0 为通配 IP 地址。端口我们会根据已使用的端口数据进行自动推荐,当然你可以更改为任何可用的端口号。选择完成后保存即可。

注意保存时若提示”组件端口未打开,是否自动开放”的提示时,请选择是,自动将组件的端口对外服务属性打开,完成服务注册。

3.测试策略是否生效,策略配置后将自动生效。点击访问策略列表中刚新增的策略,在弹出窗中获取连接地址和连接变量信息(包括 Mysql 账户信息)使用本地的 Mysql 客户端进行连接测试。

了解原理

TCP/UDP 协议属于传输层协议,因此支持 TCP/UDP 协议意味着目前几乎全部的应用层通信协议都支持。通过在 Rainbond 网关服务所在节点使用策略配置的 IP 加端口进行监听,将请求代理的后端的组件容器网络上。使用 TCP/UDP 意味着网关不会对请求包进行解析,具有更优秀的性能表现。同时也就意味着不能通过网关做像 HTTP 协议那么多的路由策略。

选择的 IP 地址是有讲究的。Rainbond 网关服务会自动获取运行节点的所有网卡绑定的 IP 地址,并默认排除 docker0 以及容器网络相关的网卡 IP 地址。也就意味着 IP 地址可选项中会包括局域网 IP,公网 IP。当策略选择明确的 IP 地址时,当前策略只会在 IP 所在节点生效,且仅监听 IP 对应的端口。若选择的 IP 地址是虚拟 IP,可能在节点异常情况下进行漂移,Rainbond 网关可以实时感知到 IP 地址的漂移从而达成网关策略的漂移。若选择的 IP 地址是通配符地址 0.0.0.0,那么就意味着该策略将在所有 Rainbond 网关服务部署节点生效,且直接占用配置的端口。

通过上述的机制,Rainbond 网关可以部署于局域网边缘,充当多个局域网打通的桥梁。

常见问题

  • 如何保障端口不冲突

Rainbond 尽可能的确保所有策略之间监听端口不冲突,但遗憾的是宿主机端口可能被其他软件占用而导致冲突。因此建议用户尽可能保障 Rainbond 网关节点的独立性。

  • 外网 IP 没有绑定到集群可以使用吗

推荐之间使用通配符 0.0.0.0 作为 IP 地址,然后直接访问外网 IP 地址+端口。但前提是外网 IP 的流量已经映射到某一个 Rainbond 网关节点。

  • 网关如何做到内外网隔离

网关的部署模式是灵活的,当某个网关节点只有内网 IP 时,使用此 IP 配置的策略只能通过内网访问。将 Rainbond 网关部署到不同的子网中(前提是其可以与集群所在子网通信),可以实现不同的子网访问集群中的应用。

  • TCP 的策略能访问 HTTP 的应用吗

当然可以,而且在某些特殊情况下还必须使用 TCP 的策略,比如应用本身有配置服务端证书建立了 TLS 监听,再比如应用希望有更高的性能。