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路径下)




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

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