天天看點

詳解 Rainbond Ingress 泛解析域名機制

Rainbond 作為一款雲原生應用管理平台,天生帶有引導南北向網絡流量的分布式網關 rbd-gateway。差別于一般的 Ingress 配置中,使用者需要自行定義域名的使用體驗,Rainbond 的網關政策可以一鍵自動生成域名通路政策,使用者通過這個域名可以立刻通路到部署在 Rainbond 上的業務系統。這個使用體驗在開發測試場景下非常友好,這篇文章詳解了這一機制到底是如何實作的。

Gateway 與 Ingress

Rainbond 團隊開發了高性能分布式網關元件 rbd-gateway,作為叢集内部的 Ingress Controller 處理叢集南北流量。它同時支援 L4 和 L7 層協定,以及一鍵開啟 WebSocket 等進階功能。在使用它的時候,一個細節功能點非常好用,就是可以一鍵生成一個可以被通路的域名位址。

詳解 Rainbond Ingress 泛解析域名機制

這個域名的格式詳解如下:

http://<servicePort>.<service_alias>.<tenant_name>.17a4cc.grapps.cn/ - servicePort: 通路政策對應的目标端口名稱 - service_alias: 目前服務元件的别名 - tenant_name: 目前團隊的别名 - .17a4cc.grapps.cn: 目前叢集的泛解析域名

實際上,這一條路由規則,是由 Kubernetes 中對應的 ingress 和 service 所定義的。整個通路鍊路可以歸納為下圖:

詳解 Rainbond Ingress 泛解析域名機制

開啟 對外服務 開關,相當于自動生成了以下資源:

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 泛解析域名機制

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 的解析記錄

是一個開源的雲原生應用管理平台,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes叢集,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續傳遞、應用運維、應用級多雲管理等。

Github:

https://github.com/goodrain/rainbond

官網:

https://www.rainbond.com?channel=aliyun

微信群:請搜尋添加群助手微信号

wylhzmyj

釘釘群:請搜尋釘釘群号

31096419