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自成一体,看来要凉凉的节奏....

 

 

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