详解 Rainbond Ingress 泛解析域名机制
Rainbond 作为一款云原生应用管理平台,天生带有引导南北向网络流量的分布式网关 rbd-gateway。区别于一般的 Ingress 配置中,用户需要自行定义域名的使用体验,Rainbond 的网关策略可以一键自动生成域名访问策略,用户通过这个域名可以立刻访问到部署在 Rainbond 上的业务系统。这个使用体验在开发测试场景下非常友好,这篇文章详解了这一机制到底是如何实现的。
Gateway 与 Ingress
Rainbond 团队开发了高性能分布式网关组件 rbd-gateway,作为集群内部的 Ingress Controller 处理集群南北流量。它同时支持 L4 和 L7 层协议,以及一键开启 WebSocket 等高级功能。在使用它的时候,一个细节功能点非常好用,就是可以一键生成一个可以被访问的域名地址。

这个域名的格式详解如下:
http://<servicePort>.<service_alias>.<tenant_name>.17a4cc.grapps.cn/
- servicePort: 访问策略对应的目标端口名称
- service_alias: 当前服务组件的别名
- tenant_name: 当前团队的别名
- .17a4cc.grapps.cn: 当前集群的泛解析域名
实际上,这一条路由规则,是由 Kubernetes 中对应的 ingress 和 service 所定义的。整个访问链路可以归纳为下图:

开启 对外服务 开关,相当于自动生成了以下资源:
apiVersion: v1
kind: Service
metadata:
labels:
creator: Rainbond
event_id: ""
name: gr49d848ServiceOUT
port_protocol: http
protocol: http
rainbond.com/tolerate-unready-endpoints: "true"
service_alias: gr49d848
service_port: "5000"
service_type: outer
tenant_name: 2c9v614j
name: service-8965-5000out
namespace: 3be96e95700a480c9b37c6ef5daf3566
spec:
clusterIP: 172.21.7.172
ports:
- name: tcp-5000
port: 5000
protocol: TCP
targetPort: 5000
selector:
name: gr49d848
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/weight: "100"
generation: 1
labels:
creator: Rainbond
service_alias: gr49d848
tenant_name: 2c9v614j
name: 3cf8d6bd89250eda87ac127c49694a05
namespace: 3be96e95700a480c9b37c6ef5daf3566
spec:
rules:
- host: 5000.gr49d848.2c9v614j.17a4cc.grapps.cn
http:
paths:
- backend:
serviceName: service-8965-5000out
servicePort: 5000
path: /
status:
loadBalancer: {}
自动生成域名
对于大多数开发者而言,域名算是一种稀缺资源,如何为自己茫茫多的 Ingress rule 分配域名,是一件很令人头疼的事情。毕竟只有拥有了自己的域名时,才能够彻底掌控其解析的规则,避免无止境的修改 /etc/hosts 文件。
市面上绝大多数 Kubernetes 管理工具都可以用半自动的方式生成 Service 与 Ingress资源。这种半自动的方式特指让用户在图形化 UI 界面上,输入必要的信息后,由管理工具自行生成对应的 yaml 配置文件,并加载到 Kubernetes 中去。但是对于所配置的域名,鲜有工具可以做到如 Rainbond 一样的使用体验。
达成这一优秀体验的关键在于泛解析域名的使用。
对泛解析域名最简单明了的解释就是:符合 *.mydomain.com 这一规则的任意域名,都可以解析到同一个 IP 地址上去。在当下这一使用场景中,我们只需要将泛解析域名 *.17a4cc.grapps.cn 解析到 rbd-gateway 所在的服务器 IP 地址,就可以随意为 Ingress rule 配置符合规则的域名了。

Rainbond 在产品设计层面将 Ingress rule 和泛解析域名结合在了一起,自动为每个服务端口生成全局唯一的域名。并在集群安装时,自动向公网 DNS 服务器注册了解析记录,集群安装完毕之后,所生成的所有域名,都是可以被公网解析的,只要 PC 客户端可以使用公网 DNS 服务,就可以解析域名,并访问到指定的服务端口。
Rainbond 通过不同的三级域名 (比如当前场景中的 17a4cc)来区分不同的集群。这里涉及到关于泛解析域名的一个特点,子级域名的解析记录,优先级高于父级域名的解析记录。
===========================================
// 对两级泛解析域名注册解析记录
*.grapps.cn =解析记录注册=> 1.1.1.1
*.17a4cc.grapps.cn =解析记录注册=> 2.2.2.2
===========================================
===========================================
// 客户端解析结果
abc.grapps.cn =解析 IP 地址=> 1.1.1.1
abc.def.grapps.cn =解析 IP 地址=> 1.1.1.1
abc.17a4cc.grapps.cn =解析 IP 地址=> 2.2.2.2 // 优先使用 *.17a4cc.grapps.cn 的解析记录
Rainbond是一个开源的云原生应用管理平台,使用简单,不需要懂容器和Kubernetes,支持管理多个Kubernetes集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。

