目录

etcd

部署

写记录

coredns

配置文件

部署

解析etcd写入的记录

dig方式

nslookup方式


为了方便测试使用docker部署etcdcoredns.

etcd

部署

    docker run -d --network host -e ETCDCTL_API=3 --restart always \
    -v /var/lib/it/data/etcd:/etcd-data \
    --name etcd quay.io/coreos/etcd:latest \
    /usr/local/bin/etcd \
    --data-dir=/etcd-data --name node1 \
    --initial-advertise-peer-urls http://0.0.0.0:2380 --listen-peer-urls http://0.0.0.0:2380 \
    --advertise-client-urls http://0.0.0.0:2379 --listen-client-urls http://0.0.0.0:2379 \
    --initial-cluster node1=http://0.0.0.0:2380

 etcd使用的api是v3版本,官方说明在这:https://coredns.io/plugins/etcd/#examples

Before getting started with these examples, please setup etcdctl (with etcdv3 API) as explained here. This will help you to put sample keys in your etcd server.

 因此在使用docker启动etcd的时候使用环境变量-e ETCDCTL_API=3指定当前etcd api需要使用的版本。
我把etcd里面的数据挂载出来了,这个可以随意的。

写记录

进入到etcd容器内部,使用etcdctl命令操作

/ # etcdctl version
etcdctl version: 3.3.8
API version: 3.3
/ # etcdctl put /skydns/com/dynamic/coredns '{"host":"10.10.13.5", "port":8082}'
OK
/ # etcdctl get /skydns/com/dynamic/coredns 
/skydns/com/dynamic/coredns
{"host":"10.10.13.5", "port":8082}


coredns

配置文件

准备coredns配置文件,配置文件的文档在这:https://coredns.io/2017/07/23/corefile-explained/

.:53 {
    etcd {
        stubzones
        path /skydns
        endpoint http://<etcd-ip>:2379
        upstream 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf
    }
    health
    log
    errors
    cache 30
    reload 10s
}

如果是需要特定的域访问,如registry.local。则对应的Corefile文件配置如下

registry.local {
    etcd {
        stubzones
        path /skydns
        endpoint http://<etcd-ip>:2379
	    upstream 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf
    }
    health
    log
    errors
    cache 30
    reload 10s
}

 

只是为了测试etcd作为存储后端,配置文件就只涉及了与etcd相关的内容。记得替换配置文件中的<etcd-ip>为部署etcd服务的ip地址。

部署

docker run -d --restart always --name coredns  --network host -v /etc/coredns/Corefile:/Corefile coredns/coredns:1.8.3

建议使用最新版本的coredns(1.8.3),一开始我使用的是1.5.0版本,老是无法正常解析etcd里面添加的数据记录。

解析etcd写入的记录

使用coredns来解析之前在etcd里面创建的记录:/skydns/com/dynamic/coredns '{"host":"10.10.13.5", "port":8082}'。

dig方式

[root@storage coredns]# dig @10.10.13.12  coredns.dynamic.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @10.10.13.12 coredns.dynamic.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4762
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;coredns.dynamic.com.		IN	A

;; ANSWER SECTION:
coredns.dynamic.com.	30	IN	A	10.10.13.5

;; Query time: 78 msec
;; SERVER: 10.10.13.12#53(10.10.13.12)
;; WHEN: Fri Mar 12 10:38:32 UTC 2021
;; MSG SIZE  rcvd: 83

不熟悉的命令可在https://www.linuxcool.com/ 进行查询。

因为当前机器已经有别的dns server了,因此我在使用dig的时候指定了使用部署了coredns服务的服务器作为dns server。 

nslookup方式

[root@storage coredns]# nslookup coredns.dynamic.com 10.10.13.12
Server:		10.10.13.12
Address:	10.10.13.12#53

Name:	coredns.dynamic.com
Address: 10.10.13.5

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