Docker部署Nacos & CoreDNS 实现动态DNS功能

本文通过Docker部署CoreDNS和Nacos-coredns-plugin测试Nacos 动态DNS功能

相关链接

版本约定:
Nacos:v1.0.0-RC2(Mar 22, 2019)
CoreDNS:v1.2.6
Nacos-coredns-plugin: 最新

1. 制作Docker镜像

为了兼容性考虑,我们直接采用nacos-coredns-plugin插件提供的编译脚本来构建Docker镜像。(该脚本会自动安装CoreDNS v1.2.6和相关依赖)

1.1 将Nacos-coredns-plugin下载到本地

git clone https://github.com/nacos-group/nacos-coredns-plugin.git

1.2 修改接口版本【重点】

将文件"nacos-coredns-plugin/nacos/util_and_comms.go"中的Version = "Nacos-go-client:v0.1.0"修改为Version = "Nacos-DNS:v1.0.1";

image.png

插件会将该Version信息加入请求Nacos服务的request头信息中,服务端以此区分响应内容格式。

2. 编写Dockerfile

文件目录如下:

- docker
  - nacos-coredns-plugin
  - Dockerfile (*当前创建*)
  - docker-compose.yml (*稍后创建*)
  - conf (*稍后创建*)
    - Corefile (*稍后创建*)

将工作目录切换到docker下,创建Dockerfile文件,加入如下内容:

FROM golang:1.12

ADD ./nacos-coredns-plugin /tmp/nacos-coredns-plugin

# 编译构建
RUN sh /tmp/nacos-coredns-plugin/bin/build.sh 

# 导出默认端口,tcp和udp的都要导出
EXPOSE 53 53/udp

VOLUME ["/etc/coredns/Corefile"]

CMD ["/go/src/coredns/coredns", "-conf", "/etc/coredns/Corefile"]

然后,构建镜像

docker build -t zzw/nacos-coredns .

3. 安装Nacos

在Nacos的release页面下载需要的包,采用单机形式启动Nacos服务。

Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

Windows
启动命令:

cmd startup.cmd

或者双击startup.cmd运行文件。

启动后,在http://192.168.1.105:8848/nacos/index.html即可访问管理界面,默认账户信息:nacos#nacos。

image.png

4. 注册Nacos服务

在此通过Java client向Nacos注册服务,引入maven依赖:

    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>1.0.0-RC2</version>
    </dependency>

编写注册代码:

NamingService naming = NamingFactory.createNamingService("127.0.0.1:8848");

Instance instance = new Instance();
instance.setClusterName("KanBan");
instance.setEnabled(true);
instance.setHealthy(true);
instance.setIp("192.168.0.105");
instance.setPort(8848);
instance.setServiceName("nacos.test.3");
instance.setWeight(1);

naming.registerInstance("nacos.test.3", instance);
// 保持当前线程,使服务健康检测能顺利通过
Thread.currentThread().sleep(999999999);
image.png

5. 通过docker-compose启动容器

编写docker-compose.yml文件:

version: '3'

services:
  coredns:
    image: zzw/nacos-coredns:latest
    container_name: coredns
    restart: always
    network_mode: "bridge"
    expose:
      - '53'
      - '53/udp'
    ports:
      - "53:53"
      - "53:53/udp"
    volumes:
      - ./conf/Corefile:/etc/coredns/Corefile

./conf/Corefile即为CoreDNS配置文件,内容如下:

. {
    nacos {
        upstream /etc/resolv.conf
        nacos_server 192.168.1.105
        nacos_server_port 8848
    }
    log
    errors
}

启动容器:

docker-compose up

#输出如下

Recreating coredns ...
Recreating coredns ... done
Attaching to coredns
coredns    | log directory: /root/logs/nacos-go-client/
coredns    | register nacos plugin
coredns    | setup nacos plugin
coredns    | init nacos plugin...
coredns    | upstreams:  [192.168.65.1:53]
coredns    | init nacos client.
coredns    | .:53
coredns    | 2019-03-31T02:49:01.374Z [INFO] CoreDNS-1.2.6
coredns    | 2019-03-31T02:49:01.374Z [INFO] linux/amd64, go1.12.1,
coredns    | CoreDNS-1.2.6
coredns    | linux/amd64, go1.12.1,

启动成功。

6. 测试

  • 在宿主机测试是否可以正确解析“nacos.test.3”域名:
# 命令行输入
dig @127.0.0.1 nacos.test.3

# 解析结果
; <<>> DiG 9.10.6 <<>> @127.0.0.1 nacos.test.3
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19338
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nacos.test.3.          IN  A

;; ANSWER SECTION:
nacos.test.3.       1   IN  A   192.168.0.105

;; ADDITIONAL SECTION:
_udp.nacos.test.3.  1   IN  SRV 0 0 8848 .

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 31 10:49:15 CST 2019
;; MSG SIZE  rcvd: 105

# 命令行输入
dig @127.0.0.1 www.baidu.com
# 解析结果
; <<>> DiG 9.10.6 <<>> @127.0.0.1 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40970
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.baidu.com.      376 IN  CNAME   www.a.shifen.com.
www.a.shifen.com.   376 IN  A   119.75.217.109
www.a.shifen.com.   376 IN  A   119.75.217.26

;; Query time: 47 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 31 10:49:59 CST 2019
;; MSG SIZE  rcvd: 149

7. 常见问题

image.png
2019-03-29 10:59:32.570 ERROR failed to unmarshal json: {"count":1,"doms":{"public":["nacos.test.3"]}}json: cannot unmarshal object into Go struct field AllDomNames.doms of type []string

参考本章:1.2小结即可解决

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容