久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Kubernetes DNS

2023-10-23 179

Kubernetes 為 Service 和 Pod 創(chuàng)建 DNS 記錄,可以使用一致的 DNS 名稱(chēng)而非 IP 地址來(lái)訪問(wèn) Service。Kubernetes 發(fā)布有關(guān) Pod 和 Service 的信息,這些信息被用來(lái)對(duì) DNS 進(jìn)行編程,在此過(guò)程中,Kubelet 配置 Pod 的 DNS,以便運(yùn)行中的容器可以通過(guò)名稱(chēng)而不是 IP 來(lái)查找服務(wù)。

集群中定義的 Service 被賦予 DNS 名稱(chēng)。默認(rèn)情況下,客戶端 Pod 的 DNS 搜索列表包括 Pod 自身的命名空間和集群的默認(rèn)域。

一、Service名字空間

DNS 查詢可能因?yàn)閳?zhí)行查詢的 Pod 所在的名字空間而返回不同的結(jié)果。 不指定名字空間的 DNS 查詢會(huì)被限制在 Pod 所在的名字空間內(nèi)。 要訪問(wèn)其他名字空間中的 Service,需要在 DNS 查詢中指定名字空間。

例如,假定名字空間 test 中存在一個(gè) Pod,prod 名字空間中存在一個(gè)服務(wù) data。

  • Pod 查詢 data 時(shí)沒(méi)有返回結(jié)果,因?yàn)槭褂玫氖?Pod 的名字空間 test。
  • Pod 查詢 data.prod 時(shí)則會(huì)返回預(yù)期的結(jié)果,因?yàn)椴樵冎兄付嗣挚臻g。

DNS 查詢可以使用 Pod 中的 /etc/resolv.conf 展開(kāi)。 Kubelet 為每個(gè) Pod 配置此文件。 例如,對(duì) data 的查詢可能被展開(kāi)為 data.test.svc.cluster.local。 search 選項(xiàng)的取值會(huì)被用來(lái)展開(kāi)查詢。

nameserver 10.32.0.10
search <namespace>.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

概括起來(lái),名字空間 test 中的 Pod 可以成功地解析 data.prod 或者 data.prod.svc.cluster.local。

二、DNS記錄

以下對(duì)象會(huì)獲得 DNS 記錄:

  • Services
  • Pods

接下來(lái)將詳細(xì)介紹已支持的 DNS 記錄類(lèi)型和布局。 其它布局、名稱(chēng)或者查詢即使碰巧可以工作,也應(yīng)視為實(shí)現(xiàn)細(xì)節(jié), 將來(lái)很可能被更改而且不會(huì)因此發(fā)出警告。

1、Service

(1)A/AAAA 記錄

除了無(wú)頭 Service 之外的 “普通” Service 會(huì)被賦予一個(gè)形如 my-svc.my-namespace.svc.cluster-domain.example 的 DNS A 和/或 AAAA 記錄,取決于 Service 的 IP 協(xié)議族(可能有多個(gè))設(shè)置。 該名稱(chēng)會(huì)解析成對(duì)應(yīng) Service 的集群 IP。

沒(méi)有集群 IP 的無(wú)頭 Service 也會(huì)被賦予一個(gè)形如 my-svc.my-namespace.svc.cluster-domain.example 的 DNS A 和/或 AAAA 記錄。 與普通 Service 不同,這一記錄會(huì)被解析成對(duì)應(yīng) Service 所選擇的 Pod IP 的集合。 客戶端要能夠使用這組 IP,或者使用標(biāo)準(zhǔn)的輪轉(zhuǎn)策略從這組 IP 中進(jìn)行選擇。

(2)SRV 記錄

Kubernetes 根據(jù)普通 Service 或無(wú)頭 Service 中的命名端口創(chuàng)建 SRV 記錄。每個(gè)命名端口, SRV 記錄格式為 _port-name._port-protocol.my-svc.my-namespace.svc.cluster-domain.example。 普通 Service,該記錄會(huì)被解析成端口號(hào)和域名:my-svc.my-namespace.svc.cluster-domain.example。 無(wú)頭 Service,該記錄會(huì)被解析成多個(gè)結(jié)果,及該服務(wù)的每個(gè)后端 Pod 各一個(gè) SRV 記錄, 其中包含 Pod 端口號(hào)和格式為 hostname.my-svc.my-namespace.svc.cluster-domain.example 的域名。

