Kubernetes 에서 ExternalName 역할은?

HA JIN-YOUNGHA JIN-YOUNG
3 min read

“Kubernetes에서 복잡한 프록시 없이도 내부 서비스 처럼 보이는 외부 리소스를 만들고 싶을때 ExternalName을 고려해봅시다..”

🔧 ExternalName이란?

ExternalName은 Kubernetes 서비스의 한 종류로, DNS 이름을 클러스터 내부에서 접근 가능한 서비스 이름으로 매핑해줍니다.

  • 외부 도메인을 내부 DNS로 연결

  • 클러스터 안에서 외부 서비스를 호출할 때 편리

  • IP를 직접 지정하지 않고 DNS 이름만 명시

···

💡 언제 사용하면 좋을까?

  1. 외부 서비스와 연동할 때 : 클러스터 밖의 데이터베이스, 외부 API 등

  2. 서비스 추상화가 필요할 때 : 코드나 설정에 외부 도메인을 직접 쓰지 않고 svc 이름으로 사용

  3. 간단한 DNS 리다이렉트 : 내부 DNS를 통해 외부 DNS로 연결하고 싶을 때

∵ 운영 환경에서는 ConfigMap이나 Helm 설정에서 외부 주소를 숨기고 svc로 추상화하면 유지보수성이 매우 좋아집니다.

···

🛠 실습 예제

  1. ExternalName 서비스 생성
kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: google-external
spec:
  type: ExternalName
  externalName: www.google.com
EOF

2. 확인

kubectl get svc google-external
NAME              TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
google-external   ExternalName   <none>       www.google.com   <none>   1m

3. 클러스터 내부에서 테스트

kubectl run testpod --rm -it --image=busybox -- /bin/sh
nslookup google-external.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      google-external.default.svc.cluster.local
Address 1: 142.250.206.132 www.google.com

→ 정상적으로 외부 도메인으로 매핑되었음을 확인

···

⚠ 주의할 점

  1. ExternalName 서비스는 포트를 노출하거나 트래픽을 프록시하지 않습니다.

  2. DNSName만 Mapping할 뿐이기 때문에, 서비스 디스커버리 전용으로 생각하는 것이 좋습니다.

  3. 클러스터 내부에서만 동작하며, 외부에서 접근은 불가능합니다.

  4. Service와 달리 Endpoints를 만들지 않습니다.

···

🛠 ExternalName 과 ClusterIP 와의 차이

ExternalName 타입의 Kubernetes Service는 특정 상황에서는 클러스터IP와 유사한 역할을 수행할 수 있지만, 둘 사이에는 중요한 차이가 있습니다.

···

externalName / ClusterIP

externalName / ClusterIP

1. 동작 방식의 차이

ClusterIP

  • 클러스터 내부에서 고유한 IP 주소를 생성하고, 이 IP 주소를 통해 요청을 라우팅합니다.

  • 트래픽은 Kubernetes 네트워크를 통해 관리

ExternalName

  • 클러스터 네트워크 내에서 DNSName을 Mapping만 하고, 실제로는 클러스터 외부의 DomainName으로 트래픽을 리다이렉트(DNS 수준)합니다.

  • 트래픽은 Kubernetes 네트워크를 통과하지 않습니다.

externalName 과 clusterIP 간의 네트워크흐름 비교

externalName 과 clusterIP 간의 네트워크흐름 비교

2. 사용 사례의 차이

ClusterIP

  • 클러스터 내부에서 Pod 간 통신을 관리할 때 주로 사용됩니다.
    Kubernetes 내부 네트워크에서만 동작하며, 외부 노출되지 않습니다.

ExternalName

  • 외부 서비스(예: 외부 API나 마이크로서비스)에 트래픽을 전달해야 할 때 사용됩니다.

3. IP 대신 DNSName 사용:

ExternalName

  • 고정 IP가 생성되지 않고, 정의된 도메인 이름(www.google.com)으로 매핑.

  • 따라서 이 방식은 외부 서비스가 IP 대신 DNSName 을 통해 접근 가능한 경우 적합

···

🛠 결론

  1. ExternalName 서비스는 클러스터 내부에서 외부 도메인 이름을 내부 서비스 이름으로 매핑하여, 외부 리소스를 내부 서비스처럼 사용할 수 있게 합니다. 이는 외부 IP 주소를 직접 사용하지 않고 DNS 이름을 통해 접근할 수 있도록 합니다.

  2. 주의할 점으로는, ExternalName 서비스는 포트를 노출하거나 트래픽을 프록시하지 않으며, 단순히 DNS 이름을 매핑하는 역할만 수행합니다. 따라서 서비스 디스커버리 전용으로 사용하는 것이 적합합니다.

  3. ClusterIP와의 차이점으로는, ClusterIP는 클러스터 내부에서 고유한 IP 주소를 생성하여 요청을 라우팅하는 반면, ExternalName은 DNS 수준에서 외부 도메인으로 트래픽을 리다이렉트합니다. 이로 인해 ExternalName은 클러스터 네트워크를 통과하지 않습니다.

  4. 그러므로, ExternalName 은, ClusterIP 대체가 아닌
    외부 서비스와의 연결을 돕기 위한 별도의 DNS 기반 기능으로 설명될 수 있습니다.

0
Subscribe to my newsletter

Read articles from HA JIN-YOUNG directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

HA JIN-YOUNG
HA JIN-YOUNG