共计 2763 个字符,预计需要花费 7 分钟才能阅读完成。
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 集群,提供企业级利用的全生命周期治理,性能包含利用开发环境、利用市场、微服务架构、利用继续交付、利用运维、利用级多云治理等。
Github:https://github.com/goodrain/r…
官网:https://www.rainbond.com?chan…
微信群:请搜寻增加群助手微信号 wylhzmyj
钉钉群:请搜寻钉钉群号 31096419