일반적인 서비스 리소스의 경우 <서비스명>.<네임스페이스명>.svc.cluster.local 과 같은 규칙으로 도메인 이름 해석을 진행한다. FQDN 를 정방향 질의하면 서비스에서 해석된 내부의 ClusterIP(헤드리스 서비스의 경우 파드IP) 를 반환하는 것이다.
반면 ExternalName 는 클러스터 내부에서 클러스터 외부의 도메인을 CNAME으로 호출하기 위한 DNS 역할을 한다. 주로 다음과 같은 경우에 사용하게 된다.
- 외부 도메인을 클러스터 내부에서 사용할 때 다른 도메인으로 사용하고 싶은 경우
- 애플리케이션에서 호출하는 엔드포인트를 변경하지 않고도 내/외부 서비스를 전환하고 싶은 경우

1. 생성
다음과 같은 매니페스트로 생성한다. spec.externalName 항목에 지정한 값이 CNAME 으로 사용된다.
kind: Service
apiVersion: v1
metadata:
name: sample-externalname
namespace: default
spec:
type: ExternalName
externalName: external.example.com
다음 커맨드로 생성한 서비스를 조회해보면 EXTERNAL-IP 에 CNAME FQDN 이 출력된다.
$ kubectl get services sample-externalname
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample-externalname ExternalName <none> external.example.com <none> 2s
서비스에 <서비스명>.<네임스페이스명>.svc.cluster.local 로 질의해보면 CNAME 이 반환된다.
$ kubectl run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -
- dig sample-externalname.default.svc.cluster.local CNAME
...
;; QUESTION SECTION:
;sample-externalname.default.svc.cluster.local. IN CNAME
;; ANSWER SECTION:
sample-externalname.default.svc.cluster.local. 30 IN CNAME external.example.com.
...
pod "testpod" deleted
2. 외부 서비스의 도메인과 느슨한 결합 확보
외부 서비스를 쿠버네티스 클러스터 내부에서 호출해야 하는 경우에, 애플리케이션에서 외부 서비스의 엔드포인트(도메인이나 IP)를 직접 호출하면, 추후 외부 서비스의 엔드포인트가 변경 되었을 때 애플리케이션의 변경사항이 많아지게 된다. 하지만 ExternalName 서비스를 사용해서 외부 서비스의 엔드포인트를 CNAME 으로 호출할 수 있게 해두면, 목적지 엔드포인트가 변경되더라도 각 애플리케이션의 수정 없이 쿠버네티스 ExternalName 서비스의 spec.externalName 수정만으로 대처할 수 있게 된다.

3. 내/외부 서비스 전환
내부 API 로 호출하던 것을 외부 API 로 호출하도록 전환할 때에도(또는 반대도) ExternalName 을 사용하면 손쉽게 전환 가능하다. 애플리케이션에서 호출하는 도메인의 변경 필요 없이 ClusterIP 서비스를 바라보던 것을 ExternalName 서비스를 바라보도록 서비스 설정만 변경하면 되기 때문이다. 내부 서비스로 호출할 때는 ClusterIP 가 반환하는 A 레코드로, 외부 서비스로 호출하도록 전환 된 후에는 ExternalName 이 반환하는 CNAME 레코드로 호출하게 된다. ExternalName 서비스의 spec.clusterIP 항목의 값을 빈 값("") 으로 설정하여 apply 하면 된다.

'Kubernetes' 카테고리의 다른 글
| [Kubernetes] Ingress 이해 (0) | 2025.12.27 |
|---|---|
| [Kubernetes] None-Selector 서비스(외부 서비스로의 로드 밸런싱) (0) | 2025.12.05 |
| [Kubernetes] 헤드리스 서비스(개별 파드를 서비스로 노출하기) (0) | 2025.12.05 |
| [Kubernetes] Multi Region 서비스에서 최소한의 latency 를 위한 Topology Aware Hint (0) | 2025.11.23 |
| [Kubernetes] 클러스터 외부 트래픽에 대해 노드에서의 로드 밸런싱 제외 (0) | 2025.11.23 |
