Pod 主機名
本頁面解釋瞭如何設定 Pod 的主機名、配置後的潛在副作用以及底層機制。
預設 Pod 主機名
建立 Pod 時,其主機名(從 Pod 內部觀察)派生自 Pod 的 `metadata.name` 值。主機名及其對應的完全限定域名(FQDN)都被設定為 `metadata.name` 值(從 Pod 的角度來看)。
apiVersion: v1
kind: Pod
metadata:
name: busybox-1
spec:
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
透過此清單建立的 Pod 的主機名和完全限定域名(FQDN)將設定為 busybox-1
。
帶有 Pod 主機名和子域欄位的主機名
Pod 規範包含一個可選的 hostname
欄位。設定此值後,它將優先於 Pod 的 metadata.name
作為主機名(從 Pod 內部觀察)。例如,spec.hostname
設定為 my-host
的 Pod 的主機名將設定為 my-host
。
Pod 規範還包含一個可選的 subdomain
欄位,表示 Pod 屬於其名稱空間中的一個子域。如果 Pod 在名稱空間 my-namespace
中將 spec.hostname
設定為 "foo",將 spec.subdomain
設定為 "bar",則其主機名將變為 foo
,其完全限定域名(FQDN)將變為 foo.bar.my-namespace.svc.cluster-domain.example
(從 Pod 內部觀察)。
當同時設定了主機名和子域時,叢集的 DNS 伺服器將根據這些欄位建立 A 和/或 AAAA 記錄。請參閱:Pod 的主機名和子域欄位。
帶有 Pod 的 setHostnameAsFQDN 欄位的主機名
當 Pod 配置為具有完全限定域名 (FQDN) 時,其主機名是短主機名。例如,如果你有一個 FQDN 為 `busybox-1.busybox-subdomain.my-namespace.svc.cluster-domain.example` 的 Pod,那麼預設情況下,該 Pod 內部的 `hostname` 命令返回 `busybox-1`,而 `hostname --fqdn` 命令返回 FQDN。
當 Pod 規範中同時設定了 `setHostnameAsFQDN: true` 和子域欄位時,kubelet 會將 Pod 的 FQDN 寫入該 Pod 名稱空間的主機名。在這種情況下,`hostname` 和 `hostname --fqdn` 都返回 Pod 的 FQDN。
Pod 的 FQDN 以之前定義的方式構建。它由 Pod 的 spec.hostname
(如果指定)或 metadata.name
欄位、spec.subdomain
、namespace
名稱和叢集域字尾組成。
注意
在 Linux 中,核心的主機名欄位(`struct utsname` 的 `nodename` 欄位)限制為 64 個字元。
如果 Pod 啟用此功能且其 FQDN 超過 64 個字元,則將無法啟動。Pod 將保持在 `Pending` 狀態(由 `kubectl` 看到為 `ContainerCreating`),並生成錯誤事件,例如“無法從 Pod 主機名和叢集域構造 FQDN”。
這意味著在使用此欄位時,您必須確保 Pod 的 metadata.name
(或 spec.hostname
)和 spec.subdomain
欄位的組合長度不超過 64 個字元。
帶有 Pod 的 hostnameOverride 的主機名
Kubernetes v1.34 [alpha]
(預設停用)在 Pod 規範中設定 `hostnameOverride` 的值會導致 kubelet 無條件地將 Pod 的主機名和完全限定域名(FQDN)都設定為 `hostnameOverride` 值。
hostnameOverride
欄位有 64 個字元的長度限制,並且必須符合 RFC 1123 中定義的 DNS 子域名標準。
示例
apiVersion: v1
kind: Pod
metadata:
name: busybox-2-busybox-example-domain
spec:
hostnameOverride: busybox-2.busybox.example.domain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
注意
這僅影響 Pod 內部的主機名;它不影響叢集 DNS 伺服器中 Pod 的 A 或 AAAA 記錄。如果 hostnameOverride
與 hostname
和 subdomain
欄位同時設定
Pod 內的主機名將被
hostnameOverride
值覆蓋。叢集 DNS 伺服器中 Pod 的 A 和/或 AAAA 記錄仍根據
hostname
和subdomain
欄位生成。
注意:如果設定了 `hostnameOverride`,則不能同時設定 `hostNetwork` 和 `setHostnameAsFQDN` 欄位。API 伺服器將明確拒絕任何嘗試這種組合的建立請求。
有關 `hostnameOverride` 與其他欄位(hostname、subdomain、setHostnameAsFQDN、hostNetwork)組合時的行為詳情,請參閱 KEP-4762 設計細節 中的表格。