Pod 호스트네임
Pod 호스트네임 (Pod Hostname)
이 페이지는 Pod의 호스트네임을 설정하는 방법, 설정 후 발생할 수 있는 부작용, 그리고 그 기저 메커니즘을 설명합니다.
출처: 문서
본문
기본 Pod 호스트네임 (Default Pod hostname)
Pod가 생성되면 (Pod 내부에서 관찰되는) 호스트네임은 Pod의 metadata.name 값에서 파생됩니다. 호스트네임과 그에 해당하는 완전한 도메인 이름(FQDN) 모두 (Pod의 관점에서) metadata.name 값으로 설정됩니다.
apiVersion: v1
kind: Pod
metadata:
name: busybox-1
spec:
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
이 매니페스트로 생성된 Pod의 호스트네임과 완전한 도메인 이름(FQDN)은 busybox-1로 설정됩니다.
Pod의 hostname과 subdomain 필드를 사용한 호스트네임 (Hostname with pod's hostname and subdomain fields)
Pod 스펙에는 선택적인 hostname 필드가 있습니다. 설정되면 이 값이 (Pod 내부에서 관찰되는) 호스트네임으로서 Pod의 metadata.name보다 우선합니다. 예를 들어 spec.hostname이 my-host로 설정된 Pod의 호스트네임은 my-host가 됩니다.
Pod 스펙에는 선택적인 subdomain 필드도 있어, Pod가 자신의 네임스페이스 안의 서브도메인에 속함을 나타냅니다. 네임스페이스 my-namespace에서 Pod가 spec.hostname을 "foo"로, spec.subdomain을 "bar"로 설정했다면, (Pod 내부에서 관찰되는) 호스트네임은 foo가 되고 완전한 도메인 이름(FQDN)은 foo.bar.my-namespace.svc.cluster-domain.example이 됩니다.
hostname과 subdomain이 모두 설정되면 클러스터의 DNS 서버가 이 필드들을 기반으로 A 및/또는 AAAA 레코드를 만듭니다. Pod의 hostname과 subdomain 필드를 참고하세요.
Pod의 setHostnameAsFQDN 필드를 사용한 호스트네임 (Hostname with pod's setHostnameAsFQDN fields)
Pod가 완전한 도메인 이름(FQDN)을 갖도록 구성되면, 그 호스트네임은 짧은 호스트네임입니다. 예를 들어 완전한 도메인 이름 busybox-1.busybox-subdomain.my-namespace.svc.cluster-domain.example을 가진 Pod가 있다면, 기본적으로 그 Pod 안의 hostname 명령은 busybox-1을 반환하고 hostname --fqdn 명령은 FQDN을 반환합니다.
Pod 스펙에 setHostnameAsFQDN: true와 subdomain 필드가 모두 설정되면, kubelet은 Pod의 FQDN을 그 Pod의 네임스페이스를 위한 호스트네임에 씁니다. 이 경우 hostname과 hostname --fqdn이 모두 Pod의 FQDN을 반환합니다.
Pod의 FQDN은 앞서 정의한 것과 같은 방식으로 구성됩니다. Pod의 spec.hostname(지정된 경우) 또는 metadata.name 필드, spec.subdomain, 네임스페이스 이름, 클러스터 도메인 접미사로 구성됩니다.
참고: Linux에서 커널의 hostname 필드(
struct utsname의nodename필드)는 64자로 제한됩니다. Pod가 이 기능을 활성화했는데 FQDN이 64자보다 길면 시작에 실패합니다. Pod는 Pending 상태(kubectl로는ContainerCreating)로 유지되며 "Failed to construct FQDN from Pod hostname and cluster domain" 같은 오류 이벤트를 생성합니다. 즉 이 필드를 사용할 때는 Pod의metadata.name(또는spec.hostname)과spec.subdomain필드의 합산 길이가 64자를 초과하지 않는 FQDN을 만들도록 보장해야 합니다.
Pod의 hostnameOverride를 사용한 호스트네임 (Hostname with pod's hostnameOverride)
이 기능은 Kubernetes에서 안정(stable) 기능이며 버전 1.37부터 적용됐어요. 처음 사용 가능해진 것은 v1.34 릴리스에서입니다.
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 설계 세부 사항의 표를 참고하세요.