[MacOS 환경 #10] ExternalName — 외부 서비스와 연결하기

도람·2025년 11월 13일

쿠버네티스의 Service 타입 중 하나인 ExternalName은
클러스터 밖에 있는 서버를 내부 서비스처럼 부를 수 있게 해주는 기능이다.

예를 들어,
내 쿠버네티스 안의 애플리케이션이 외부 DB 서버(db.company.com)에 접근해야 한다면,
굳이 매번 그 긴 주소를 쓰지 않고
mysql-service 라는 “별명”으로 대신 부를 수 있게 해주는 것이다.


ExternalName 개념 요약

항목설명
목적외부 서버를 쿠버네티스 내부에서 “서비스 이름”으로 부를 수 있게 함
예시mysql-servicedb.company.com 으로 자동 연결
동작 방식DNS CNAME 레코드를 이용한 이름 매핑
특징IP를 직접 할당하지 않음 (DNS 이름만 매핑)

예제코드1, 외부 사이트 연결

apiVersion: v1
kind: Service
metadata:
  name: ex-url-1
  namespace: default
spec:
  type: ExternalName
  externalName: sysnet4admin.github.io

아래는 sysnet4admin.github.io 라는 외부 사이트를
쿠버네티스 내부에서 ex-url-1 이라는 이름으로 연결하는 예시다.

이제 쿠버네티스 내부에서는
http://ex-url-1 이라고 부르면
자동으로 sysnet4admin.github.io 로 연결된다.


예제코드2, 다른 외부 주소로 연결하기

이번엔 다른 외부 리소스(k8s-edu.github.io)로 연결해본다.

apiVersion: v1
kind: Service
metadata:
  name: ex-url-2
  namespace: default
spec:
  type: ExternalName
  externalName: k8s-edu.github.io

이 서비스는 ex-url-2 라는 이름으로 외부 주소에 매핑된다.


실습

실습진행 방법

  • YAML 파일 생성
    vim externalname.yaml
    위 예제 중 첫 번째 예제를 붙여넣는다.

  • 리소스 적용
    kubectl apply -f externalname.yaml

  • 서비스 목록 확인
    kubectl get svc

이렇게 서비스가 ex-url-1 이름으로 등록된 것을 확인할 수 있다.


확인 방법

확인 방법은 파드 내부에 들어가서 curl 명령어를 통해 서비스를 호출해보면 된다.

kubectl run test-pod --image=busybox:1.28 -it --rm --restart=Never

명령어 해석

옵션설명
run test-pod이름이 test-pod인 파드를 하나 실행함
--image=busybox:1.28BusyBox(리눅스 기본 유틸이 포함된 가벼운 이미지) 사용
-it터미널을 통해 직접 명령 입력 가능 (interactive 모드)
--rm파드 종료 시 자동 삭제
--restart=Never한 번만 실행하고 재시작하지 않음

실행 로그분석

처음에 wget -qO- ex-url-1 명령을 실행했을 때,
HTTP/1.1 404 Not Found라는 메시지가 출력되었다.

이는 ExternalName 자체가 잘 작동하고 있다는 뜻이다.
404는 “서버에 연결은 됐지만, 요청한 경로(루트 / )에 페이지가 존재하지 않는다”는 의미이기 때문이다.

즉, 쿠버네티스 내부 DNS가
ex-url-1 → sysnet4admin.github.io 로 정상 변환했지만,
그 사이트 루트 경로에 index 페이지가 없어서 404가 발생한 것이다


nslookup ex-url-1 명령을 실행하면 아래와 같이 출력된다.

Server:    10.96.0.10
Address 1: 10.96.0.10  kube-dns.kube-system.svc.cluster.local
Name:      ex-url-1
Address 1: sysnet4admin.github.io

이 결과는 쿠버네티스 DNS가 ex-url-1이라는 이름을 외부 도메인으로 변환해줬다는 것을 의미한다.
즉, ExternalName의 목적(내부 서비스 이름으로 외부 도메인을 호출)이 제대로 수행된 것이다.


정리

구분설명
wget: 404 Not Found외부 사이트 연결 성공, 단 루트 페이지 없음
nslookup 결과 정상ExternalName DNS 매핑 정상 작동
결론외부 서비스로의 연결은 성공이며, 오류가 아닌 정상 동작 상태임

결과적으로 ExternalName 서비스는 연결 자체에 문제가 없고,
단지 외부 서버의 응답 내용(404 반환)은 해당 서버 설정에 따른 결과 때문이다.

profile
정도를 걷는 엔지니어

0개의 댓글