2、Pod

(1)A/AAAA 記錄

一般而言,Pod 會(huì)對(duì)應(yīng)如下 DNS 名字解析:

pod-ip-address.my-namespace.pod.cluster-domain.example

例如,對(duì)于一個(gè)位于 default 名字空間,IP 地址為 172.17.0.3 的 Pod, 如果集群的域名為 cluster.local,則 Pod 會(huì)對(duì)應(yīng) DNS 名稱(chēng):

172-17-0-3.default.pod.cluster.local

通過(guò) Service 暴露出來(lái)的所有 Pod 都會(huì)有如下 DNS 解析名稱(chēng)可用:

pod-ip-address.service-name.my-namespace.svc.cluster-domain.example

(2)Pod 的 hostname 和 subdomain 字段

當(dāng)前,創(chuàng)建 Pod 時(shí)其主機(jī)名(從 Pod 內(nèi)部觀察)取自 Pod 的 metadata.name 值。

Pod 規(guī)約中包含一個(gè)可選的 hostname 字段,可以用來(lái)指定一個(gè)不同的主機(jī)名。 當(dāng)這個(gè)字段被設(shè)置時(shí),它將優(yōu)先于 Pod 的名字成為該 Pod 的主機(jī)名(同樣是從 Pod 內(nèi)部觀察)。 舉個(gè)例子,給定一個(gè) spec.hostname 設(shè)置為 “my-host” 的 Pod, 該 Pod 的主機(jī)名將被設(shè)置為 “my-host”。

Pod 規(guī)約還有一個(gè)可選的 subdomain 字段,可以用來(lái)表明該 Pod 是名字空間的子組的一部分。 舉個(gè)例子,某 Pod 的 spec.hostname 設(shè)置為 “foo”,spec.subdomain 設(shè)置為 “bar”, 在名字空間 “my-namespace” 中,主機(jī)名稱(chēng)被設(shè)置成 “foo” 并且對(duì)應(yīng)的完全限定域名(FQDN)為 “foo.bar.my-namespace.svc.cluster-domain.example”(還是從 Pod 內(nèi)部觀察)。

如果 Pod 所在的名字空間中存在一個(gè)無(wú)頭服務(wù),其名稱(chēng)與子域相同, 則集群的 DNS 服務(wù)器還會(huì)為 Pod 的完全限定主機(jī)名返回 A 和/或 AAAA 記錄。

示例:

apiVersion: v1
kind: Service
metadata:
name: busybox-subdomain
spec:
selector:
name: busybox
clusterIP: None
ports:
- name: foo # 實(shí)際上不需要指定端口號(hào)
port: 1234
---
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: busybox-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
---
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
name: busybox
spec:
hostname: busybox-2
subdomain: busybox-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox

鑒于上述服務(wù) “busybox-subdomain” 和將 spec.subdomain 設(shè)置為 “busybox-subdomain” 的 Pod, 第一個(gè) Pod 將看到自己的 FQDN 為 “busybox-1.busybox-subdomain.my-namespace.svc.cluster-domain.example”。 DNS 會(huì)為此名字提供一個(gè) A 記錄和/或 AAAA 記錄,指向該 Pod 的 IP。 Pod “busybox1” 和 “busybox2” 都將有自己的地址記錄。

EndpointSlice 對(duì)象可以為任何端點(diǎn)地址及其 IP 指定 hostname。

注意:由于 A 和 AAAA 記錄不是基于 Pod 名稱(chēng)創(chuàng)建,因此需要設(shè)置了 hostname 才會(huì)生成 Pod 的 A 或 AAAA 記錄。 沒(méi)有設(shè)置 hostname 但設(shè)置了 subdomain 的 Pod 只會(huì)為 無(wú)頭 Service 創(chuàng)建 A 或 AAAA 記錄(busybox-subdomain.my-namespace.svc.cluster-domain.example) 指向 Pod 的 IP 地址。 另外,除非在服務(wù)上設(shè)置了 publishNotReadyAddresses=True,否則只有 Pod 準(zhǔn)備就緒 才會(huì)有與之對(duì)應(yīng)的記錄。

(3)Pod 的 setHostnameAsFQDN 字段

