Coredns容器部署

Coredns容器部署

1. 基本概念

CoreDNS 是 Golang 编写的一个插件式 DNS 服务器,是 Kubernetes 1.13 后所内置的默认 DNS 服务器。CoreDNS 的目标是成为 cloud-native 环境下的 DNS 服务器和服务发现解决方案。

 

官网: https://coredns.io/

Github: https://github.com/coredns/coredns

 

特性:

  • 插件化(Plugins)

基于 Caddy 服务器框架,CoreDNS 实现了一个插件链的架构,将大量应用端的逻辑抽象成 plugin 的形式(如 Kubernetes 的 DNS 服务发现,Prometheus 监控等)暴露给使用者。CoreDNS 以预配置的方式将不同的 plugin 串成一条链,按序执行 plugin 的逻辑。从编译层面,用户选择所需的 plugin 编译到最终的可执行文件中,使得运行效率更高。CoreDNS 采用 Go 编写,所以从具体代码层面来看,每个 plugin 其实都是实现了其定义的 interface 的组件而已。第三方只要按照 CoreDNS Plugin API 去编写自定义插件,就可以很方便地集成于 CoreDNS。

  • 配置简单化

引入表达力更强的 DSL,即 Corefile 形式的配置文件(也是基于 Caddy 框架开发)。

  • 一体化的解决方案

区别于 kube-dns,CoreDNS 编译出来就是一个单独的二进制可执行文件,内置了 cache,backend storage,health check 等功能,无需第三方组件来辅助实现其他功能,从而使得部署更方便,内存管理更为安全。

2. 部署测试

2.1安装软件包

yum -y install bind-utils  docker-ce docker-compose

 

# 添加daemon.json文件, 红色字体根据客户环境进行替换

cat << EOF > /etc/docker/daemon.json

{

    "oom-score-adjust": -1000,

    "log-driver": "json-file",

    "log-opts": {

    "max-size": "100m",

    "max-file": "3"

    },

    "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com"],

     "max-concurrent-downloads": 5,

    "max-concurrent-uploads": 5,

    "storage-driver": "overlay2",

    "storage-opts": [

    "overlay2.override_kernel_check=true"

    ]

}

EOF

#启动docker

systemctl enable –now docker

 

#创建安装目录 //目录供参考

mkdir –p /root/coredns

上传docker-compose.yml到coredns目录

#启动

docker-compose up –d

 

#检查是否运行正常

docker-compose ps

2.2测试

2.2.1修改corefile

Corefile释义 https://coredns.io/manual/toc/#configuration

log 释义     https://coredns.io/plugins/log/

#本次测试的server是private.cloud

[root@test01 config]# cat corefile

.:53 {

    forward . 114.114.114.114 223.5.5.5

    log

errors

}

 

private.cloud:53 {

  file /etc/coredns/cloud.org

  log

  errors

  cache

}

#配置文件释义:

每个括号中的部分都表示一个 DNS“区域”

.:53,表示该区域是全局的(“.”表示所有流量),并且它正在侦听端口 53(默认为 udp)。我们在此处设置的参数将应用于所有未指定特定区域的传入 DNS 查询,例如要解析的查询github.com。我们在下一行看到,我们将此类请求转发到辅助 DNS 服务器进行解析;在这种情况下,对该区域的所有请求都将简单地转发到位于114.114.114.114和 的Aliyun DNS 服务器223.5.5.5。

 

private.cloud为本次测试指定的域名,也侦听 UDP 端口 53。对属于该区域的主机的任何查询都将引用文件数据库(类似于 bind 的方式)在那里进行查找;更多关于这一点。例如,对“server.private.cloud”的查询将绕过“.”的全局区域。并落入为“private.cloud”提供服务的区域,并使用该file指令将引用数据库文件以找到正确的记录

2.2.3编写test.org

#vim cloud.org

private.cloud.        IN  SOA dns.private.cloud. robbmanes.private.cloud. 2015082541 7200 3600 1209600 3600

mysql.private.cloud.            IN  A   10.1.0.1

redis.private.cloud.            IN  A   10.1.0.1

rabbitmq.private.cloud.         IN  A   10.1.0.1

elasticsearch.private.cloud.    IN  A   10.1.0.1

kafka.private.cloud.            IN  A   10.1.0.1

mongo.private.cloud.            IN  A   10.1.0.1

postgres.private.cloud.         IN  A   10.1.0.1

geoserver.private.cloud.        IN  A   10.1.0.1

registry.private.cloud.         IN  A   10.1.0.2

discovery.private.cloud.        IN  A   10.1.0.2

gateway.private.cloud.          IN  A   10.1.0.3

monitor.private.cloud.          IN  A   10.1.0.3

xxl.private.cloud.              IN  A   10.1.0.3

#soa配置文件参考

https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/SOA-NSrecords.html

2.2.4重启服务

docker-compose restart

2.2.5测试

#预期结果:dig解析出的A记录应与cloud.org中的配置一致。

#验证

结果可见下图:

  

 

posted @ 2022-07-31 17:37  XXLLA  阅读(417)  评论(0编辑  收藏  举报