W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本頁(yè)說明如何配置 DNS Pod(s),以及定制集群中 DNS 解析過程。
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
您的 Kubernetes 服務(wù)器必須為 v1.12 或更高版本。 要檢查版本,請(qǐng)輸入 ?kubectl version
?。
你的集群必須運(yùn)行 CoreDNS 插件。 文檔遷移到 CoreDNS 解釋了如何使用 ?kubeadm
?從 ?kube-dns
? 遷移到 CoreDNS。
DNS 是使用集群插件 管理器自動(dòng)啟動(dòng)的內(nèi)置的 Kubernetes 服務(wù)。
從 Kubernetes v1.12 開始,CoreDNS 是推薦的 DNS 服務(wù)器,取代了 kube-dns。 如果 你的集群原來使用 kube-dns,你可能部署的仍然是 ?kube-dns
? 而不是 CoreDNS。
Note: CoreDNS 服務(wù)在其 ?
metadata.name
? 字段被命名為 ?kube-dns
?。 這是為了能夠與依靠傳統(tǒng) ?kube-dns
? 服務(wù)名稱來解析集群內(nèi)部地址的工作負(fù)載具有更好的互操作性。 使用 ?kube-dns
? 作為服務(wù)名稱可以抽離共有名稱之后運(yùn)行的是哪個(gè) DNS 提供程序這一實(shí)現(xiàn)細(xì)節(jié)。
如果你在使用 Deployment 運(yùn)行 CoreDNS,則該 Deployment 通常會(huì)向外暴露為一個(gè)具有 靜態(tài) IP 地址 Kubernetes 服務(wù)。 kubelet 使用 ?--cluster-dns=<DNS 服務(wù) IP>
? 標(biāo)志將 DNS 解析器的信息傳遞給每個(gè)容器。
DNS 名稱也需要域名。 你可在 kubelet 中使用 ?--cluster-domain=<默認(rèn)本地域名>
? 標(biāo)志配置本地域名。
DNS 服務(wù)器支持正向查找(A 和 AAAA 記錄)、端口發(fā)現(xiàn)(SRV 記錄)、反向 IP 地址發(fā)現(xiàn)(PTR 記錄)等。
如果 Pod 的 ?dnsPolicy
?設(shè)置為 "?default
?",則它將從 Pod 運(yùn)行所在節(jié)點(diǎn)繼承名稱解析配置。 Pod 的 DNS 解析行為應(yīng)該與節(jié)點(diǎn)相同。
如果你不想這樣做,或者想要為 Pod 使用其他 DNS 配置,則可以 使用 kubelet 的 ?--resolv-conf
? 標(biāo)志。 將此標(biāo)志設(shè)置為 "" 可以避免 Pod 繼承 DNS。 將其設(shè)置為有別于 ?/etc/resolv.conf
? 的有效文件路徑可以設(shè)定 DNS 繼承不同的配置。
CoreDNS 是通用的權(quán)威 DNS 服務(wù)器,可以用作集群 DNS,符合 DNS 規(guī)范。
CoreDNS 是模塊化且可插拔的 DNS 服務(wù)器,每個(gè)插件都為 CoreDNS 添加了新功能。 可以通過維護(hù) Corefile,即 CoreDNS 配置文件, 來定制其行為。 集群管理員可以修改 CoreDNS Corefile 的 ConfigMap,以更改服務(wù)發(fā)現(xiàn)的工作方式。
在 Kubernetes 中,CoreDNS 安裝時(shí)使用如下默認(rèn) 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 插件:
ttl
?來定制響應(yīng)的 TTL。默認(rèn)值是 5 秒鐘。TTL 的最小值可以是 0 秒鐘, 最大值為 3600 秒。將 TTL 設(shè)置為 0 可以禁止對(duì) DNS 記錄進(jìn)行緩存。?pods insecure
? 選項(xiàng)是為了與 kube-dns 向后兼容。你可以使用 ?pods verified
? 選項(xiàng),該選項(xiàng)使得 僅在相同名稱空間中存在具有匹配 IP 的 Pod 時(shí)才返回 A 記錄。如果你不使用 Pod 記錄,則可以使用 ?pods disabled
? 選項(xiàng)。
你可以通過修改 ConfigMap 來更改默認(rèn)的 CoreDNS 行為。
CoreDNS 能夠使用 forward 插件配置存根域和上游域名服務(wù)器。
如果集群操作員在 10.150.0.1 處運(yùn)行了 Consul 域服務(wù)器, 且所有 Consul 名稱都帶有后綴 ?.consul.local
?。要在 CoreDNS 中對(duì)其進(jìn)行配置, 集群管理員可以在 CoreDNS 的 ConfigMap 中創(chuàng)建加入以下字段。
consul.local:53 {
errors
cache 30
forward . 10.150.0.1
}
要顯式強(qiáng)制所有非集群 DNS 查找通過特定的域名服務(wù)器(位于 172.16.0.1),可將 ?forward
?指向該域名服務(wù)器,而不是 ?/etc/resolv.conf
?。
forward . 172.16.0.1
最終的包含默認(rèn)的 ?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 自動(dòng)轉(zhuǎn)換為 CoreDNS ConfigMap。
Note: 盡管 kube-dns 接受 FQDN(例如:ns.foo.com)作為存根域和名字服務(wù)器,CoreDNS 不支持此功能。 轉(zhuǎn)換期間,CoreDNS 配置中將忽略所有的 FQDN 域名服務(wù)器。
CoreDNS 不僅僅提供 kube-dns 的功能。 為 kube-dns 創(chuàng)建的 ConfigMap 支持 ?StubDomains
?和 ?upstreamNameservers
?轉(zhuǎn)換為 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: ConfigMap
CoreDNS 中的等效配置將創(chuàng)建一個(gè) Corefile:
abc.com:53 {
errors
cache 30
proxy . 1.2.3.4
}
my.cluster.local:53 {
errors
cache 30
proxy . 2.3.4.5
}
帶有默認(rèn)插件的完整 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
}
要從 kube-dns 遷移到 CoreDNS,此博客 提供了幫助用戶將 kube-dns 替換為 CoreDNS。 集群管理員還可以使用部署腳本 進(jìn)行遷移。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: