Downward API

Downward API

실행 중인 컨테이너에 Pod와 컨테이너 필드를 노출하는 두 가지 방법이 있어요: 환경 변수, 그리고 특수 볼륨 유형으로 채워지는 파일. 이 두 가지 방법을 합쳐 downward API라고 불러요.

컨테이너가 Kubernetes에 과도하게 결합(coupled)되지 않은 채 자신에 대한 정보를 갖는 것은 유용할 때가 있어요. downward API는 컨테이너가 Kubernetes 클라이언트나 API server를 사용하지 않고도 자신 또는 클러스터에 대한 정보를 소비하게 해줘요.

예를 들어 기존 애플리케이션이 특정 잘 알려진 환경 변수에 고유 식별자가 있다고 가정한다면, Pod의 이름을 식별자로 사용해 그 환경 변수에 주입할 수 있어요. 앱을 래핑하는 방법은 지루하고 오류가 나기 쉬우며 낮은 결합 목표를 위반하므로, downward API가 더 나은 선택이에요.

사용 가능한 필드

downward API를 통해 사용할 수 있는 Kubernetes API 필드는 일부뿐이에요.

  • Pod 수준 필드의 정보는 fieldRef로 전달할 수 있어요.
  • 컨테이너 수준 필드의 정보는 resourceFieldRef로 전달할 수 있어요.

fieldRef로 사용 가능한 정보

Pod 수준 필드 중 환경 변수나 downwardAPI 볼륨 어느 쪽으로든 제공할 수 있는 필드:

  • metadata.name — Pod의 이름
  • metadata.namespace — Pod의 네임스페이스
  • metadata.uid — Pod의 고유 ID
  • metadata.annotations['<KEY>'] — Pod의 annotation 값 (예: metadata.annotations['myannotation'])
  • metadata.labels['<KEY>'] — Pod의 라벨 텍스트 값 (예: metadata.labels['mylabel'])

환경 변수로는 사용 가능하지만 downwardAPI 볼륨 fieldRef로는 불가능한 정보:

  • spec.serviceAccountName — Pod의 서비스 계정 이름
  • spec.nodeName — Pod가 실행되는 노드 이름
  • status.hostIP — Pod가 할당된 노드의 주 IP 주소
  • status.hostIPsstatus.hostIP의 듀얼 스택 버전
  • status.podIP — Pod의 주 IP 주소 (보통 IPv4)
  • status.podIPsstatus.podIP의 듀얼 스택 버전

downwardAPI 볼륨 fieldRef로는 사용 가능하지만 환경 변수로는 불가능한 정보:

  • metadata.labels — 모든 Pod 라벨, label-key="escaped-label-value" 형식으로 라벨당 한 줄
  • metadata.annotations — 모든 Pod annotations

downward API 볼륨

downwardAPI 볼륨 유형은 Pod와 컨테이너 필드를 파일로 컨테이너에 노출해요. 이 볼륨은 컨테이너가 Pod와 컨테이너 자신에 대한 정보를 읽을 수 있게 해요.

마운트 경로와 필드 선택

Pod 스펙에서 spec.containers[].volumeMountsdownwardAPI 볼륨을 마운트하고, 볼륨 정의에서 items로 노출할 필드를 지정할 수 있어요.

더 알아보기 (Learn more)