CoreDNS 添加自定義DNS解析記錄


CoreDNS 的架構

解析流程

這里用到的是 CoreDNS 的 hosts plugin 插件。該插件僅支持 A, AAAA, 和 PTR 記錄。

kubectl edit configmap coredns -n kube-system
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods verified
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        hosts {
            192.168.1.122  demo1.xx.com
            192.168.1.123  demo2.xx.com
            fallthrough
        }
        autopath @kubernetes
        prometheus :9153
        forward . /etc/resolv.conf {
            prefer_udp
            policy sequential
        }
        cache 30
        loop
        reload
        loadbalance
    }

kubernetes plugin

支持從 Kubernetes 集群讀取 zone 數據。

運行 kubernetes 插件的 CoreDNS 可用作 kubernetes 集群中 kube-dns 的替代品。

forward plugin

用於設置 upstream Nameservers 上游 DNS 服務器。CoreDNS 就是通過它讓容器能夠解析外網的。

Multiple upstreams are randomized (see policy) on first use.

  • prefer_udp, try first using UDP even when the request comes in over TCP.
  • policy specifies the policy to use for selecting upstream servers. The default is random.

支持三種策略

  • random
  • round_robin
  • sequential

autopath plugin

在使用 autopath 插件之前,需要了解 pod 的四種 DNS 策略。

  • Default: Pod 從運行所在的節點繼承名稱解析配置。
  • ClusterFirst: 與配置的集群域后綴不匹配的任何 DNS 查詢都將轉發到從節點繼承的上游名稱服務器。
  • ClusterFirstWithHostNet: 對於以 hostNetwork 方式運行的 Pod,應顯式設置該策略。
  • None: 此設置允許 Pod 忽略 Kubernetes 環境中的 DNS 設置。Pod 會使用其 dnsConfig 字段 所提供的 DNS 設置。

需要注意的是,pod 的默認 dnsPolicy 不是 Default,而是 ClusterFirst

在 ClusterFirst 模式下,兩次(一次 ipv4,一次 ipv6)集群外部域名查詢產生 8 次(四次 ipv4,四次 ipv6)查詢請求。
Autopath 會在第一次域名查詢失敗時切割域名后綴,嘗試找到正確的域名,做到兩次(一次 ipv4,一次 ipv6)域名查詢獲取到正確的解析結果。

pods 必須設置為 verified 使其正常運行。

其它插件

  • errors: 查詢處理期間遇到的任何錯誤都將打印到標准輸出。
  • health: 監控檢查。
  • ready: 就緒檢查。
  • loop: 檢測簡單的轉發循環並停止服務器。

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM