본문 바로가기
자질구레

[kubernetes] 서비스(Service)가 필요한 이유

by jonnwon 2025. 2. 2.
728x90
반응형
kubectl run test-nslookup --image=busybox:1.28 -it --rm --restart=Never -- nslookup <pod 이름>

 

당연히 안된다. 뭣이 당연하냐 ?

 

1. Pod 이름만으로 DNS 조회가 안 되는 이유

 

Kubernetes에서는 Pod 이름만으로 DNS 조회를 할 수 없다.

이는 Kubernetes 내부 DNS 시스템이 Pod 단위가 아니라 Service 단위로 동작하도록 설계되었기 때문

 

Pod을 DNS로 조회하려면 FQDN(Fully Qualified Domain Name) 형식을 사용해야 함

<POD_NAME>.<NAMESPACE>.pod.cluster.local

예를 들어, nginx-resolver라는 Pod의 IP를 찾고 싶다면

nslookup nginx-resolver.default.pod.cluster.local

이렇게 네임스페이스(default)와 도메인(pod.cluster.local)을 포함한 FQDN을 사용해야만 DNS 조회가 가능

 

 

하지만 이 방식조차 Kubernetes에서는 권장되지 않는다.

왜냐, Pod의 IP 주소는 변동될 가능성이 높다.

따라서 DNS를 사용한 안정적인 서비스 제공을 위해 Service를 활용해야 함.

 

 

2. Pod의 IP는 변할 수 있다

 

Pod이 재시작되면 새로운 IP가 할당됨

노드 장애로 인해 Pod이 다른 노드에서 다시 생성될 수 있음

수평 확장(Scaling)으로 인해 여러 개의 동일한 Pod이 존재할 수 있음

 

 

3. Service가 필요한 이유

 

이러한 문제를 해결하기 위해 Kubernetes에서는 Service를 사용하여 Pod을 관리한다.

Service는 고정된 DNS 이름을 제공하며, 자동으로 Pod들의 IP를 추적하고 관리한다.

 

예를 들어, nginx-resolver Pod이 포함된 Service nginx-resolver-service가 있다면,

Pod이 재시작되거나 IP가 변경되어도 서비스의 DNS는 변경되지 않는다.

nslookup nginx-resolver-service.default.svc.cluster.local
혹은
nslookup nginx-resolver-service

이렇게 하면, 언제든지 동일한 방식으로 Pod에 접근할 수 있다.

 

 

728x90