일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- kotlin
- 정보처리기사 실기 기출문제
- 오블완
- mysql 튜닝
- PETERICA
- Linux
- Pinpoint
- aws
- Java
- AWS EKS
- Kubernetes
- kotlin coroutine
- kotlin spring
- MySQL
- 공부
- APM
- 티스토리챌린지
- AI
- 정보처리기사실기 기출문제
- kotlin querydsl
- IntelliJ
- minikube
- CKA
- CKA 기출문제
- CloudWatch
- Elasticsearch
- 코틀린 코루틴의 정석
- 정보처리기사 실기
- 기록으로 실력을 쌓자
- Spring
- Today
- Total
피터의 개발이야기
[kubernetes] metricbeat kubernetes DNS lookup failure: no such host 해결방법, kubernetes DNS 접속 본문
[kubernetes] metricbeat kubernetes DNS lookup failure: no such host 해결방법, kubernetes DNS 접속
기록하는 백앤드개발자 2023. 2. 22. 03:47
ㅁ 들어가며
ㅇ 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/service/#dns
https://peterica.tistory.com/302