今日天气
  1. 博客/

以二进制形式部署 CoreDNS 服务器

·513 字·2 分钟· ·
DNS coredns dns systemd
Johny
作者
Johny
熟练的 云原生搬砖师
Table of Contents

背景
#

CoreDNS 是 Golang 编写的一个插件式 DNS 服务器,Kubernetes 1.13 后内置的默认 DNS 服务器。特点如下:

  • 插件化:基于 Caddy 框架,实现了一个插件链的架构,将不同应用端功能抽象成插件形式,官网展示 插件列表
  • 配置简单化:使用 Corefile DSL 语法形式的配置文件,学习成本低。
  • 一体化的解决方案:单独二进制可执行程序,内置插件已满足大多需求。

环境说明

  • 操心系统: ARMBIAN 5.77
  • 主机IP:192.168.8.113

安装部署
#

  • 下载安装 CoreDNS

    wget  https://github.com/coredns/coredns/releases/download/v1.8.5/coredns_1.8.5_linux_arm64.tgz
    
    tar xf coredns_1.8.5_linux_arm64.tgz
    
    mv coredns /usr/local/bin/
    
  • 创建启动用户

    useradd coredns -s /sbin/nologin
    
  • 创建 Corefile 服务配置文件

    mkdir -p /data/coredns
    
    cat > /etc/coredns/Corefile << EOF
    .:53 {
      bind 0.0.0.0
      hosts {
        #hangup
        ttl 60
        reload 1m
        fallthrough
      }
      forward . /etc/resolv.conf
      cache {
        success 65536 3600 300
        denial 8192 600 60
        prefetch 1 60m 10%
      }
      reload 6s
      log
      errors
    }
    EOF
    
    chown coredns:coredns -R /etc/coredns
    

    配置详解

    • ttl 记录保存时间以 为单位
    • fallthrough 如果 hosts 中找不到,则进入下一个阶段继续查找,如上述配置文件中,将转发给 系统默认 DNS 进行解析
    • reload 自动重载配置文件
    • forward 将解析转发到系统配置的上游 DNS 服务器进行解析
    • cache DNS 记录缓
    • reload 自动加载配置文件的间隔时间
    • log 打印日志
    • errors 打印错误日志
  • 创建 systemd 配置文件

    cat > /lib/systemd/system/coredns.service << EOF
    [Unit]
    Description=CoreDNS DNS server
    Documentation=https://coredns.io
    After=network.target
    
    [Service]
    PermissionsStartOnly=true
    LimitNOFILE=1048576
    LimitNPROC=512
    CapabilityBoundingSet=CAP_NET_BIND_SERVICE
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    NoNewPrivileges=true
    User=coredns
    WorkingDirectory=/etc/coredns/
    ExecStart=/usr/local/bin/coredns -conf=/etc/coredns/Corefile
    ExecReload=/bin/kill -SIGUSR1 \$MAINPID
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  • 添加 主机记录

    sed -i "/hangup/a 192.168.8.1 treesir.io" /etc/coredns/Corefile
    
  • 删除主机记录

    sed -i "/treesir.io/d" /etc/coredns/Corefile
    
  • 启动服务

    systemctl daemon-reload \
    && systemctl enable coredns.service --now \
    && systemctl status coredns.service 
    

测试使用
#

测试添加 A 记录 www.treesir.io192.168.8.1

sed -i "/hangup/a 192.168.8.1 www.treesir.io" /etc/coredns/Corefile


dig www.treesir.io @192.168.8.113

dig www.baidu.com @192.168.8.113

image-20210925171254777

image-20210925171515073

测试解析百度,同样正常得到解析。

TODO
#

参考文档

https://coredns.io/plugins/

相关文章

Coredns 出现间断性无法正常解析域名问题
·1536 字·4 分钟·
k8s coredns dns
kubernetes 集群中 控制平面 组件频繁发生重启的问题排查记录
·688 字·2 分钟·
k8s coredns flannel fix
使用 Docker Compose 5分钟 部署 一台邮件服务器
·2610 字·6 分钟·
docker email install dokcer-compose
记录一次 JupyterLab 插件打包问题的修复
·1485 字·3 分钟·
k8s devops jupyterlab jenkins
使用 Cronjob 定时清理 ElasticSearch 中的日志索引
·455 字·1 分钟·
efk k8s shell cronjob
初探 K8s VPA 垂直更改 Pod 资源请求
·643 字·2 分钟·
k8s vpa pod