新聞中心
自定義 DNS 服務
本頁說明如何配置 DNS Pod(s),以及定制集群中 DNS 解析過程。

公司主營業(yè)務:成都網(wǎng)站制作、網(wǎng)站設計、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出臨淄免費做網(wǎng)站回饋大家。
在開始之前
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構建:
- Katacoda
- 玩轉 Kubernetes
您的 Kubernetes 服務器必須為 v1.12 或更高版本。 要檢查版本,請輸入 ?kubectl version?。
你的集群必須運行 CoreDNS 插件。 文檔遷移到 CoreDNS 解釋了如何使用 ?kubeadm ?從 ?kube-dns? 遷移到 CoreDNS。
介紹
DNS 是使用集群插件 管理器自動啟動的內置的 Kubernetes 服務。
從 Kubernetes v1.12 開始,CoreDNS 是推薦的 DNS 服務器,取代了 kube-dns。 如果 你的集群原來使用 kube-dns,你可能部署的仍然是 ?kube-dns? 而不是 CoreDNS。
Note: CoreDNS 服務在其 ?
metadata.name? 字段被命名為 ?kube-dns?。 這是為了能夠與依靠傳統(tǒng) ?kube-dns? 服務名稱來解析集群內部地址的工作負載具有更好的互操作性。 使用 ?kube-dns? 作為服務名稱可以抽離共有名稱之后運行的是哪個 DNS 提供程序這一實現(xiàn)細節(jié)。
如果你在使用 Deployment 運行 CoreDNS,則該 Deployment 通常會向外暴露為一個具有 靜態(tài) IP 地址 Kubernetes 服務。 kubelet 使用 ?--cluster-dns=? 標志將 DNS 解析器的信息傳遞給每個容器。
DNS 名稱也需要域名。 你可在 kubelet 中使用 ?--cluster-domain=<默認本地域名>? 標志配置本地域名。
DNS 服務器支持正向查找(A 和 AAAA 記錄)、端口發(fā)現(xiàn)(SRV 記錄)、反向 IP 地址發(fā)現(xiàn)(PTR 記錄)等。
如果 Pod 的 ?dnsPolicy ?設置為 "?default?",則它將從 Pod 運行所在節(jié)點繼承名稱解析配置。 Pod 的 DNS 解析行為應該與節(jié)點相同。
如果你不想這樣做,或者想要為 Pod 使用其他 DNS 配置,則可以 使用 kubelet 的 ?--resolv-conf? 標志。 將此標志設置為 "" 可以避免 Pod 繼承 DNS。 將其設置為有別于 ?/etc/resolv.conf? 的有效文件路徑可以設定 DNS 繼承不同的配置。
CoreDNS
CoreDNS 是通用的權威 DNS 服務器,可以用作集群 DNS,符合 DNS 規(guī)范。
CoreDNS ConfigMap 選項
CoreDNS 是模塊化且可插拔的 DNS 服務器,每個插件都為 CoreDNS 添加了新功能。 可以通過維護 Corefile,即 CoreDNS 配置文件, 來定制其行為。 集群管理員可以修改 CoreDNS Corefile 的 ConfigMap,以更改服務發(fā)現(xiàn)的工作方式。
在 Kubernetes 中,CoreDNS 安裝時使用如下默認 Corefile 配置。
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
} Corefile 配置包括以下 CoreDNS 插件:
- errors:錯誤記錄到標準輸出。
- health:在 http://localhost:8080/health 處提供 CoreDNS 的健康報告。
- ready:在端口 8181 上提供的一個 HTTP 末端,當所有能夠 表達自身就緒的插件都已就緒時,在此末端返回 200 OK。
- kubernetes:CoreDNS 將基于 Kubernetes 的服務和 Pod 的 IP 答復 DNS 查詢。你可以在 CoreDNS 網(wǎng)站閱讀更多細節(jié)。 你可以使用 ?
ttl?來定制響應的 TTL。默認值是 5 秒鐘。TTL 的最小值可以是 0 秒鐘, 最大值為 3600 秒。將 TTL 設置為 0 可以禁止對 DNS 記錄進行緩存。 - prometheus:CoreDNS 的度量指標值以 Prometheus 格式在 http://localhost:9153/metrics 上提供。
- forward: 不在 Kubernetes 集群域內的任何查詢都將轉發(fā)到 預定義的解析器 (/etc/resolv.conf).
- cache:啟用前端緩存。
- loop:檢測到簡單的轉發(fā)環(huán),如果發(fā)現(xiàn)死循環(huán),則中止 CoreDNS 進程。
- reload:允許自動重新加載已更改的 Corefile。 編輯 ConfigMap 配置后,請等待兩分鐘,以使更改生效。
- loadbalance:這是一個輪轉式 DNS 負載均衡器, 它在應答中隨機分配 A、AAAA 和 MX 記錄的順序。
?pods insecure? 選項是為了與 kube-dns 向后兼容。你可以使用 ?pods verified? 選項,該選項使得 僅在相同名稱空間中存在具有匹配 IP 的 Pod 時才返回 A 記錄。如果你不使用 Pod 記錄,則可以使用 ?pods disabled? 選項。
你可以通過修改 ConfigMap 來更改默認的 CoreDNS 行為。
使用 CoreDNS 配置存根域和上游域名服務器
CoreDNS 能夠使用 forward 插件配置存根域和上游域名服務器。
示例
如果集群操作員在 10.150.0.1 處運行了 Consul 域服務器, 且所有 Consul 名稱都帶有后綴 ?.consul.local?。要在 CoreDNS 中對其進行配置, 集群管理員可以在 CoreDNS 的 ConfigMap 中創(chuàng)建加入以下字段。
consul.local:53 {
errors
cache 30
forward . 10.150.0.1
}要顯式強制所有非集群 DNS 查找通過特定的域名服務器(位于 172.16.0.1),可將 ?forward ?指向該域名服務器,而不是 ?/etc/resolv.conf?。
forward . 172.16.0.1
最終的包含默認的 ?Corefile ?配置的 ConfigMap 如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . 172.16.0.1
cache 30
loop
reload
loadbalance
}
consul.local:53 {
errors
cache 30
forward . 10.150.0.1
} 工具 ?kubeadm ?支持將 kube-dns ConfigMap 自動轉換為 CoreDNS ConfigMap。
Note: 盡管 kube-dns 接受 FQDN(例如:ns.foo.com)作為存根域和名字服務器,CoreDNS 不支持此功能。 轉換期間,CoreDNS 配置中將忽略所有的 FQDN 域名服務器。
CoreDNS 配置等同于 kube-dns
CoreDNS 不僅僅提供 kube-dns 的功能。 為 kube-dns 創(chuàng)建的 ConfigMap 支持 ?StubDomains ?和 ?upstreamNameservers ?轉換為 CoreDNS 中的 ?forward ?插件。
示例
用于 kubedns 的此示例 ConfigMap 描述了 stubdomains 和 upstreamnameservers:
apiVersion: v1
data:
stubDomains: |
{"abc.com" : ["1.2.3.4"], "my.cluster.local" : ["2.3.4.5"]}
upstreamNameservers: |
["8.8.8.8", "8.8.4.4"]
kind: ConfigMapCoreDNS 中的等效配置將創(chuàng)建一個 Corefile:
- 針對 stubDomains:
abc.com:53 {
errors
cache 30
proxy . 1.2.3.4
}
my.cluster.local:53 {
errors
cache 30
proxy . 2.3.4.5
}
帶有默認插件的完整 Corefile:
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
federation cluster.local {
foo foo.feddomain.com
}
prometheus :9153
forward . 8.8.8.8 8.8.4.4
cache 30
}
abc.com:53 {
errors
cache 30
forward . 1.2.3.4
}
my.cluster.local:53 {
errors
cache 30
forward . 2.3.4.5
}遷移到 CoreDNS
要從 kube-dns 遷移到 CoreDNS,此博客 提供了幫助用戶將 kube-dns 替換為 CoreDNS。 集群管理員還可以使用部署腳本 進行遷移。
分享名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes自定義DNS服務
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djppgcg.html


咨詢
建站咨詢