详解 Rainbond Ingress 泛解析域名机制的更多相关文章
- 图文详解 Android Binder跨进程通信机制 原理
图文详解 Android Binder跨进程通信机制 原理 目录 目录 1. Binder到底是什么? 中文即 粘合剂,意思为粘合了两个不同的进程 网上有很多对Binder的定义,但都说不清楚:Bin ...
- Java集合详解3:Iterator,fail-fast机制与比较器
Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...
- SpringBoot之DispatcherServlet详解及源码解析
在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...
- react第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制)
第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制) 课程目标 深入理解和掌握事件的冒泡及捕获机制 理解react中的合成事件的本质 在react组件中合理的使用原生事件 ...
- 详解HashMap源码解析(下)
上文详解HashMap源码解析(上)介绍了HashMap整体介绍了一下数据结构,主要属性字段,获取数组的索引下标,以及几个构造方法.本文重点讲解元素的添加.查找.扩容等主要方法. 添加元素 put(K ...
- OkHttp3源码详解(五) okhttp连接池复用机制
1.概述 提高网络性能优化,很重要的一点就是降低延迟和提升响应速度. 通常我们在浏览器中发起请求的时候header部分往往是这样的 keep-alive 就是浏览器和服务端之间保持长连接,这个连接是可 ...
- 解释-DNS,A记录,CNAME记录,域名转向,SRV记录,TTL值,泛域名与泛解析,域名绑定
http://www.lihongye.net/post/dns.html DNS DNS,Domain Name System或者Domain Name Service(域名系统或者域名服务).域名 ...
- Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- AFNetworking 3.0 使用详解 和 源码解析实现原理
AFN原理&& AFN如何使用RunLoop来实现的: 让你介绍一下AFN源码的理解,首先要说说封装里面主要做了那些重要的事情,有那些重要的类(XY题) 一.AFN的实现步骤: NSS ...
随机推荐
- 设计AOV网拓扑排序的算法
拓扑排序 对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一) 思想 从AOV网选择一个没有前驱的顶点并输出 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧 重复上述两步,直到全部顶点都被输出, ...
- zabbix 报警发送企业威信
1.组册企业微信,创建应用 2.下载脚本文件: https://raw.githubusercontent.com/OneOaaS/weixin-alert/master/weixin_linux_a ...
- Pod 生命周期和重启策略
Pod 在整个生命周期中被系统定义为各种状态,熟悉 Pod 的各种状态对于理解如何设置 Pod 的调度策略.重启策略是很有必要的. Pod 的状态 状态值 描述 Pending API Server ...
- MarkdownPad2 注册码
邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...
- 限制q-error,防止产生次优计划
原文:<Preventing bad plans by bounding the impact of cardinality estimation errors> 摘要 文章定义了一个衡量 ...
- Typora常用操作
Typora常用操作 目录 Typora常用操作 1. 标题 2.子标题 3. 区块 4.代码 5. 表格 6. 超链接 7.单选框 8.数学公式 9.流程图 10.生成目录 11.字体设置 12. ...
- Android系统编程入门系列之硬件交互——传感器
到目前为止,关于应用程序与用户之间的相关内容便比较肤浅的大致介绍完毕.而在整个系统架构中,应用程序与用户之间的交互,犹如参天大树上的枝干和树叶,交互起来五彩缤纷,但使整个生态系统保持生命力的核心,在于 ...
- 编译使用nginx
nginx-1.18.0 ./configure --prefix=$HOME/nginx --with-http_ssl_module make -j32; make install [fangju ...
- [noi109]排队
题目要求其实相当于要让大于和小于m的数的个数都不超过n/2,因此当要对一个数处理时,要么把它改成m,要么不作修改,根据这个贪心就可以完成了. 1 #include<bits/stdc++.h&g ...
- [bzoj1082]栅栏
先二分答案,然后搜索暴力判断由于数据范围较大,需要剪枝:1.当前所有可能被用到的木板长度和(长度要不小于最小所需长度)>=所要拼成的所有木板的和:2.对于需求从大到小枚举木板(这样一开始枚举次数 ...