<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      云原生 | 企業內使用 CoreDNS 構建高性能、插件化的DNS服務器

      [ 點擊 ?? 關注「 全棧工程師修煉指南」公眾號 ]

      設為「?? 星標」帶你從基礎入門全棧實踐 再到 放棄學習
      涉及 網絡安全運維、應用開發、物聯網IOT、學習路徑 、個人感悟 等知識分享。

      希望各位看友多多支持【關注、點贊、評論、收藏、投幣】,助力每一個夢想。

      WeiyiGeek Blog's - 花開堪折直須折,莫待無花空折枝 】
      作者主頁: 【 https://weiyigeek.top
      博客地址: 【 https://blog.weiyigeek.top 】
      作者答疑學習交流群:歡迎各位志同道合的朋友一起學習交流【點擊 ?? 加入交流群】, 或者關注公眾號回復【學習交流群】。



      首發地址: https://mp.weixin.qq.com/s/hAMvwSqWfCQmGM_XzeqOOQ


      0X00 前言簡述

      在企業高可用DNS架構部署方案中我們使用的是傳統老牌DNS軟件Bind, 但是現在不少企業內部流行容器化部署,所以也可以將Bind替換為 CoreDNS ,由于 CoreDNS 是 Kubernetes 的一個重要組件,穩定性不必擔心,于此同時還可將K8S集群SVC解析加入到企業內部的私有的CoreDNS中。

      CoreDNS 介紹

      什么是CoreDNS?

      CoreDNS 由 Go 語言編寫是一個高度可擴展和靈活的(插件式) DNS 服務器,可以在多平臺環境上運行,來自Cloud Native Computing Foundation(云原生基金會)的開源畢業項目,它的設計目標是易于使用且具有強大的功能。

      除此之外,CoreDNS與其他DNS服務器不同,例如(所有優秀的)BINDKnotPowerDNSUnbound(技術上是一個解析器,但仍然值得一提)因為它非常靈活,幾乎所有功能都外包到插件中,插件可以是獨立的,也可以協同工作以執行“DNS功能”,這使得 CoreDNS 不僅可以用作傳統的 DNS 服務器,還可以用作服務發現、負載均衡和其他用途。

      coredns 官方文檔:https://coredns.io/manual/toc/
      coredns 發布版本: https://github.com/coredns/coredns/releases/


      那么什么是“DNS功能”呢?

      CoreDNS 其目的是易于使用且具有強大的功能,我們將其定義為一個軟件實現 CoreDNS 插件 API, 實現的功能可能會大相徑庭,有本身不會創建響應(例如指標或緩存)但會添加功能的插件,然后有一些插件確實會生成一個回應。這些也可以做任何事情:有與 Kubernetes 通信以提供服務發現的插件,從中讀取數據的插件 文件或數據庫。


      CoreDNS 核心特點

      • 插件架構(Plugins):通過插件,可以輕松擴展 CoreDNS 的功能。插件可以用于處理 DNS 請求、轉發請求、緩存結果、記錄日志等。插件的使用和配置都非常簡單。

      • 性能和可靠性:CoreDNS 使用 Go 語言編寫,具有很高的性能。同時,它具有自動重試、健康檢查和負載均衡等功能,以確保 DNS 服務的可靠性。

      • 易于配置:CoreDNS 使用名為 Caddyfile 的配置文件格式,這種格式簡單易懂,易于編寫和維護。

      • Kubernetes 集成:CoreDNS 可以與 Kubernetes 集成,作為集群內的 DNS 服務器。自 Kubernetes 1.11 版本起,CoreDNS 成為 Kubernetes 的默認 DNS 服務器,替代了之前的 kube-dns。

      其實從功能角度來看,CoreDNS 更像是一個通用 DNS 方案(類似于 BIND),然后通過插件模式來極大地擴展自身功能,從而可以適用于不同的場景(比如 Kubernetes)。正如官方博客所說:CoreDNS is powered by plugins.


      0x01 安裝部署

      1.編譯方式安裝

      $ git clone -b v1.11.1 https://github.com/coredns/coredns
      $ cd coredns
      $ make
      # 如果本地沒有go環境,可以使用docker 的go鏡像進行編譯
      $ docker run --rm -i -t -v $PWD:/v -w /v golang:1.21 make
      

      2.二進制方式安裝

      # 指定最新版本
      COREDNS_VERSION="1.11.1"
      # 官方下載
      wget -O /tmp/coredns_${COREDNS_VERSION}_linux_amd64.tgz https://github.com/coredns/coredns/releases/download/v${COREDNS_VERSION}/coredns_${COREDNS_VERSION}_linux_amd64.tgz
      # 代理下載
      wget -O /tmp/coredns_${COREDNS_VERSION}_linux_amd64.tgz https://ghproxy.com/https://github.com/coredns/coredns/releases/download/v${COREDNS_VERSION}/coredns_${COREDNS_VERSION}_linux_amd64.tgz
      # 解壓
      tar xf /tmp/coredns_${COREDNS_VERSION}_linux_amd64.tgz -C /usr/local/bin
      # 軟連接設置
      ln -s /usr/local/bin/coredns /usr/bin/coredns
      

      3.部署配置&驗證

      Step 1.為了安全,此處為 coredns 服務創建獨立用戶,以及使用systemd管理此服務。

      # 添加獨立用戶
      useradd coredns -s /sbin/nologin
      
      # 創建配置目錄文件及權限
      mkdir -vp /etc/coredns/
      touch /etc/coredns/Corefile
      chown -R coredns /etc/coredns/Corefile
      
      # 創建systemd服務管理清單
      tee -a /usr/lib/systemd/system/coredns.service <<'EOF'
      [Unit]
      Description=CoreDNS DNS server
      Documentation=https://coredns.io
      After=network.target
      
      [Service]
      LimitNOFILE=1048576
      LimitNPROC=512
      CapabilityBoundingSet=CAP_NET_BIND_SERVICE
      AmbientCapabilities=CAP_NET_BIND_SERVICE
      PermissionsStartOnly=true
      NoNewPrivileges=true
      WorkingDirectory=/etc/coredns
      User=coredns
      ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
      ExecReload=/bin/kill -SIGUSR1 $MAINPID
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
      # Reload systemd manager configuration
      systemctl daemon-reload                       
      
      # Auto Start Configuration
      systemctl enable coredns
      

      Step 2.設置防火墻規則,以及創建生成coredns服務所需使用的配置文件。

      # 設置防火墻允許DNS服務53端口網絡通行
      firewall-cmd --permanent --add-service=dns
      firewall-cmd --reload
      
      # 使用 host 插件配置一個簡單解析
      tee -a /etc/coredns/Corefile <<'EOF'
      .:53 {
        # 綁定所有接口
        bind 0.0.0.0
        # hosts 插件: https://coredns.io/plugins/hosts/
        hosts {
          # 自定義 weiyigeek.top 子域名解析
          # 因為解析的域名少我們這里直接用hosts插件即可完成需求
          # 如果有大量自定義域名解析那么建議用file插件使用 符合RFC 1035規范的DNS解析配置文件
          192.168.1.2 www.weiyigeek.top
          192.168.1.3 blog.weiyigeek.top
          192.168.1.250 gitlab.weiyigeek.top
          192.168.1.251 harbor.weiyigeek.top
          # ttl
          ttl 60
          # 重載hosts配置
          reload 1m
          # 繼續執行
          fallthrough
        }
        # file enables serving zone data from an RFC 1035-style master file.
        # 最后所有的都轉發到系統配置的上游dns服務器去解析
        forward . 223.6.6.6
        # 緩存時間ttl
        cache 120
        # 自動加載配置文件的間隔時間
        reload 6s
        # 輸出日志
        log
        # 輸出錯誤
        errors
      }
      EOF
      
      # 啟動并查看coredns服務
      systemctl start coredns && systemctl status coredns
      
      # 查看監聽端口服務
      lsof -i :53
        # COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
        # coredns 4548 coredns    7u  IPv6  36174      0t0  TCP *:domain (LISTEN)
        # coredns 4548 coredns    8u  IPv6  36176      0t0  UDP *:domain
      

      Step 3.簡單測試部署的Coredns服務是否正常工作。

      • 在 Windows 中使用 nslookup 工具解析指定子域名
      # 配置在coredns中的子域解析
      [weiyigeek@localhost] C:\Users\WeiyiGeek $  nslookup -qt=a gitlab.weiyigeek.top 10.20.176.120
      服務器:  UnKnown
      Address:  10.20.176.120
      
      名稱:    gitlab.weiyigeek.top
      Address:  192.168.1.250
      
      # coredns 不存在的子域解析將轉發給上游DNS服務器解析
      [weiyigeek@localhost] C:\Users\WeiyiGeek $  nslookup -qt=a api.weiyigeek.top 10.20.176.120
      服務器:  UnKnown
      Address:  10.20.176.120
      
      非權威應答:
      名稱:    api.weiyigeek.top
      Address:  82.156.18.253
      
      • 在 Linux (redhat/centos/kylinos) 中 dig 工具解析指定子域名
      dnf install bind-utils -y
      dig harbor.weiyigeek.top @10.20.176.120
      dig api.weiyigeek.top @10.20.176.120
      

      weiyigeek.top-dig工具驗證解析圖


      0x02 CoreDNS 配置說明

      描述: 通常情況下,一個典型的 Corefile 格式如下所示:

      # ZONE : 定義 server 負責的 zone,PORT 是可選項,默認為 53;
      ZONE:[PORT] {
      # PLUGIN : 定義 server 所要加載的 plugin, 并且每個 plugin 可以有多個參數;
       [PLUGIN] ...
      }
      

      例如,設置根域 . 的解析以及自定義域名的正向與反向解析。

      # 根域, 監聽 53 端口
      .:53 {
        # whoami 插件:返回解析器的本地 IP 地址、端口和傳輸,且請求結束時下一個插件將不會被調用。
        whoami
        # .....
      }
      
      # 定義 Server Zone (正向解析)
      weiyigeek.top {
        whoami
        # 可使用 host 或者 file 方法指定解析記錄。
        file db.weiyigeek.top
      
      }
        # 同一個 server 但是負責不同 zone 的解析,有不同插件鏈。
      weiyigeek.cn {
        whoami
        # 使用 host 或者 file 方法指定解析記錄。
        host db.weiyigeek.top
      }
      
      # 定義 Reverse Zone (反向解析 IP 地址對應的域名)
        # 方式1
      0.0.10.in-addr.arpa {
        whoami
      }
        # 方式2
      10.0.0.0/24 {
        whoami
      }
      
      # CoreDNS 除了支持 DNS 協議,也支持 TLS 和 gRPC,即 DNS-over-TLS[3] 和 DNS-over-gRPC 模式
      tls://example.org:1443 {
        #...
      }
      

      示例演示:
      假若,CoreDNS 的 Corefile 配置文件的內容如下所示:

      coredns.io:5300 {
        file db.coredns.io
      }
      
      example.io:53 {
        log
        errors
        file db.example.io
      }
      
      example.net:53 {
        file db.example.net
      }
      
      .:53 {
        kubernetes
        proxy . 8.8.8.8
        log
        health
        errors
        cache
      }
      

      從配置文件來看,我們定義了兩個 server(盡管有 4 個區塊),分別監聽在 5300 和 53 端口, 每個進入到某個 server 的請求將按照 plugin.cfg 定義順序執行其已經加載的插件。

      其邏輯圖可如下所示, 從圖中我們需要注意盡管在 .:53 配置了 health 插件,但是它并為在上面的邏輯圖中出現,其原因是,該插件并未參與請求相關的邏輯(即并沒有在插件鏈上),只是修改了 server 配置。
      一般地,我們可以將插件分為兩種:Normal 插件(參與請求相關的邏輯,且插入到插件鏈中) 和 Other 插件 (不參與請求相關的邏輯,也不出現在插件鏈中,只是用于修改 server 的配置, 例如 health,tls 等插件.)

      weiyigeek.top-圖


      0x03 CoreDNS 插件說明

      插件分類

      描述: coredns官方對于插件的分類基本可以分為三種:Plugins(默認)、External Plugins其他,其中Plugins一般都會被默認編譯到coredns的預編譯版本中,而External Plugins則不會,官方的文檔對外部插件的定義有著明確的解釋,主要要求大概是有用、高效、符合標準、文檔齊全、通過測試等。

      官方插件幫助文檔: https://coredns.io/plugins/

      通過官方的二進制部署的coredns可使用--plugins參數驗證可用的coredns插件,

      $ coredns -plugins
      Server types:
        dns
      Caddyfile loaders:
        flag
        default
      Other plugins:
        dns.acl
        dns.any
        dns.auto
        dns.autopath
        dns.azure
        dns.bind
        dns.bufsize
        dns.cache
        dns.cancel
        dns.chaos
        dns.clouddns
        dns.debug
        dns.dns64
        dns.dnssec
        dns.dnstap
        dns.erratic
        dns.errors
        dns.etcd
        dns.file
        dns.forward
        dns.geoip
        dns.grpc
        dns.header
        dns.health
        dns.hosts
        dns.k8s_external
        dns.kubernetes
        dns.loadbalance
        dns.local
        dns.log
        dns.loop
        dns.metadata
        dns.minimal
        dns.nsid
        dns.pprof
        dns.prometheus
        dns.ready
        dns.reload
        dns.rewrite
        dns.root
        dns.route53
        dns.secondary
        dns.sign
        dns.template
        dns.timeouts
        dns.tls
        dns.trace
        dns.transfer
        dns.tsig
        dns.view
        dns.whoami
        on
      

      溫馨提示: 若所需的插件不存在,請自行下載插件源碼到cordns源碼的plugin目錄,然后在plugin.cfg文件中添加下載的插件名稱例如etcd:etcd,又或者直接指定Github中的插件地址他會自行下載,例如 dump:github.com/miekg/dump,最后手動編譯coredns源碼。

      # plugin.cfg
      .....
      # 對于在plugin目錄下已經存在的插件,則可以直接寫成plugin中的目錄名:
      sign:sign
      # 對于在plugin目錄下不存在的插件
      dump:github.com/miekg/dump
      
      # 需提前準備Golang環境
      $ git clone -b v1.11.1 https://github.com/coredns/coredns
      $ cd coredns
      $ go get github.com/miekg/dump
      $ go generate
      $ go build && make
      

      插件工作模式

      描述: 當 CoreDNS 啟動后,它將根據配置文件啟動不同 server ,每臺 server 都擁有自己的插件鏈。當有 DNS 請求時,它將依次經歷如下 3 步邏輯:

      1. 如果有當前請求的 server 有多個 zone,將采用貪心原則選擇最匹配的 zone;
      2. 一旦找到匹配的 server,按照 plugin.cfg 定義的順序執行插件鏈上的插件;
      3. 每個插件將判斷當前請求是否應該處理,將有以下幾種可能:
        • 請求被當前插件處理 : 插件將生成對應的響應并回給客戶端,此時請求結束,下一個插件將不會被調用,如 whoami 插件;
        • 請求被當前插件以 Fallthrough 形式處理 : 如果請求在該插件處理過程中有可能將跳轉至下一個插件,該過程稱為 fallthrough,并以關鍵字 fallthrough來決定是否允許此項操作,例如 host 插件,當查詢域名未位于 /etc/hosts,則調用下一個插件;
        • 請求在處理過程被攜帶 Hint : 請求被插件處理,并在其響應中添加了某些信息(hint)后繼續交由下一個插件處理。這些額外的信息將組成對客戶端的最終響應,如 metric 插件

      常用插件介紹

      host 插件

      描述: 此對于為文件中的區域提供服務很有用,但是僅支持 A、AAAA 和 PTR 記錄,如果要在主機插件中沒有匹配項的情況下將請求傳遞給插件鏈的其余部分,則必須指定該fallthrough選項,請注意每個塊{}只能使用一次此插件。

      插件參考: https://coredns.io/plugins/hosts/

      溫馨提示: 反向查找的 PTR 記錄由 CoreDNS 自動生成(基于hosts文件條目)

      語法參數:

      hosts [FILE [ZONES...]] {
        # 條目的形式基于 IETF RFC 952 格式
        # IP_address canonical_hostname [aliases...]
        [INLINE]
        # 生成的記錄的 DNS TTL,默認 3600s
        ttl SECONDS
        # 重載時間,若為0s表示不重載
        reload DURATION
        # 禁用生成反向解析  
        no_reverse
        # 如果區域匹配并且無法生成任何記錄,請將請求傳遞給下一個插件。
        fallthrough [ZONES...]
      }
      

      示例演示:
      示例1.少量不同域名解析直接寫在 Corefile 配置文件中

      .:53 {
        # 綁定interface ip
        bind 127.0.0.1
        # 先走本機的hosts
        hosts {
          # 因為解析的域名少我們這里直接用hosts插件即可完成需求
          192.168.1.2 www.weiyigeek.top weiyigeek.top
          192.168.1.3 blog.weiyigeek.top
          # ttl
          ttl 60
          # 重載hosts配置
          reload 1m
          # 繼續執行
          fallthrough
        }
        # file enables serving zone data from an RFC 1035-style master file.
        # 最后所有的都轉發到系統配置的上游dns服務器去解析
        forward . /etc/resolv.conf
        # 緩存時間ttl
        cache 120
        # 自動加載配置文件的間隔時間
        reload 6s
        # 輸出日志
        log
        # 輸出錯誤
        errors
      }
      

      示例2.將解析寫在獨立的/etc/coredns/hosts文件中,也可以寫在 /etc/hosts 看個人喜好。

      tee /etc/coredns/Corefile <<'EOF'
      .:53 {
        bind 10.20.176.120
        hosts /etc/coredns/hosts
        # 未配置解析的將轉發到上游服務器。
        forward . 8.8.8.8:53
        # 緩存時間ttl
        cache 120
        # 自動加載配置文件的間隔時間
        reload 6s
        # 輸出日志
        log
        # 輸出錯誤
        errors
      }
      EOF
      
      tee /etc/coredns/hosts <<'EOF'
      # weiyigeek.com
      192.168.1.2 www.weiyigeek.com
      192.168.1.3 blog.weiyigeek.com
      # weiyigeek.top
      192.168.1.250 gitlab.weiyigeek.top
      192.168.1.251 harbor.weiyigeek.top
      EOF
      

      修改配置文件后重啟coredns以便于驗證解析:

      [weiyigeek@localhost] C:\Users\WeiyiGeek $  nslookup -qt=a www.weiyigeek.com 10.20.176.120
      服務器:  UnKnown
      Address:  10.20.176.120
      
      名稱:    www.weiyigeek.com
      Address:  192.168.1.2
      
      
      [weiyigeek@localhost] C:\Users\WeiyiGeek $  nslookup -qt=a harbor.weiyigeek.top 10.20.176.120
      服務器:  UnKnown
      Address:  10.20.176.120
      
      名稱:    harbor.weiyigeek.top
      

      file 插件 (常用)

      描述: 如果有大量自定義域名記錄解析那么則建議使用file插件,配置需要符合RFC 1035規范的DNS解析配置文件,如果區域文件包含簽名(即,使用 DNSSEC),返回正確的 DNSSEC 答案

      語法參數

      # DBFILE : 要讀取和分析的數據庫文件
      # ZONES:它應該是權威的, 若為空則配置塊中的區域被使用。
      file DBFILE [ZONES...] {
        # 在 SOA 版本更改時執行區域重新加載的時間間隔
        reload DURATION
      }
      

      示例演示:
      示例1.使用file插件創建內部域名的正向以及反向解析。

      tee /etc/coredns/Corefile <<'EOF'
      .:53 {
        forward . 223.6.6.6:53 114.114.114.114:53 /etc/resolv.conf  # 上面etcd未查詢到的請求轉發給設置的DNS服務器解析
        # 啟用緩存,保持正高速緩存大小 5000 和 負高速緩存大小 2500.
        cache {
          success 5000
          denial 2500
        }
        log
        errors
      }
      
      # 正向解析
      weiyigeek.top {
        file /etc/coredns/weiyigeek.top.conf
        forward . 223.6.6.6:53 
        log
        errors
      }
      
      # 反向解析
      20.10.in-addr.arpa {
        file /etc/coredns/db.20.10.conf
        log
        errors
      }
      EOF
      
      # 正向解析配置文件,符合 RFC 1035 標準格式
      tee /etc/coredns/weiyigeek.top.conf <<'EOF'
      $TTL 86400
      $ORIGIN weiyigeek.top.
      @ 3600 IN  SOA  dns1.weiyigeek.top. master.weiyigeek.top. (
                                20210313      ; Serial
                                50400         ; Refresh
                                86400         ; Retry
                               604800         ; Expire
                                86400 )       ; Negative Cache TTL
      ;
      
      ; name servers - NS records
      @ IN NS dns1
      dns1 IN A 10.20.176.120
      
      ; root server - A records
      @ IN A 192.168.10.71
      
      ; child server records
      www IN A 192.168.10.71
      blog IN A 192.168.10.70
      EOF
      
      
      tee /etc/coredns/db.20.10.conf <<'EOF'
      $TTL 86400
      @ 3600 IN  SOA  20.10.in-addr.arpa. master.weiyigeek.top. (
                                20210313      ; Serial
                                50400         ; Refresh
                                86400         ; Retry
                               604800         ; Expire
                                86400 )       ; Negative Cache TTL
      ;
      
      ; name servers - NS records
      @ IN NS dns1.weiyigeek.top.
      
      ; PTR Records
      120.176 IN PTR dns1.weiyigeek.top.
      EOF
      

      重啟cordns服務驗證服務: systemctl restart coredns && sleep 6 &&systemctl status coredns

      $ nslookup -qt=a weiyigeek.top 10.20.176.120
      $ nslookup -qt=ns weiyigeek.top 10.20.176.120
      $ nslookup -qt=ptr weiyigeek.top 10.20.176.120
      

      執行結果:

      weiyigeek.top-file插件使用圖


      etcd 插件

      描述: 使用etcd插件我們可以將解析存入到etcd的解析記錄進行讀取,它可以實現了DNS服務發現,但是它不適合作為一個通用的DNS區域數據插件, 只實現了DNS記錄類型的一個子集。

      語法示例

      etcd [ZONES...] {
        fallthrough [ZONES...]
        path PATH
        endpoint ENDPOINT...
        credentials USERNAME PASSWORD
        tls CERT KEY CACERT
        stubzones
      }
      
      # 參數解析
      fallthrough: 如果區域匹配但沒有記錄可以生成,將請求傳遞給下一個插件
      path: etcd中的路徑,默認值/skydns
      endpoint: etcd endpoint
      credentials: etcd的用戶名和密碼
      tls: CA
      stubzones 啟用存根區域功能
      

      示例演示:

      .:53 {
        forward . 223.6.6.6
      }
      weiyigeek.local {
        file weiyigeek.local { 
          reload 30s 
        }
      }
      etcd-weiyigeek.local:53 {
        etcd {
          stubzones # 啟用存根區域功能,stubzone僅在位于指定的第一個區域下方的etcd樹中完成
          path /root
          endpoint http://172.22.50.98:2379   # 此處根據自己部署的etcd地址進行填寫。
          fallthrough # 如果區域匹配但不能生成記錄,則將請求傳遞給下一個插件
        }
        forward . 8.8.8.8:53 8.8.4.4:53 /etc/resolv.conf  # 上面etcd未查詢到的請求轉發給設置的DNS服務器解析
        cache 160
        loadbalance   # 開啟DNS記錄輪詢策略
        log           # 打印日志
      }
      

      使用 etcd 插件利用目錄結構查詢相關條目,已上面的 etcd-weiyigeek.local 為例,配置的etcd的path為/root

      # etcd-weiyigeek.local 的 A 記錄 為 172.22.50.28
      $./etcdctl put /root/local/etcd-weiyigeek/ '{"host":"172.22.50.28","ttl":60}'
      
      # demo1.etcd-weiyigeek.local 的 A 記錄 為 172.22.50.128
      $./etcdctl put /root/local/etcd-weiyigeek/demo1 '{"host":"172.22.50.128","ttl":60}'
      
      # demo2.etcd-weiyigeek.local 的 A 記錄 為 172.22.50.228
      $./etcdctl put /root/local/etcd-weiyigeek/demo2 '{"host":"172.22.50.228","ttl":60}'
      

      kubernetes 插件

      描述: kubernetes 插件允許從kubernetes集群讀取區域數據, 插件地址: https://coredns.io/plugins/kubernetes/

      語法參數:

      kubernetes [ZONES...] {
        endpoint URL
        tls CERT KEY CACERT
        kubeconfig KUBECONFIG [CONTEXT]
        namespaces NAMESPACE...
        labels EXPRESSION
        pods POD-MODE
        endpoint_pod_names
        ttl TTL
        noendpoints
        fallthrough [ZONES...]
        ignore empty_service
      }
      

      示例演示:
      在 K8S 集群中的 Pod 內的 DNS 域名解析配置文件為 /etc/resolv.conf,文件內容如下所示。

      #定義 DNS 服務器的 IP 地址。
      nameserver xx.xx.0.10 
      
      # 設置域名的查找后綴規則,查找配置越多,說明域名解析查找匹配次數越多。
      # Kubernetes 集群匹配有 kube-system.svc.cluster.local、svc.cluster.local、cluster.local 3 個后綴,最多進行 8 次查詢才能得到正確解析結果。
      search kube-system.svc.cluster.local svc.cluster.local cluster.local 
      
      #定義域名解析配置文件選項,例如該參數設置成 ndots:5,說明如果訪問的域名字符串內的點字符數量超過 ndots 值,則認為是完整域名,并被直接解析;如果不足 ndots 值,則追加 search 段后綴再進行查詢。
      options ndots:5 
      

      CoreDNS 配置:

      $ kubectl get cm -n kube-system coredns  -o yaml
      .....
      Corefile: |
        .:53 {
            errors  # 輸出錯誤信息,若需調試請設置為debug
            log     # 輸出客戶端請求解析信息
            health { # 健康檢查配置
              lameduck 15s # 關閉延遲時間
            }
            ready # CoreDNS 插件,一般用來做可讀性檢查,可以通過 http://localhost:8181/ready 讀取。
            # CoreDNS Kubernetes 插件,提供集群內服務解析能力。
            kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
              pods verified
              fallthrough in-addr.arpa ip6.arpa
            }
            # 添加自定義 hosts。
            hosts {
              192.168.1.41  www.weiyigeek.top
              192.168.1.40  harbor.weiyigeek.top
              fallthrough in-addr.arpa ip6.arpa
            }
            prometheus :9153 # CoreDNS 自身 metrics 數據接口。
            # 當域名不在 Kubernetes 域時,將請求轉發到預定義的解析器。
            forward . /etc/resolv.conf { 
              max_concurrent 1000
            }
            cache 30 # DNS 查詢緩存。
            loop  #環路檢測,如果檢測到環路,則停止 CoreDNS。
            reload #允許自動重新加載已更改的 Corefile, 編輯 ConfigMap 配置后,請等待兩分鐘以使更改生效。
            loadbalance #循環 DNS 負載均衡器,可以在答案中隨機 A、AAAA、MX 記錄的順序。
        }
      

      dnssec 插件

      描述: DNSSEC 支持對服務的數據進行動態 DNSSEC 簽名,每個服務器塊只能使用此插件一次。
      插件地址: https://coredns.io/plugins/dnssec/

      語法參數:

      dnssec [ZONES... ] {
        # 指定讀取的Key文件
        key file KEY...
        # 使用緩存來存儲 RRSIGs,缺省值為 10000
        cache_capacity CAPACITY
      }
      

      示例演示:

      $ mkdir -vp /etc/coredns/dnssec && cd /etc/coredns/dnssec
      # 使用 dnssec-keygen 工具生成密鑰文件
      $ dnssec-keygen -a ECDSAP256SHA256 -f KSK weiyigeek.top
        Generating key pair.
        # 生成的密鑰的基本名稱
        Kweiyigeek.top.+013+29388
      
      # 生成的 public key 與 private key
      $ ls
      Kweiyigeek.top.+013+29388.key  Kweiyigeek.top.+013+29388.private 
      
      # 配置文件 Corefile 示例
      $ cat /etc/coredns/Corefile
      .:53 {
        forward . 223.6.6.6:53
        log
        errors
      }
      
      # 正向解析
      weiyigeek.top {
        file /etc/coredns/db.weiyigeek.top.conf
        dnssec {
          key file /etc/coredns/dnssec/Kweiyigeek.top.+013+29388.key
        }
        log
        errors
      }
      

      知識擴展: 使用dnssec-keygen生成DNSSEC密鑰對,您需要按照以下步驟操作:

      1. 打開命令行工具,并確保您的計算機上已經安裝了BIND軟件包,該軟件包通常包含在DNS服務器軟件包中。
      2. 運行以下命令來生成DNSSEC密鑰對:
        dnssec-keygen -a <algorithm> -b <bits> -n <type> -f KSK/ZSK <domain>
        
        • <algorithm>:選擇用于生成密鑰對的加密算法,常見的算法有RSA、DSA、ECDSA等。
        • <bits>:指定密鑰的位數,一般為1024、2048、4096等。
        • <type>:指定密鑰的類型,可以是KSK(Key Signing Key)或ZSK(Zone Signing Key)。
        • <domain>:指定域名,生成的密鑰對將與該域名相關聯。
      3. 運行命令后,將會生成兩個密鑰文件,一個是私鑰文件(以".private"結尾),另一個是公鑰文件(以".key"結尾)。

      請注意,生成的密鑰對需要妥善保管,私鑰文件應保密,而公鑰文件需要添加到您的域名的DNS記錄中。接下來,我們將討論如何將公鑰添加到DNS記錄中。


      sign 插件

      描述: sign 插件用于對區域進行簽名并 將 DNSSEC 記錄添加到區域文件。
      插件地址: https://coredns.io/plugins/sign/

      語法參數:

      # DBFILE 讀取和分析的區域數據庫文件, 即符合 RFC 1035 標準格式文件
      sign DBFILE [ZONES...] {
        # 指定用于對區域進行簽名的密鑰(可以有多個)
        key file|directory KEY...|DIR...
        # 指定 CoreDNS 應在其中保存已簽名區域的 DIR,默認為 /var/lib/coredns 目錄(需要自行驗證)
        directory DIR
      }
      

      使用示例:

      # 1.使用 dnssec-keygen 生成 KSK 類型的 密鑰
      $ cd /etc/coredns/dnssec/
      $ dnssec-keygen -a ECDSAP256SHA256 -f KSK weiyigeek.top
        # Generating key pair.
        # Kweiyigeek.top.+013+04352
      $ ls
        # Kweiyigeek.top.+013+04352.key  Kweiyigeek.top.+013+04352.private
      
      # 2.創建已簽名區域的 DIR 目錄 /var/lib/coredns 
      mkdir -vp /var/lib/coredns 
      
      # 3.Corefile 配置示例文件
      $ cat /etc/coredns/Corefile
      # 正向解析
      weiyigeek.top {
        file /etc/coredns/db.weiyigeek.top.conf
        sign /etc/coredns/db.weiyigeek.top.conf {
          key file /etc/coredns/dnssec/Kweiyigeek.top.+013+29388.key
        }
      }
      
      # 4.運行后生成的signd文件
      cat /var/lib/coredns/db.weiyigeek.top.signed
      

      weiyigeek.top-sign插件生成的signd文件圖


      tsig 插件

      描述: tsig 定義 TSIG 密鑰,驗證傳入的 TSIG 簽名請求并簽署響應。
      插件地址: https://coredns.io/plugins/tsig/

      溫馨提示: 對于 Secondary 主從區域傳輸暫不支持此插件,希望后續官方完善。

      語法參數:

      tsig [ZONE...] {
        # 顯式的設置密鑰的名稱 以及 TSIG 密鑰
        secret NAME KEY
        # 使用文件方式的加載TSIG 密鑰(推薦)
        secrets FILE
        # 指定用于的查詢類型,例如 `AXFR IXFR`
        require [QTYPE...]
      }
      

      使用示例:

      # 1.使用 tsig-keygen 工具生成TSIG 密鑰
      tsig-keygen -a hmac-sha256 dns-tsig-keygen. >  /etc/coredns/dnssec/dns-tsig-keygen.secrets
      cat /etc/coredns/dnssec/dns-tsig-keygen.secrets
      # key "dns-tsig-keygen." {
      #   algorithm hmac-sha256;
      #   secret "ec5onpRjGTIaOBZa+zGl2VJbwdJl1qlzj+NZNHrhhk4=";
      # };
      
      # 2.Corefile 配置文件示例
      # 要求 TSIG 簽名的事務才能發出 AXFR IXFR
      weiyigeek.top {
        file /etc/coredns/db.weiyigeek.top.conf
        tsig {
          secrets /etc/coredns/dnssec/dns-tsig-keygen.secrets
          require AXFR IXFR
        }
        transfer {
          to *
        }
      }
      
      # 要求 TSIG 簽名的事務才能發出所有請求
      auth.zone {
        tsig {
          secret auth.zone.key. NoTCJU+DMqFWywaPyxSijrDEA/eC3nK0xi3AMEZuPVk=
          require all
        }
        forward . 10.1.0.2
      }
      

      原文地址: https://blog.weiyigeek.top

      本文至此完畢,更多技術文章,盡情期待下一章節!


      專欄書寫不易,如果您覺得這個專欄還不錯的,請給這篇專欄 【點個贊、投個幣、收個藏、關個注,轉個發,留個言】(人間六大情),這將對我的肯定,謝謝!。

      點擊 ?? 關注「 全棧工程師修煉指南」公眾號
      微信溝通交流: weiyigeeker (點擊添加)
      交流溝通群:629184198 或 關注公眾號回復【學習交流群】

      溫馨提示: 由于作者水平有限,本章錯漏缺點在所難免,希望讀者批評指正,并請在文章末尾留下您寶貴的經驗知識,聯系郵箱地址 master@weiyigeek.top 或者關注公眾號 WeiyiGeek 聯系我。

      帥哥(靚仔)、美女,點個關注后續不迷路

      posted @ 2023-09-04 11:54  全棧工程師修煉指南  閱讀(858)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线国产精品中文字幕| 中国猛少妇色xxxxx| 在线观看无码av免费不卡网站| 亚洲熟女乱色一区二区三区| 91老熟女老人国产老太| 色噜噜亚洲男人的天堂| 久久精品夜色噜噜亚洲aa| 国产69精品久久久久99尤物| 色窝窝免费播放视频在线| 国产精品视频免费一区二区三区 | 国产精品爽黄69天堂A| 亚洲av免费成人精品区| japanese边做边乳喷| 亚洲色在线v中文字幕| 永福县| 天堂av最新版中文在线| 日本高清一区免费中文视频| 亚洲日本精品一区二区| 久热这里只有精品视频六| 午夜福利精品国产二区| 国产日韩一区二区在线| 亚洲国产精品久久久天堂麻豆宅男| 97久久精品人人做人人爽| 国日韩精品一区二区三区| 天天摸天天做天天爽水多| 亚洲av乱码久久亚洲精品| 亚洲成av人片无码天堂下载| 久久久久久亚洲精品a片成人| 成在线人永久免费视频播放| 亚洲色婷婷久久精品av蜜桃久久 | 亚洲国产一区二区av| 乱女乱妇熟女熟妇综合网| 国产熟睡乱子伦视频在线播放 | 日韩中文字幕国产精品| 国产人成精品一区二区三| 国产精品亚洲а∨天堂2021 | 亚洲偷自拍另类一区二区| 亚洲偷自拍国综合| 少妇被粗大的猛进出69影院| 国产精品爱久久久久久久电影| 人妻另类 专区 欧美 制服|