zoukankan      html  css  js  c++  java
  • 使用CoreDNS作为你的内网DNS服务器

    1. CoreDNS 是什么

    img
    CoreDNS官网
    CoreDNS开源

     

    CoreDNS是Golang编写的一个插件式DNS服务器,是Kubernetes 1.13 后所内置的默认DNS服务器
    采用的开源协议为Apache License Version 2
    CoreDNS也是CNCF孵化项目,目前已经从CNCF毕业。
    CoreDNS 的目标是成为 Cloud Native(云原生)环境下的 DNS 服务器和服务发现解决方案。
    你被爬虫啦,原文去https://www.iamle.com看
    官方口号
    CoreDNS: DNS and Service Discovery
    DNS和服务发现

    2. CoreDNS功能特性

    2.1 插件化(Plugins)

    CoreDNS插件链。 每个插件都执行DNS功能,例如Kubernetes服务发现,Prometheus指标或重写查询。
    还有非常多的其他插件,插件是CoreDNS核心理念就是插件化

    简单(Simplicity)

    努力把配置文件变得简单
    采用了Caddy中的DSL配置方案,即 Corefile 形式的配置文件
    一个最简单的配置文件可以为:

    .{}

    2.2 服务发现 (Service Discovery)

    核心域名系统通过Kubernetes插件与Kubernetes集成,或者通过etcd插件直接与etcd集成。
    还有redis插件等

    快速和弹性 ( Fast and Flexible)

    我们的目标是使CoreDNS快速高效。 它的插件也很灵活。 您可以只使用所需的插件编译CoreDNS。

    3. 配置一个内网自定义的服务化域名

    假设需要在内网实现
    sms.service A记录 10.6.6.2
    search.service A记录 10.6.6.3
    你被爬虫啦,原文去https://www.iamle.com看
    我们为CoreDNS手动增加解析记录
    那么Corefile配置文件为
    /etc/coredns/Corefile

    .:53 {
      # 绑定interface ip
      bind 127.0.0.1
      # 先走本机的hosts
      # https://coredns.io/plugins/hosts/
      hosts {
        # 自定义sms.service search.service 的解析
        # 因为解析的域名少我们这里直接用hosts插件即可完成需求
        # 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
        10.6.6.2 sms.service
        10.6.6.3 search.service
        # ttl
        ttl 60
        # 重载hosts配置
        reload 1m
        # 继续执行
        fallthrough
      }
      # file enables serving zone data from an RFC 1035-style master file.
      # https://coredns.io/plugins/file/
      # file service.signed service
      # 最后所有的都转发到系统配置的上游dns服务器去解析
      forward . /etc/resolv.conf
      # 缓存时间ttl
      cache 120
      # 自动加载配置文件的间隔时间
      reload 6s
      # 输出日志
      log
      # 输出错误
      errors
    }

    运行CoreDNS

    coredns -conf ./Corefile

    dig测试CoreDNS的自定义dns解析

    dig @127.0.0.1  sms.service
     
    ; <<>> DiG 9.10.6 <<>> @127.0.0.1 sms.service
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18343
    ;; 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:
    ;sms.service.           IN  A
     
    ;; ANSWER SECTION:
    sms.service.        120 IN  A   10.6.6.2
     
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Wed May 01 22:23:51 CST 2019
    ;; MSG SIZE  rcvd: 67

     可以看到 sms.service 的A记录已经为10.6.6.2

    更多配置探索参考CoreDNS官方手册

    4. 部署

    这里可以找到基于k8s,基于systemd的部署文件参考
    CoreDNS部署参考

    安装

    wget https://github.com/coredns/coredns/releases/download/v1.5.0/coredns_1.5.0_linux_amd64.tgz
    tar zxf coredns_1.5.0_linux_amd64.tgz -C /usr/bin/

    增加运行账户

    useradd coredns -s /sbin/nologin
    useradd coredns -s /sbin/nologin

    systemd的coredns配置文件
    /usr/lib/systemd/system/coredns.service

    [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=~
    ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
    ExecReload=/bin/kill -SIGUSR1 $MAINPID
    Restart=on-failure
     
    [Install]
    WantedBy=multi-user.target

    二进制文件+配置文件就能跑了,部署起来非常简单

    5. 参考

    CoreDNS 使用与架构分析

    https://www.iamle.com/archives/2679.html

  • 相关阅读:
    189. go学习1
    [Access][Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度 Invalid string or buffer length
    聊聊我对 GraphQL 的一些认知
    gin 源码阅读(2)
    gin 源码阅读(1)
    自动化测试感悟——感悟10条
    Python转exe神器pyinstaller
    在用Python时遇到的坑
    Python BeautifulSoup库 常用方法
    DCDC反馈电路串联的电阻
  • 原文地址:https://www.cnblogs.com/sandshell/p/11661640.html
Copyright © 2011-2022 走看看