🤔 당황스러우면서도 누군가는 저처럼 겪게 될 일이라 대충 정리해서 공유합니다.
저희 회사는 퍼블릭 클라우드에 매니지드 K8S Cluster를 올려 두고 사용하고 있는데요,
K8S 환경에 올라간 서비스들을 도메인으로 접근합니다.
그런데 매번 DNS 레코드 추가 요청을 담당 부서에 요청할 수는 없기 때문에 (할 수는 있지만 서로 번거로움)
externalDNS 라는 오픈소스를 이용하여 저희 DNS와 연동, 레코드를 자동으로 생성/수정/삭제하도록 운영해 오고 있습니다.
(물론 기존 서비스 도메인에 영향을 주지 않도록, 정책과 구분자를 잘 부여하는 작업이 선행되어야겠죠)
서비스들을 잘 사용하고 있었는데, 뭘 테스트 한다고 서비스를 삭제했다가 거의 곧바로 서비스를 재생성할 일이 생겨서
삭제-재생성을 했는데 도메인으로 접속이 되지 않는 현상이 발견되었습니다.
그 이후 확인사항들은 요렇게 진행되었습니다.
(회사 서비스 운영에는 영향을 주지 않는 환경 및 서비스라 차분히 생각이 가능)
(1) 서비스에 문제가 있어서 healthcheck fail로 로드밸런싱이 되지 않은 것은 아닌지?
-> 🙅♀️ 🙅♀️ 🙅♀️ 서비스 상태는 정상이고 서비스 인그레스 상태도 정상
(2) DNS 연동이 깨져서 DNS 레코드 업데이트가 되지 않은 것은 아닌지?
-> 🙅♀️ 🙅♀️ 🙅♀️ DNS를 까볼 수 있는 권한이 없어 직접 보진 못했지만
로그상 해당 도메인에 대한 DNS record 삭제 및 생성은 정상적으로 이루어졌음
(3) 내가 접속중인 환경에 연결된 dns에 문제가..?
-> 갑자기 그럴리가 없고 삭제 직후 재생성되지 않은 리소스들의 경우 모두 정상적으로 동작함
1~3까지의 결론을 바탕으로, 우선 해당 서비스를 사용해야 하는 사람은 hosts를 수정하여 도메인으로 액세스 하였습니다.
(Ingress IP로 액세스하기 때문에 도메인이 아닌 IP로는 접근이 어려운 상황)
결론적으로 저희쪽에서 해야 할 부분에서는 이슈가 없다고 판단하여 DNS 담당자분께 도움 요청하여
DNS reload 후 다시 정상적으로 도메인 접근이 가능하였습니다.
요때 당시에는 일시적인 현상이겠거니 했는데, 이후 다시 삭제 & 재생성을 거친 서비스에서 똑같은 현상이 발생하였습니다.
동기화 룰과 관련된 이슈일까 하여 몇 시간 방치해 둬 봤는데도 동일했습니다.
이상한 점은, 이런 식으로 삭제 및 재생성을 거친 서비스가 여태 없었던 것도 아니고
많은 서비스들이 동일한 과정을 거쳤는데 지금 저희가 사용하고 있는 서비스들에 대해서만 발생을 하고 있었는데요 🤷♀️
이게 다 믿음이 부족해서였을까요?
--> max negative cache ttl (최대 부정 응답 TTL) 과 관련된 이슈였습니다.
DNS 캐싱은 긍정 응답에 대한 캐싱도 있지만 부정 응답에 대한 캐싱도 있는데요,
레코드를 삭제한 후 재생성이 되기 전 질의가 일어나게 되는 상황이라, 레코드 없음 이라는 리턴이 캐싱되게 되는데
이 캐싱되는 시간이 많이 길게 설정되어 있어서 발생한 이슈였습니다.
네트워크 트래픽을 줄이고 DNS 부하를 줄인다는 목적으로 사용하긴 하는데, 생각보다 많이 길게 되어 있었습니다 🥺
몇 시간이 아니라 업무일 단위로 방치했어야 복구되는... 🥺 🥺
아무튼 다시 리로드 하고 해당 값을 짧게 조정하여(물론 트래픽이 과도하게 발생할 정도는 X) 이슈가 해결되었습니다.
쿠버네티스 환경에서 DNS 연동해서 사용하시는 분들 중 비슷한 현상을 겪으시는 분들은
DNS 설정에서 요것도 같이 고려해 보시면 좋을 것 같습니다 😘
관련 내용이 더 궁금하신 분들은 아래 링크 참고해 보시기 바랍니다 👾
http://www.codns.com/b/B05-216
'DevOps' 카테고리의 다른 글
[Kubernetes] Node selector vs. Node affinity, 어떤 것을 사용할까? (1) | 2021.11.07 |
---|---|
Jenkins에서 API를 이용하여 특정 설정을 가진 Job 생성하기(젠킨스 API 잡 생성, config.xml 주입, Jenkins API 인증) (1) | 2021.10.05 |
ARP Protocol은 어떻게 맥 어드레스를 쿼리하고 수신할까? (1) | 2021.08.16 |
traceroute로 목적지까지 거치는 경로 확인하기 (0) | 2021.08.14 |
Jenkins 여러 잡에 동시에 파라미터 주입하기, 여러 프로젝트 설정 동시 변경(mass configuration update) (0) | 2021.07.11 |