文档章节

SkyDns2 实战

China_OS
 China_OS
发布于 2018/09/04 17:08
字数 1003
阅读 231
收藏 0

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

 

 

© 著作权归作者所有

共有 人打赏支持
China_OS
粉丝 421
博文 460
码字总数 513906
作品 0
静安
技术主管
私信 提问
K8S集群部署Coredns服务

k8s集群中的应用通常是通过ingress实现微服务发布的,前文介绍过在K8S集群中使用traefik实现服务的自动发布,其实现方式是traefik通过集群的DNS服务来解析service对应的集群地址(clusterip...

ylw6006
2018/04/27
0
0
【视频分享】尚硅谷Java视频教程_RBAC权限实战视频教程

        本视频讲授RBAC权限模型的设计、以及在项目中的应用 。 1. 使用Maven进行项目构建 。 2. 页面设计采用响应式前端框架BootStrap 。 3. 采用多种方式展现用户数据:树形结构(z...

后端编程嘟
2018/05/24
0
0
【转】WF4.0实战系列索引

WF4.0实战系列索引 从WF4.0 betal1出来的时候就开始使用WF4.0,由于资料不多,学习过程也非常艰苦。今年四月份的时候打算写WF4.0实战系列,由于今年是本命年故坚持写了24篇文章。这个系列的文...

夏春涛
2013/08/18
0
0
Spring Boot揭秘与实战

Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控 Spring Boot 提供运行时的应用监控和管理功能。本文,我们通过 HTTP 实现对应用的监控和管理。 博客地址:http://blog.720ui.com...

掘金官方
2017/12/11
0
0
A Year Of Books - 2016 Javaer书单

A Year Of Books – 2016 Javaer书单 (PS:欢迎留言推荐,很多来自白衣大哥的推荐) 1. OS & Networking 《编码 : 隐匿在计算机软硬件背后的语言》 《Linux内核设计与实现 第3版》 《WireShark...

泥沙砖瓦浆木匠
2016/04/25
128
2

没有更多内容

加载失败,请刷新页面

加载更多

二进制取反

取反,是Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。 概念 编辑 补码的规定如下: 对正数来说,最高位为0,其余各位代表数值本身(以二进制表示)...

天王盖地虎626
57分钟前
5
0
OSChina 周一乱弹 —— 可乐进化史

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 分享Radiohead的单曲《Creep》 《Creep》- Radiohead 手机党少年们想听歌,请使劲儿戳(这里) @EdmondFrank :刚...

小小编辑
今天
814
16
容器服务

简介 容器服务提供高性能可伸缩的容器应用管理服务,支持用 Docker 和 Kubernetes 进行容器化应用的生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。 产品架构 容器服务...

狼王黄师傅
昨天
5
0
高性能应用缓存设计方案

为什么 不管是刻意或者偶尔看其他大神或者大师在讨论高性能架构时,自己都是认真的去看缓存是怎么用呢?认认真真的看完发现缓存这一块他们说的都是一个WebApp或者服务的缓存结构或者缓存实现...

呼呼南风
昨天
25
0
寻找一种易于理解的一致性算法(扩展版)

摘要 Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可...

Tiny熊
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部