SkyDns2 實戰

    今天來聊聊skydns,在k8s中默認使用skydns做服務發現,比起單純的etcd和consul來做服務發現,skydns有哪些優勢?從名字上就能看出來,使用dns機制做服務發現,而數據則是存儲在etcd中的。看看官方如何介紹的:SkyDNS是一種分佈式服務,用於在etcd之上構建服務發現,它利用DNS查詢來發現可用的服務,這是通過利用DNS中的SRV記錄來完成的。

    SRV?大家平常可能CNAME和A記錄用的多,SRV是個什麼東西?SRV是DNS記錄中一種,用來指定服務地址,與常見的A記錄、cname不同。SRV中除了記錄服務器的地址,還記錄了服務的端口,並且可以設置每個服務地址的優先級和權重,訪問服務的時候,本地的DNS resolver從DNS服務器查詢到一個地址列表,根據優先級和權重,從中選取一個地址作爲本次請求的目標地址。

環境

ubuntu16.04-1 etcd3 skydns 172.31.68.241
ubuntu16.04-3 client    

    ps:環境爲之前的docker swarm集羣機器

部署

    啓動etcd

/opt/programs/etcd_3.3.9/etcd --name ubuntu16.04-1 --data-dir /var/lib/etcd --listen-client-urls http://172.31.68.241:2379 --listen-peer-urls http://172.31.68.241:2380 --advertise-client-urls http://172.31.68.241:2379 --initial-advertise-peer-urls http://172.31.68.241:2380

    編譯skydns

go get github.com/skynetservices/skydns
cd $GOPATH/src/github.com/skynetservices/skydns
go build -v

    ps:你大概率用現在github上代碼是編譯不通的,最新版2.5.3a竟然是2015年的版本,在容器化日新月異的今天,這樣軟件能跟上社區潮流?乾的過consul?既然無法編譯通過,那就直接下載編譯好的唄

wget 'https://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/x86_64/os/Packages/s/skydns-2.5.3-0.1.a.git8688008.fc24.x86_64.rpm'

    啓動skydns

export ETCD_MACHINES='http://172.31.68.241:2379'
./skydns -addr 172.31.68.241:53 -domain test.nn -nameservers 202.96.209.133:53

 

    ps:skydns設置一個自定義的domain叫test.nn。skydns -v可以看到相關參數的解釋,一定要在啓動之前設置後端etcd地址的環境變量

實驗

    設置NS

./etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/dns/ns '{"host":"172.31.68.241"}'
{"host":"172.31.68.241"}

    ps:如果有多個ns記錄,則是/skydns/nn/test/dns/ns/ns1..10 '{}'來設置ns記錄,NS的記錄值只能是ip,不能是name,ns記錄一般在etcd中存儲在'domain'/dns/ns下面

        查看

dig @172.31.68.241 -t NS test.nn

    Wildcards查找

etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/host '{"host": "172.31.68.245"}'
etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/host2 '{"host": "www.google.com","port":8080}'
etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/host3 '{"host": "172.31.68.246"}'

    ps:添加了三個服務,兩個是ip,一個是域名

        查看

        ps:可以看出所有的test.nn記錄都被找到了

    CNAME查詢

dig @172.31.68.241 SRV host2.test.nn

        查看

        ps:可以看到先把host2.test.nn解析成www.google.com,由於我們在啓動skydns的時候設置了上級dns,所以會利用上級的公網dns再把www.google.com解析成一個具體的地址

    SRV查詢

dig @172.31.68.241 SRV host2.test.nn

        查看

        ps:注意看SRV的權重和端口

    LB查詢

        domain爲pp.test.nn

./etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/pp/x1 '{"host": "172.31.68.21"}'
./etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/pp/x2 '{"host": "172.31.68.22"}'
./etcdctl --endpoint http://172.31.68.241:2379 set /skydns/nn/test/pp/x3 '{"host": "172.31.68.23"}'

        查看

    SRV多記錄

    Groups

/skydns/local/domain/
/skydns/local/domain/a - {"host": "127.0.0.1", "group": "g1"}
/skydns/local/domain/b - {"host": "127.0.0.2", "group": "g1"}
/skydns/local/domain/subdom/
/skydns/local/domain/subdom/c - {"host": "127.0.0.3", "group": "g2"}
/skydns/local/domain/subdom/d - {"host": "127.0.0.4", "group": "g2"}

    ps:當你查詢domain.local的時候,會返回127.0.0.1和127.0.0.2,當你查詢subdom.domain.local的時候,會返回127.0.0.3和127.0.0.4

 

    看起來只要信息註冊到etcd後,skydns可以做到簡單的服務發現,但是比起consul有什麼優勢?skydns沒有自己的存儲,consul自成一體,看來要涼涼的節奏....

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章