관리 메뉴

피터의 개발이야기

[kubernetes] metricbeat kubernetes DNS lookup failure: no such host 해결방법, kubernetes DNS 접속 본문

Kubernetes/트러블슈팅&장애대응

[kubernetes] metricbeat kubernetes DNS lookup failure: no such host 해결방법, kubernetes DNS 접속

기록하는 백앤드개발자 2023. 2. 22. 03:47
반응형

[kubernetes] 쿠버네티스 목차

ㅁ 들어가며

 ㅇ 4편 [kubernetes] kubernetes event exporter  작업 과정에서 metricbeat kubernetes DNS lookup failure: no such host 이슈가 발생하여 이를 해결하는 과정을 정리하였다.

 

ㅁ 이슈 내용

{"level":"debug","error":"dial tcp: lookup elasticsearch-svc on 10.96.0.10:53: no such host","sink":"elasticsearch-dump","event":"Successfully assigned monitoring/event-exporter-5b67ddd755-xkzhc to minikube","time":"2023-02-21T18:06:41Z","caller":"/app/pkg/exporter/channel_registry.go:69","message":"Cannot send event"}

 ㅇ event exporter Pod는 monitoring Namespace에서 작동 중이다.

 ㅇ elastic Namespace에서  elasticsearch와 통신하기 위해 http://elasticsearch-svc:9200 로 접속 시도하였지만 dial tcp: lookup elasticsearch-svc on 10.96.0.10:53: no such host 오류가 발생하였다.

 ㅇ 예전 글인 [AWS VPN] CNI란에서 정리하였듯이 쿠버네티스는 기본적으로 'kubenet' 이라는 자체적인 CNI 플러그인을 제공하지만 그 자체로는 컨테이너간의 노드간 교차 네트워킹을 지원하지 않는다.

 

ㅁ 1차 대응, Service IP 적용

 ㅇ DNS의 정보 조회 시 실패가 되어 elasticsearch svc의 Cluster-ip인 http://10.100.237.73:9200으로 설정을 변경하여 시도하였다.

 ㅇ events exporter와 elasticsearch와 통신이 성공하여 index가 생성되는 것을 확인하였지만, elasticsearch에 변화가 생기면 수동으로 IP를 변경해야만 했다.

 

ㅁ 서비스 및 파드용 DNS

아래는 kubernetes 정식 문서의 내용(a-aaaa-레코드)을 발췌하였다. 

 

일반적으로 파드에는 다음과 같은 DNS 주소를 갖는다.

pod-ip-address.my-namespace.pod.cluster-domain.example.

 

예를 들어, default 네임스페이스의 파드에 IP 주소 172.17.0.3이 있고, 클러스터의 도메인 이름이 cluster.local 이면, 파드는 다음과 같은 DNS 주소를 갖는다.

172-17-0-3.default.pod.cluster.local.

 

서비스에 의해 노출된 모든 파드는 다음과 같은 DNS 주소를 갖는다.

pod-ip-address.service-name.my-namespace.svc.cluster-domain.example.

 

서비스는 서비스 IP 계열에 따라 my-svc.my-namespace.svc.cluster-domain.example 형식의 이름을 가진 DNS A 또는 AAAA 레코드가 할당된다. 이는 서비스의 클러스터 IP로 해석된다.

"헤드리스"(클러스터 IP가 없는) 서비스 또한 서비스 IP 계열에 따라 my-svc.my-namespace.svc.cluster-domain.example 형식의 이름을 가진 DNS A 또는 AAAA 레코드가 할당된다. 

 

 

http://elasticsearch-svc.elastic.svc.cluster.local:9200

 위의 설명을 바탕으로 {service}.{namespace}.svc.cluster.local:9200 형태로 호출하면, 다른 namespace의 pod와 통신을 할 수 있게 된다.

 

ㅁ 참조

https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/#a-aaaa-%EB%A0%88%EC%BD%94%EB%93%9C

 

서비스 및 파드용 DNS

쿠버네티스는 파드와 서비스를 위한 DNS 레코드를 생성한다. 사용자는 IP 주소 대신에 일관된 DNS 네임을 통해서 서비스에 접속할 수 있다. 소개 쿠버네티스 DNS는 클러스터의 서비스와 DNS 파드를

kubernetes.io

https://kubernetes.io/ko/docs/concepts/services-networking/service/#dns

 

서비스

파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법 쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할

kubernetes.io

https://peterica.tistory.com/302

 

[kubernetes] kubernetes event exporter

ㅁ 개요 3편 [Kubernetes] Spring에서 쿠버네티스 Pod 정보조회에서 Spring에서 pod의 정보를 조회하는 과정을 정리하였다. 이번 글에서는 휘발성인 kubernetes evets의 지속적인 모니터링을 위해 이벤트 이력

peterica.tistory.com

 

반응형
Comments