ExternalName
ExternalName은 외부 어플리케이션을 K8s 내부 네트웍에 있는 것 처럼 사용하게 해줍니다. NodePort나 LoadBalancer와 다르게 외부에서 클러스터 내부로 접근하기 위한 것이 아니라 클러스터 내부에서 외부로 접근하기 위해 사용 합니다.
언제 쓸까요?
예를들어 auction-price.co.kr 이라는 도메인을 이용해 쿠버네티스 안쪽에 있는 리소스 뿐만 아니고 쿠버네티스에 Pod형태로 올라오지 않은 어플리케이션도 쿠버네티스의 네트웍을 통해 접근 하고 싶을 때 사용 합니다.
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: my.database.example.com
위와 같이 ExternalName을 선언해놓으면 my-service.prod.svc.cluster.local 호스트를 검색했을 때 my.database.example.com을 반환하게 됩니다. 여기에서 my.database.example.com이 CNAME입니다.
apiVersion: v1
kind: Service
metadata:
name: my-service2
namespace: prod
spec:
type: ExternalName
externalName: www.google.com
위와 비슷하게 my-service2를 검색하면 www.google.com이 이 리턴되는 ExternalName Service입니다.
kubectl run curl --image=radial/busyboxplus:curl -it
kubectl attach curl -c curl -i -t
위 명령어를 이용해 curl이 되는 busybox를 하나 띄우고 들어가 봅니다.
my-service2로 curl을 날려보면
google로 연결된 것을 볼 수 있습니다.
FQDN
FQDN은 Fully Qualified Domain Name의 약자 입니다.
쿠버네티스에서 FQDN에 대한 언급이 자꾸 나오는데요 Pod를 찾을 때 같은 Namespace에서 찾으면 PQDN(Partially Qualified Domain Name)만으로도 찾을 수 있지만 Namespace가 달라지만 FQDN으로 찾아야 합니다.
참고
https://kubernetes.io/ko/docs/concepts/services-networking/service/