skydns编译安装

2017年5月12日 发表评论 阅读评论

一、skydns概述

SkyDNS是kubernetes用于服务发现的默认的开源DNS服务,其开源在github。使用etcd作为数据存储。由于其在配置DNS信息时,几乎可以实时生效,所以SkyDNS比较适用于服务的动态注册。

二、编译安装

根据官方的示例,编译安装非常简单,如下:

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

不过由于golang网站是被墙的,所以很多依赖包在下载的时候会有问题 。在编译的时候也可能会碰到这样或哪样的问题,这里将编译过程中可能遇到的问题记录下。

错误1:缺少net包

[root@361way.com local]# go get github.com/skynetservices/skydns
package golang.org/x/net/context: unrecognized import path "golang.org/x/net/context" (https fetch: Get https://golang.org/x/net/context?go-get=1: unexpected EOF)
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: unexpected EOF)
package context: unrecognized import path "context" (import path does not begin with hostname)

解决方法:由于github 上也有这部分包,可以通过git clone将所需的包下载到相应的位置即可。比如我的$GOPATH位于/root/go/src下,可以使用以下命令下载依赖包到对应的位置

git clone  https://github.com/golang/net  /root/go/src/golang.org/x/net

错误2:golang版本问题

错误内容如下:

package context: unrecognized import path "context" (import path does not begin with hostname)

我编译使用的环境是centos7 ,默认yum源安装的go版本是1.6.3。网上查了下上面对应的报错信息,提示说是版本过低 。由于被墙的原因,这里选择国内镜像站下载 。具体安装步骤省略,可以参看我之前的博文---Golang的安装

错误3:找不到genproto包

[root@361way.com ~]# go get github.com/skynetservices/skydns
package google.golang.org/genproto/googleapis/rpc/status: unrecognized import path "google.golang.org/genproto/googleapis/rpc/status" (https fetch: Get https://google.golang.org/genproto/googleapis/rpc/status?go-get=1: unexpected EOF)

这个也可以从github上找,不过其对应的名称目前为go-genproto 。解决方法如下:

[root@361way.com google.golang.org]# git clone https://github.com/google/go-genproto
[root@361way.com google.golang.org]# mv go-genproto  genproto

不过编译出的文件有点大,可以通过使用如下参数,将编译的大小减小:

go build -ldflags "-s -w" 

'-s' 相当于strip掉符号表, 但是以后就没办法在gdb里查看行号和文件了。 '-w' flag to the linker to omit the debug information 告知连接器放弃所有debug信息 。如果还想进一步减小文件大小,可以使用upx 进行压缩。

三、使用

将编译好的skydns文件copy到其他主机的/usr/local/bin目录下就可以像使用一般的命令一样使用该工具了

go-build-skydns

其主要使用到的参数说明如下:

dns_addr: SkyDNS需要监听的IP:port,默认127.0.0.1:53
domain: SkyDNS 专属域名,默认skydns.local.
dnssec:开启DNSSEC
hostmaster:主机管理者邮件地址
local:可选的SkyDNS实体的唯一值,默认为空。当查询local.dns.skydns.local时返回这个值
round_robin:开启A的AAAA响应的round-robin功能,默认true。注意包中包含不止一个CNAME被免除
nameservers:当不属于当前DNS中记录时,转发(递归)DNS请求至nameservers(IP:port的数组),默认转到/etc/resolv.conf中的服务列表
no_rec:不提供递归服务(如:转发至在-nameservers)提供的服务列表
read_timeout:DNS与etcd的网络通讯超时
ttl:当etcd中未设置时,默认以秒为单位来作为应答时间,默认时间为3600
min_ttl: 使用NXDOMAIN的最小ttl时间设置,默认为30
scache: DNSSEC签名的容量,默认10000条记录
rcache: 响应缓存,默认为0条消息
rcache_ttl: 缓存响应ttl,默认为60
systemd: 绑定到由systemd激活的socket,将会忽略-addr
path-prefix: 后台(etcd)路径前缀,默认为skydns(例如:如果设置为mydns,SkyDNS的配置对象将存储在key为/mydns/config路径下)

四、RHEL7下配置开机自启动

RHEL7下使用了systemctl 进行自启动管理,具体使用命令如下:

# systemctl status skydns
skydns.service - SkyDNS service
   Loaded: loaded (/usr/lib/systemd/system/skydns.service; enabled)
   Active: active (running) since 四 2017-03-23 18:41:19 CST; 2 months 17 days ago
 Main PID: 21665 (skydns)
   CGroup: /system.slice/skydns.service
           └─21665 /usr/local/bin/skydns -no-rec
3月 23 18:41:19 ZJHZ-CMREAD-ETCD01-VBUS-SD systemd[1]: Started SkyDNS service.
3月 23 18:41:19 ZJHZ-CMREAD-ETCD01-VBUS-SD skydns[21665]: 2017/03/23 18:41:19 skydns: falling back to default configuration, could not read from etcd: 100: Key not found (/skydns/con... [41898257]
3月 23 18:41:19 ZJHZ-CMREAD-ETCD01-VBUS-SD skydns[21665]: 2017/03/23 18:41:19 skydns: metrics enabled on :5300/metrics
3月 23 18:41:19 ZJHZ-CMREAD-ETCD01-VBUS-SD skydns[21665]: 2017/03/23 18:41:19 skydns: ready for queries on migu. for tcp://0.0.0.0:53 [rcache 0]
3月 23 18:41:19 ZJHZ-CMREAD-ETCD01-VBUS-SD skydns[21665]: 2017/03/23 18:41:19 skydns: ready for queries on migu. for udp://0.0.0.0:53 [rcache 0]
Hint: Some lines were ellipsized, use -l to show in full.

/usr/lib/systemd/system/skydns.service 服务文件配置如下:

# cat /usr/lib/systemd/system/skydns.service
[Unit]
Description=SkyDNS service
After=etcd.service
[Service]
Type=simple
EnvironmentFile=-/etc/skydns/skydns.conf
User=root
ExecStart=/usr/local/bin/skydns -no-rec
[Install]
WantedBy=multi-user.target

引用的/etc/skydns/skydns.conf 文件配置格式如下:

# cat /etc/skydns/skydns.conf
[basic]
# list of etcd machines, "http://localhost:4001,http://etcd.example.com:4001"
ETCD_MACHINES="http://192.168.23.244:2379,http://192.168.23.245:2379,http://192.168.43.91:2379"
# path of TLS client certificate - private key
#ETCD_TLSKEY=""
# path of TLS client certificate - public key
#ETCD_TLSPEM=""
# path of TLS certificate authority public key
#ETCD_CACERT=""
# specify address to bind to
SKYDNS_ADDR="0.0.0.0:53"
# set a default domain if not specified by etcd config
SKYDNS_DOMAIN="migu"
# set a list of nameservers to forward DNS requests to when not authoritative for a domain, "8.8.8.8:53,8.8.4.4:53"
#SKYDNS_NAMESERVERS=""
# [statistics]
#GRAPHITE_SERVER=""
#GRAPHITE_PREFIX=""
#STATHAT_USER=""
# [prometheus]
# port where the HTTP server for prometheus will run
PROMETHEUS_PORT="5300"
# path for the metrics, defaults to /metrics
PROMETHEUS_PATH="/metrics"
# namespace used in the metrics, no default
PROMETHEUS_NAMESPACE="migu"
# subsystem used in the metric, defaults to skydns
PROMETHEUS_SUBSYSTEM="skydns"




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Docker/k8s/etcd 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.