特性狀態(tài): Kubernetes v1.22 [stable]
當(dāng) Pod 配置為具有全限定域名 (FQDN) 時(shí),其主機(jī)名是短主機(jī)名。 例如,如果有一個(gè)具有完全限定域名 busybox-1.busybox-subdomain.my-namespace.svc.cluster-domain.example 的 Pod, 則默認(rèn)情況下,該 Pod 內(nèi)的 hostname 命令返回 busybox-1,而 hostname –fqdn 命令返回 FQDN。

當(dāng)在 Pod 規(guī)約中設(shè)置了 setHostnameAsFQDN: true 時(shí),kubelet 會(huì)將 Pod 的全限定域名(FQDN)作為該 Pod 的主機(jī)名記錄到 Pod 所在名字空間。 在這種情況下,hostname 和 hostname –fqdn 都會(huì)返回 Pod 的全限定域名。

注意:在 Linux 中,內(nèi)核的主機(jī)名字段(struct utsname 的 nodename 字段)限定最多 64 個(gè)字符。

如果 Pod 啟用這一特性,而其 FQDN 超出 64 字符,Pod 的啟動(dòng)會(huì)失敗。 Pod 會(huì)一直出于 Pending 狀態(tài)(通過(guò) kubectl 所看到的 ContainerCreating), 并產(chǎn)生錯(cuò)誤事件,例如 “Failed to construct FQDN from Pod hostname and cluster domain, FQDN long-FQDN is too long (64 characters is the max, 70 characters requested).” (無(wú)法基于 Pod 主機(jī)名和集群域名構(gòu)造 FQDN,F(xiàn)QDN long-FQDN 過(guò)長(zhǎng),至多 64 個(gè)字符,請(qǐng)求字符數(shù)為 70)。 對(duì)于這種場(chǎng)景而言,改善用戶體驗(yàn)的一種方式是創(chuàng)建一個(gè) 準(zhǔn)入 Webhook 控制器, 在用戶創(chuàng)建頂層對(duì)象(如 Deployment)的時(shí)候控制 FQDN 的長(zhǎng)度。

(4)Pod 的 DNS 策略

DNS 策略可以逐個(gè) Pod 來(lái)設(shè)定。目前 Kubernetes 支持以下特定 Pod 的 DNS 策略。 這些策略可以在 Pod 規(guī)約中的 dnsPolicy 字段設(shè)置:

  • “Default”: Pod 從運(yùn)行所在的節(jié)點(diǎn)繼承名稱(chēng)解析配置。
  • “ClusterFirst”: 與配置的集群域后綴不匹配的任何 DNS 查詢(例如 “www.kubernetes.io”) 都會(huì)由 DNS 服務(wù)器轉(zhuǎn)發(fā)到上游名稱(chēng)服務(wù)器。集群管理員可能配置了額外的存根域和上游 DNS 服務(wù)器。
  • “ClusterFirstWithHostNet”: 對(duì)于以 hostNetwork 方式運(yùn)行的 Pod,應(yīng)將其 DNS 策略顯式設(shè)置為 “ClusterFirstWithHostNet”。否則,以 hostNetwork 方式和 “ClusterFirst” 策略運(yùn)行的 Pod 將會(huì)做出回退至 “Default” 策略的行為。
  • “None”: 此設(shè)置允許 Pod 忽略 Kubernetes 環(huán)境中的 DNS 設(shè)置。Pod 會(huì)使用其 dnsConfig 字段所提供的 DNS 設(shè)置。

注意:”Default” 不是默認(rèn)的 DNS 策略。如果未明確指定 dnsPolicy,則使用 “ClusterFirst”。

下面的示例顯示了一個(gè) Pod,其 DNS 策略設(shè)置為 “ClusterFirstWithHostNet”, 因?yàn)樗褜?hostNetwork 設(shè)置為 true。

apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet

三、Pod的DNS配置

Pod 的 DNS 配置可讓用戶對(duì) Pod 的 DNS 設(shè)置進(jìn)行更多控制。dnsConfig 字段是可選的,它可以與任何 dnsPolicy 設(shè)置一起使用。 但是,當(dāng) Pod 的 dnsPolicy 設(shè)置為 “None” 時(shí),必須指定 dnsConfig 字段。

