DevOps/k8s

느슨한 결합을 위한 ExternalName 서비스

xlwdn98767 2023. 6. 21. 11:22
728x90

Externalname이란

 k8s에서 외부 서비스를 이용할 때 externalname을 사용할 때 사용자가 k8s 컨트롤플레인에 external name질의하게되고, 질의 시에 등록한 cname 레코드가 나오게 되며 이후 요청이 처리된다.

 

apiVersion: v1
kind: Service
metadata:
  name: sample-externalname
  namespace: default
spec:
  type: ExternalName
  externalName: external.example.com

 

 

질의 시에 아래이 표시된다.

dig sample-externalname.default.svc.cluster.local

; <<>> DiG 9.16.1-Ubuntu <<>> sample-externalname.default.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS

.....

;; ANSWER SECTION:
sample-externalname.default.svc.cluster.local. 5 IN CNAME external.example.com.

....

 

 

이를 활용하여 어플리케이션에서 외부 서비스 externalName을 통해 이용하게되면 추후 변동사항이 생기더라도(서비스 버전 변경에 따른 dns 이동 등) externalName service만 다시 설정하면 정상작동하므로 외부 서비스와의 느슨한 결합을 이끌어낼 수 있다.

 

 

 

주의해야할 점

 clusterIP에서 externalName으로 서비스를 변경하여 A레코드 -> CNAME으로 변경을 원할 시에 clusterIP를 명시적으로 공란으로 입력하여야한다.

 

spec:
  type: ClusterIP

 

spec:
  type: ExternalName
  clusterIP: ""
  externalName: www.example.com