所在位置:
首頁 >
營銷資訊 >
建站知識 > 基于CoreDNS和etcd實(shí)現(xiàn)動(dòng)態(tài)域名解析
基于CoreDNS和etcd實(shí)現(xiàn)動(dòng)態(tài)域名解析
時(shí)間:2023-02-07 09:24:01 | 來源:建站知識
時(shí)間:2023-02-07 09:24:01 來源:建站知識
在我開發(fā)的項(xiàng)目notr內(nèi)網(wǎng)穿透當(dāng)中引入DNS來解決一個(gè)問題:
- 動(dòng)態(tài)配置*.notr.tech的A記錄
每次客戶端連接都會修改其A記錄,解析到連接的服務(wù)器節(jié)點(diǎn)上。目前DNS版本還非常簡單,已經(jīng)開源成notrns項(xiàng)目。但是這個(gè)項(xiàng)目還有幾個(gè)問題:
- 數(shù)據(jù)存儲在boltdb當(dāng)中,只能本地用
- 如果流量比較大,需要部署多個(gè)dns節(jié)點(diǎn),數(shù)據(jù)同步問題比較麻煩
- 性能有待測試,能工作,但是工作的極限還不知道
通過github了解到CoreDNS和etcd兩個(gè)項(xiàng)目,就想著用CoreDNS代替notrns來做動(dòng)態(tài)域名解析,使用etcd來做存儲,使用etcd是基于以下考量:
- 遷移方便
- CoreDNS有etcd插件,不用額外開發(fā)
- 后續(xù)考慮引入etcd來做配置管理。
測試
- 啟動(dòng)etcd
- 啟動(dòng)coredns
CoreFile:
notr.tech { etcd { path /skydns endpoint http://localhost:2379 upstream } log}
- 使用etctrl設(shè)置域名解析
? bin git:(master) ./etcdctl put /skydns/tech/notr/yingjiu/ '{"host":"192.168.1.2"}'OK? bin git:(master) nslookup yingjiu.notr.tech 127.0.0.1Server: 127.0.0.1Address: 127.0.0.1#53Name: yingjiu.notr.techAddress: 192.168.1.2? bin git:(master) ./etcdctl put /skydns/tech/notr/yingjiu/ '{"host":"192.168.1.3"}'OK? bin git:(master) nslookup yingjiu.notr.tech 127.0.0.1Server: 127.0.0.1Address: 127.0.0.1#53Name: yingjiu.notr.techAddress: 192.168.1.3? bin git:(master)
接下來只需要在registry將etcd client集成進(jìn)去即可,改造完之后整個(gè)軟件變成了下圖所示的流程。
- 每次啟動(dòng)一個(gè)服務(wù)端節(jié)點(diǎn)之后,會往registry發(fā)送當(dāng)前節(jié)點(diǎn)的信息,目的是讓registry做負(fù)載均衡以及根據(jù)地理位置進(jìn)行調(diào)度,同時(shí)服務(wù)端節(jié)點(diǎn)也可以隨時(shí)插拔,隨時(shí)都可以添加和刪除節(jié)點(diǎn)。
- 把節(jié)點(diǎn)信息寫入數(shù)據(jù)庫,當(dāng)前使用mongodb
- 步驟一和步驟二初始化完成之后,用戶使用客戶端,先和registry節(jié)點(diǎn)連接,獲取接入的服務(wù)節(jié)點(diǎn)的信息
- registry從數(shù)據(jù)庫中取出在步驟二中存儲的節(jié)點(diǎn)信息,并根據(jù)節(jié)點(diǎn)當(dāng)前連接的客戶端數(shù)量和地理位置進(jìn)行一輪選擇,首選地理位置最近的,目前只劃兩個(gè)區(qū),中國區(qū)和海外區(qū),然后再根據(jù)客戶端連接數(shù)量排序選擇連接數(shù)最少的。
- 客戶端拿到節(jié)點(diǎn)信息之后和server建立tcp長連接
- server節(jié)點(diǎn)需要從registry請求用戶,限速等信息
- 從數(shù)據(jù)庫取出數(shù)據(jù)
- 生成域名解析記錄,將當(dāng)前用戶等域名映射到它當(dāng)前連接到server的公網(wǎng)IP
- 每次需要域名解析時(shí),由于配置了ns記錄,用戶的域名解析請求最終會到coredns,coredns再從etcd中取出
關(guān)鍵詞:動(dòng)態(tài),實(shí)現(xiàn)