用戶可以在 dnsConfig 字段中指定以下屬性:

  • nameservers:將用作于 Pod 的 DNS 服務(wù)器的 IP 地址列表。 最多可以指定 3 個(gè) IP 地址。當(dāng) Pod 的 dnsPolicy 設(shè)置為 “None” 時(shí), 列表必須至少包含一個(gè) IP 地址,否則此屬性是可選的。 所列出的服務(wù)器將合并到從指定的 DNS 策略生成的基本名稱(chēng)服務(wù)器,并刪除重復(fù)的地址。
  • searches:用于在 Pod 中查找主機(jī)名的 DNS 搜索域的列表。此屬性是可選的。 指定此屬性時(shí),所提供的列表將合并到根據(jù)所選 DNS 策略生成的基本搜索域名中。 重復(fù)的域名將被刪除。Kubernetes 最多允許 32 個(gè)搜索域。
  • options:可選的對(duì)象列表,其中每個(gè)對(duì)象可能具有 name 屬性(必需)和 value 屬性(可選)。 此屬性中的內(nèi)容將合并到從指定的 DNS 策略生成的選項(xiàng)。 重復(fù)的條目將被刪除。

以下是具有自定義 DNS 設(shè)置的 Pod 示例:

apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsPolicy: "None"
dnsConfig:
nameservers:
- 192.0.2.1 # 這是一個(gè)示例
searches:
- ns1.svc.cluster-domain.example
- my.dns.search.suffix
options:
- name: ndots
value: "2"
- name: edns0

創(chuàng)建上面的 Pod 后,容器 test 會(huì)在其 /etc/resolv.conf 文件中獲取以下內(nèi)容:

nameserver 192.0.2.1
search ns1.svc.cluster-domain.example my.dns.search.suffix
options ndots:2 edns0

對(duì)于 IPv6 設(shè)置,搜索路徑和名稱(chēng)服務(wù)器應(yīng)按以下方式設(shè)置:

kubectl exec -it dns-example -- cat /etc/resolv.conf

輸出類(lèi)似于:

nameserver 2001:db8:30::a
search default.svc.cluster-domain.example svc.cluster-domain.example cluster-domain.example
options ndots:5

四、DNS搜索域列表限制

Kubernetes 本身不限制 DNS 配置,最多可支持 32 個(gè)搜索域列表,所有搜索域的總長(zhǎng)度不超過(guò) 2048。 此限制分別適用于節(jié)點(diǎn)的解析器配置文件、Pod 的 DNS 配置和合并的 DNS 配置。

早期版本的某些容器運(yùn)行時(shí)可能對(duì) DNS 搜索域的數(shù)量有自己的限制。 根據(jù)容器運(yùn)行環(huán)境,那些具有大量 DNS 搜索域的 Pod 可能會(huì)卡在 Pending 狀態(tài)。

五、Windows的DNS解析

  • 在 Windows 節(jié)點(diǎn)上運(yùn)行的 Pod 不支持 ClusterFirstWithHostNet。 Windows 將所有帶有 . 的名稱(chēng)視為全限定域名(FQDN)并跳過(guò)全限定域名(FQDN)解析。
  • 在 Windows 上,可以使用的 DNS 解析器有很多。 由于這些解析器彼此之間會(huì)有輕微的行為差別,建議使用 Resolve-DNSName powershell cmdlet 進(jìn)行名稱(chēng)查詢解析。
  • 在 Linux 上,有一個(gè) DNS 后綴列表,當(dāng)解析全名失敗時(shí)可以使用。 在 Windows 上,只能有一個(gè) DNS 后綴, 即與該 Pod 的命名空間相關(guān)聯(lián)的 DNS 后綴(例如:mydns.svc.cluster.local)。 Windows 可以解析全限定域名(FQDN),和使用了該 DNS 后綴的 Services 或者網(wǎng)絡(luò)名稱(chēng)。 例如,在 default 命名空間中生成一個(gè) Pod,該 Pod 會(huì)獲得的 DNS 后綴為 default.svc.cluster.local。 在 Windows 的 Pod 中,可以解析 kubernetes.default.svc.cluster.local 和 kubernetes, 但是不能解析部分限定名稱(chēng)(kubernetes.default 和 kubernetes.default.svc)。
  • 廣告合作

  • QQ群號(hào):4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請(qǐng)注明出處“站長(zhǎng)百科”和原文地址。