nayoungs
항상 끈기있게
nayoungs
  • 분류 전체보기 (274)
    • Cloud (21)
      • AWS (15)
      • Azure (3)
      • NCP (2)
      • GCP (1)
    • DevOps (68)
      • Docker (16)
      • Kubernetes (50)
      • CICD (2)
    • IaC (25)
      • Ansible (17)
      • Terraform (8)
    • Certification (4)
    • 금융 IT (5)
    • AI (3)
    • Linux (47)
    • 미들웨어 (5)
    • Programming (7)
      • GoLang (3)
      • Spring (4)
    • CS (25)
      • 네트워크 (17)
      • 운영체제 (5)
      • Web (1)
      • 개발 상식 (2)
      • 데이터베이스 (0)
    • Algorithm (59)
      • 프로그래머스 (36)
      • 백준 (18)
      • 알고리즘 정리 (5)
    • ETC (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nayoungs

항상 끈기있게

DevOps/Kubernetes

[Kubernetes] Service : ExternalName

2022. 5. 22. 05:49
728x90

✔️ Service : ExternalName 타입

ExternalName 타입은 외부에서 접근하기 위한 종류가 아니라,

내부 파드가 외부의 특정 FQDN에 쉽게 접근하기 위한 서비스이다.

k8s cluster의 coredns 서비스가 특정 FQDN에 대한 CNAME(서비스의 FQDN)을 제공함에 따라

해당 CNAME을 이용하여 쉽게 통신할 수 있다.

즉, 클러스터 내부에서 클러스터 외부의 특정 서비스에 접속하기 위해 DNS CNAME을 설정하는 것이다.

접속하기 위한 외부 FQDN 주소가 바뀌더라도,

CNAME은 그대로 유지할 수 있어 애플리케이션을 다시 작성하거나 빌드하지 않아도 된다.

  • CNAME : 도메인 별명(별칭)

 

externalName

  • svc.spec.externalName
  • ExternalName이 함께 사용함
$ kubectl explain svc.spec.externalName             
KIND:     Service
VERSION:  v1

FIELD:    externalName <string>

DESCRIPTION:
     externalName is the external reference that discovery mechanisms will
     return as an alias for this service (e.g. a DNS CNAME record). No proxying
     will be involved. Must be a lowercase RFC-1123 hostname
     (https://tools.ietf.org/html/rfc1123) and requires `type` to be
     "ExternalName".

예시 

apiVersion: v1
kind: Service
metadata: 
  name: myweb-extname
spec:
  type: ExternalName
  externalName: www.google.com

 

💻 실습

 

weather-ext-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: weather-ext-svc
spec:
  type: ExternalName
  externalName: wttr.in
$ kubectl create -f weather-ext-svc.yaml 
service/weather-ext-svc created
$ kubectl get svc                       
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
weather-ext-svc   ExternalName   <none>          wttr.in       <none>         3s

임시로 파드를 띄워 서비스명으로 질의를 해보면 wttr.in 을 확인할 수 있다.

$ kubectl run nettool -it --image ghcr.io/c1t1d0s7/network-multitool --rm

If you don't see a command prompt, try pressing enter.
/ # host weather-ext-svc
weather-ext-svc.default.svc.cluster.local is an alias for wttr.in.
wttr.in mail is handled by 10 chub.in.

다음과 같이 externalName을 수정해보자.

 

weather-ext-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: weather-ext-svc
spec:
  type: ExternalName
  externalName: www.google.com
$ kubectl replace -f weather-ext-svc.yaml                                
service/weather-ext-svc replaced

수정 후에 호스트명으로 다시 질의해보면,

변경된 externalName인 www.google.com으로 응답을 받을 수 있다.

$ kubectl run nettool -it --image ghcr.io/c1t1d0s7/network-multitool --rm
If you don't see a command prompt, try pressing enter.
/ # host weather-ext-svc
weather-ext-svc.default.svc.cluster.local is an alias for www.google.com.
www.google.com has address 172.217.31.132
www.google.com has IPv6 address 2404:6800:4004:801::2004

이와같이, 이름으로 매핑하게되면 외부의 다른 서비스 경로를 바꿀 때 편리하게 사용할 수 있다.

 

728x90
저작자표시 비영리 (새창열림)
    'DevOps/Kubernetes' 카테고리의 다른 글
    • [Kubernetes] k8s 프로브(Probe) : Readiness Probe
    • [Kubernetes] k8s Ingress란? (feat. 도메인 없이 테스트하기)
    • [Kubernetes] Service : Load Balancer
    • [Kubernetes] Service : NodePort
    nayoungs
    nayoungs
    안되면 될 때까지

    티스토리툴바