networking

7 개의 포스트

'Silent drop' 해결: (새 탭에서 열림)

Cloudflare는 Cloudflare One Client에 '동적 경로 MTU 발견(Dynamic Path MTU Discovery, PMTUD)' 기술을 도입하여, 네트워크 경로상에서 패킷 크기 제한으로 인해 연결이 끊기는 'PMTUD 블랙홀' 문제를 해결했습니다. 기존의 수동적인 방식 대신 MASQUE 프로토콜을 활용한 능동적 탐색 방식을 채택함으로써, 사용자는 LTE/5G나 위성 네트워크와 같은 제한적인 환경에서도 패킷 손실 없이 안정적인 연결을 유지할 수 있습니다. 이 기술은 현대적인 보안 암호화로 인해 커진 패킷을 네트워크 환경에 맞춰 실시간으로 최적화하여 하이브리드 작업자와 긴급 구조대원 등의 연결성을 획기적으로 개선합니다. **현대적 보안과 레거시 인프라의 충돌** - 표준 이더넷의 최대 전송 단위(MTU)는 보통 1500바이트이지만, 현대적인 보안 요구사항(FIPS 140-2 준수 등)으로 인해 패킷 내 암호화 및 메타데이터 오버헤드가 증가하고 있습니다. - LTE/5G, 위성 링크, 공공 안전 네트워크 등 일부 환경은 MTU 제한이 1500바이트 미만인 경우가 많아, 보안 패킷이 해당 라우터를 통과하지 못하는 상황이 발생합니다. - 원래는 라우터가 ICMP 메시지를 통해 패킷이 너무 크다는 사실을 알려야 하지만, 방화벽이나 중간 장비(middlebox)가 이 메시지를 차단하면 보낸 쪽에서 이유도 모른 채 데이터가 사라지는 '블랙홀' 현상이 발생하여 연결이 끊어집니다. **능동적 프로빙을 통한 PMTUD 구현** - Cloudflare는 RFC 8899 표준을 기반으로 한 능동적 경로 MTU 발견 방식을 구현하여 레거시 ICMP 피드백에 대한 의존도를 없앴습니다. - Cloudflare의 오픈 소스 QUIC 라이브러리로 구축된 MASQUE 프로토콜을 활용해, 클라이언트가 Cloudflare 에지 서버로 다양한 크기의 암호화된 프로브(Probe) 패킷을 직접 보냅니다. - 지원되는 MTU 범위의 상한선부터 중간값까지 테스트하며 에지 서버의 응답 여부를 확인하고, 해당 경로에 정확히 맞는 MTU 크기를 찾아냅니다. - 사용자가 Wi-Fi(MTU 1500)에서 셀룰러(MTU 1300) 환경으로 이동하더라도, 클라이언트가 실시간으로 가상 인터페이스의 MTU를 조정하여 세션 중단 없이 연결을 유지합니다. **실제 환경에서의 연결 안정성 강화** - 차량용 라우터를 사용하는 긴급 구조대원의 경우, 복잡한 NAT 트래버스나 우선순위 라우팅 층을 거치며 MTU가 급격히 줄어들 때 발생하던 CAD(컴퓨터 지원 파견) 시스템의 연결 끊김 현상을 방지합니다. - 해외 호텔이나 공공 네트워크를 사용하는 하이브리드 작업자는 이중 NAT나 노후화된 중간 장비가 있는 환경에서도 화상 회의나 파일 전송이 끊기지 않는 최적화된 경로를 수 초 내에 확보할 수 있습니다. - 이 기술은 애플리케이션 계층에서 하위 네트워크의 불안정성을 느끼지 못하도록 '스티키(Sticky)'한 연결 상태를 제공합니다. 현재 Windows, macOS, Linux 환경에서 MASQUE 프로토콜을 사용하는 Cloudflare One Client 사용자라면 누구나 이 기능을 무료로 이용할 수 있습니다. 네트워크 변동성이 큰 환경에서 업무를 수행하는 팀이라면 MASQUE 프로토콜 활성화를 통해 패킷 드롭 없는 안정적인 연결을 경험해 보기를 권장합니다.

2026년 (새 탭에서 열림)

2026년 2월 20일, Cloudflare는 사용자 지정 IP(BYOIP) 서비스 관리 방식의 변경 과정에서 발생한 소프트웨어 오류로 인해 약 6시간 동안 서비스 장애를 겪었습니다. 이번 장애는 내부 자동화 시스템이 유효한 IP 접두사(Prefix)들을 실수로 인터넷 경로(BGP)에서 철회하면서 발생했으며, 이로 인해 일부 고객 서비스와 Cloudflare의 1.1.1.1 웹사이트 접속이 불가능해졌습니다. Cloudflare는 즉각적인 롤백과 수동 복구 작업을 통해 문제를 해결했으며, 향후 자동화 배포의 안전성을 강화하기 위한 체계적인 개선을 약속했습니다. ### Addressing API와 자동화 프로세스의 결함 * **Addressing API의 역할**: Cloudflare 네트워크에 존재하는 주소 데이터의 단일 진실 공급원(Source of Truth)으로, 여기서 발생한 변경 사항은 즉시 전 세계 에지(Edge) 네트워크로 전파됩니다. * **위험한 수동 작업의 자동화**: 기존에 수동으로 이루어지던 BYOIP 접두사 삭제 작업을 자동화하기 위해 '정기 정리 하위 태스크'를 도입했습니다. 이는 배포 규모를 작게 유지하고 안전성을 높이려는 'Code Orange: Fail Small' 프로젝트의 일환이었습니다. * **API 쿼리 버그**: 정리 태스크가 API를 호출할 때 `pending_delete` 매개변수를 처리하는 로직에 버그가 있었습니다. 삭제 대기 중인 객체만 불러와야 했으나, 코드상에서 매개변수의 존재 여부만 체크하는 오류로 인해 정상적인 접두사들까지 삭제 대상에 포함되는 결과를 초래했습니다. ### 고객 서비스 영향 및 BGP 경로 탐색 현상 * **IP 접두사 철회**: 전체 BYOIP 접두사 중 약 25%에 해당하는 1,100개의 접두사가 인터넷 광고에서 제외되었습니다. 이로 인해 해당 IP를 사용하는 서비스는 외부에서 접근할 수 없는 상태가 되었습니다. * **BGP 경로 탐색(Path Hunting)**: 접두사가 철회되자 사용자 연결은 목적지를 찾기 위해 여러 네트워크를 헤매는 '경로 탐색' 현상을 겪었으며, 결국 연결 타임아웃과 실패로 이어졌습니다. * **특정 서비스 오류**: Cloudflare의 재귀 DNS 리졸버 웹사이트(1.1.1.1) 접속 시 403 오류("Edge IP Restricted")가 발생했습니다. 다만, 실제 DNS 질의 서비스와 DoH(DNS over HTTPS)는 이번 장애의 영향을 받지 않았습니다. ### 복구 과정에서의 기술적 난관 * **단계적 복구**: 엔지니어들이 변경 사항을 감지하고 롤백을 시작하면서 약 800개의 접두사가 먼저 복구되었습니다. 일부 고객은 대시보드를 통해 직접 IP를 재광고함으로써 자가 복구를 수행하기도 했습니다. * **소프트웨어 버그로 인한 지연**: 나머지 300여 개의 접두사는 단순한 경로 철회를 넘어 에지 서버에서 서비스 구성 정보 자체가 삭제되는 추가적인 소프트웨어 버그가 발생했습니다. 이로 인해 대시보드 설정만으로는 복구가 불가능했습니다. * **수동 상태 전파**: 엔지니어들은 삭제된 설정 상태를 에지 서버에 다시 강제로 전파하는 수동 작업을 수행해야 했으며, 장애 발생 6시간 7분 만인 23:03 UTC에 모든 서비스가 정상화되었습니다. Cloudflare는 이번 사고를 계기로 모든 주소 관리 워크플로우에서 수동 개입을 완전히 배제하고, 자동화된 헬스 체크 기능을 강화할 계획입니다. BYOIP를 사용하는 기업 고객은 유사한 장애 발생 시 Cloudflare 대시보드를 통해 IP 광고 상태를 직접 제어함으로써 복구 시간을 단축할 수 있는 운영 매뉴얼을 숙지해 두는 것이 권장됩니다.

2026년 1월 (새 탭에서 열림)

2026년 1월 22일, Cloudflare 마이애미 데이터 센터에서 자동화된 라우팅 정책 설정 오류로 인해 약 25분간 IPv6 BGP 경로 유출(Route Leak) 사고가 발생했습니다. 특정 접두사 목록(Prefix-list)을 제거하는 과정에서 정책 필터가 의도치 않게 모든 내부 경로를 허용하게 되었고, 이로 인해 전 세계 IPv6 트래픽이 마이애미로 잘못 유도되어 네트워크 혼잡과 서비스 지연이 초래되었습니다. 이 사고는 자동화 코드가 생성한 구성 파일의 논리적 허점으로 인해 발생했으며, 운영진의 수동 복구와 자동화 일시 중지를 통해 해결되었습니다. ### BGP 경로 유출의 메커니즘과 영향 * **경로 유출의 정의**: 네트워크(Autonomous System, AS)가 원래 전달해서는 안 될 트래픽을 자신에게 보내도록 인터넷 경로 정보를 잘못 광고하는 현상을 의미합니다. * **위반 사항**: 이번 사고는 RFC 7908에 정의된 유형 3 및 유형 4 유출의 혼합 형태로, 피어(Peer)나 상위 제공자(Provider)로부터 받은 경로를 다시 다른 피어나 제공자에게 재분배함으로써 '계곡 없는 라우팅(Valley-free routing)' 원칙을 위반했습니다. * **네트워크 충격**: 마이애미 데이터 센터의 백본 인프라에 트래픽이 집중되면서 혼잡이 발생했고, Cloudflare 서비스뿐만 아니라 외부 네트워크의 트래픽도 마이애미로 유입되었다가 방화벽 필터에 의해 차단되거나 높은 지연 시간을 겪었습니다. ### 설정 오류의 기술적 원인: 과도하게 허용된 정책 * **변경 목적**: 보고타(Bogotá) 데이터 센터로 향하던 IPv6 트래픽을 마이애미를 거치지 않게 하기 위해, 정책 자동화 플랫폼을 통해 기존의 특정 접두사 목록(`6-BOG04-SITE-LOCAL`)을 제거하려고 했습니다. * **JunOS 동작 특성**: JunOS 및 JunOS EVO 운영체제에서 `from route-type internal` 조건은 모든 내부 BGP(iBGP) 경로와 일치합니다. * **논리적 결함**: 특정 접두사 필터가 삭제되자, 해당 정책 구문은 "모든 내부 경로를 수락하고 외부로 광고하라"는 광범위한 규칙으로 변질되었습니다. 이로 인해 마이애미 라우터는 수천 개의 내부 경로를 Telia, Cogent, GTT와 같은 외부 피어와 제공자에게 대량으로 전송하게 되었습니다. ### 사고 대응 타임라인 * **20:25 UTC**: 마이애미 에지 라우터에서 자동화 도구가 실행되어 잘못된 설정이 적용되었고, 즉시 경로 유출과 서비스 영향이 시작되었습니다. * **20:40 UTC**: 네트워크 팀이 의도치 않은 경로 광고를 감지하고 조사를 시작했으며, 4분 뒤 공식적인 장애 대응 프로세스가 가동되었습니다. * **20:50 UTC**: 네트워크 운영자가 문제가 된 설정을 수동으로 되돌리고 해당 라우터의 자동화를 일시 중지함으로써 경로 유출 상황이 종료되었습니다. * **22:40 UTC**: 자동화 코드 저장소의 버그를 수정한 후, 마이애미 라우터의 자동화 기능을 다시 활성화하여 정상 상태로 복구했습니다. ### 기술적 교훈 및 추천 사항 * **정책 검증 강화**: 라우팅 정책을 자동 생성할 때, 특정 필터(Prefix-list 등)가 제거된 결과가 '기본 허용(Default Accept)' 상태가 되지 않도록 방어적인 로직을 설계해야 합니다. * **운영체제 특성 이해**: JunOS의 `route-type internal`과 같이 벤더별로 상이하게 동작할 수 있는 매칭 조건을 사용할 때는 예상치 못한 경로 광고를 막기 위한 추가적인 안전장치(Safety-net)를 마련해야 합니다. * **단계적 배포**: 대규모 인프라 변경 시 자동화 도구가 전체 라우터에 동시에 적용되지 않도록 카나리(Canary) 배포나 단계적 적용을 통해 영향 범위를 최소화하는 것이 권장됩니다.

CNAME이 먼저인가 A 레 (새 탭에서 열림)

Cloudflare의 DNS 서비스인 1.1.1.1은 메모리 사용량을 최적화하기 위해 DNS 응답 내 레코드 순서를 변경했다가 전 세계적인 접속 장애를 일으켰습니다. 대다수 현대 소프트웨어는 DNS 레코드 순서를 무시하지만, glibc와 같은 특정 구현체는 CNAME 레코드가 A 레코드보다 먼저 등장할 것을 전제로 작동하기 때문입니다. 결국 Cloudflare는 이전의 순서로 로직을 롤백하여 문제를 해결했습니다. ### CNAME 체인과 부분 캐싱 메커니즘 * **DNS 별칭 추적:** `www.example.com`을 조회할 때 리졸버는 최종 IP 주소에 도달할 때까지 여러 개의 CNAME(별칭)을 따라가며, 이 과정에서 발생하는 모든 중간 레코드를 캐싱합니다. * **부분 만료 처리:** 체인 내 레코드들은 각기 다른 TTL(유효 기간)을 가집니다. 일부 CNAME은 유효하지만 최종 A 레코드가 만료된 경우, 리졸버는 전체 체인을 다시 조회하는 대신 만료된 부분만 갱신하여 기존 캐시와 병합합니다. * **병합 과정의 중요성:** 갱신된 레코드와 기존 캐시 레코드를 하나의 응답으로 합칠 때, 이들의 배열 순서가 클라이언트의 해석 방식에 영향을 미칩니다. ### 성능 최적화를 위한 로직 변경 * **기존 방식 (CNAME 우선):** 새로운 리스트를 생성하여 캐시된 CNAME들을 먼저 넣고, 그 뒤에 새로 조회된 A 레코드를 추가했습니다. 이는 메모리 할당과 복사 비용이 추가로 발생합니다. * **변경 방식 (A 레코드 우선):** 메모리 사용량을 줄이기 위해 기존의 응답 리스트 끝에 CNAME 레코드를 단순히 덧붙이는(append) 방식으로 변경했습니다. * **결과:** 이 사소한 변경으로 인해 DNS 응답 데이터에서 CNAME이 최종 결과값인 A 레코드보다 뒤에 위치하게 되었습니다. ### glibc 등 DNS 클라이언트의 처리 방식 문제 * **순차적 탐색:** 리눅스에서 널리 사용되는 `glibc`의 `getaddrinfo`와 같은 구현체는 DNS 응답을 순차적으로 읽으며 '찾아야 할 이름'을 업데이트합니다. * **인식 실패:** 클라이언트가 CNAME을 먼저 발견하면 "다음 타겟 이름"을 갱신하고 이후에 나오는 A 레코드를 수락합니다. 하지만 A 레코드가 먼저 나오면 아직 CNAME 정보를 모르기 때문에 해당 레코드를 무관한 데이터로 간주하고 무시합니다. * **결과적 오류:** 모든 데이터를 읽었음에도 불구하고 클라이언트는 매칭되는 IP를 찾지 못해 최종적으로 응답이 비어 있다는 결론을 내리게 됩니다. ### 시사점 및 결론 40년 된 DNS 프로토콜의 모호성으로 인해 레코드 순서에 대한 엄격한 정의가 부족할 수 있지만, 실제 환경에서는 전통적인 순서(CNAME -> Answer)를 유지하는 것이 하위 호환성을 위해 필수적입니다. 시스템의 성능 최적화가 기존 생태계의 암묵적인 동작 원리를 깨뜨리지 않는지, 특히 표준 라이브러리 수준의 하위 호환성을 철저히 검증해야 함을 보여주는 사례입니다.

런타임 보안을 위한 eBPF 강화: Datadog Workload Protection의 교훈 (새 탭에서 열림)

Datadog은 지난 5년간 수천 개의 환경에서 eBPF 기반의 런타임 보안 제품인 'Workload Protection'을 운영하며 얻은 실전 경험과 교훈을 공유합니다. eBPF는 기존 커널 모듈이나 감사(Audit) 프레임워크보다 안전하고 효율적이지만, 대규모 운영 환경에서는 커널 호환성이나 성능 오버헤드 같은 복잡한 문제들이 발생합니다. 결론적으로 eBPF는 강력한 도구이나, 실제 운영 환경에서 신뢰성을 확보하기 위해서는 단순한 구현을 넘어 정교한 모니터링과 배포 전략이 필수적입니다. **기존 커널 모니터링 기술의 한계와 평가** * **커널 모듈(LKM):** 시스템의 거의 모든 부분을 제어할 수 있는 강력한 권한을 가지지만, 코드 오류가 커널 전체의 크래시로 이어질 수 있어 안정성 측면에서 위험부담이 큽니다. * **전통적인 트레이싱 인터페이스:** inotify, fanotify, kprobes 등은 시스템 내부를 들여다볼 수 있게 해주지만, 전체적인 시스템 활동을 파악하려면 여러 도구를 복잡하게 조합해야 하는 파편화 문제가 있습니다. * **ptrace 및 seccomp-bpf:** 사용자 공간의 프로세스를 추적하는 데 유용하지만, 모든 프로세스 액세스를 감시하기에는 성능 오버헤드가 발생하며 커널 수준의 가시성이 부족합니다. * **Linux Audit 프레임워크:** 가장 널리 사용되는 보안 솔루션이지만, 대량의 이벤트가 발생할 때 시스템 성능에 상당한 영향을 미치는 단점이 있습니다. **보안 제품에 eBPF를 선택한 핵심 이유** * **검증된 안전성:** eBPF 프로그램은 로드되기 전 커널 검증기(Verifier)를 통해 무한 루프나 잘못된 메모리 접근 여부를 정적으로 분석하므로 커널 모듈보다 훨씬 안전합니다. * **통합 가시성:** 프로세스 실행, 파일 시스템 접근, 네트워크 활동 등을 단일 메커니즘으로 모두 추적할 수 있어 시스템 전반에 대한 통합적인 가시성을 제공합니다. * **컨테이너 최적화:** 네임스페이스(Namespace)와 cgroup에 대한 이해도가 높아 컨테이너 환경에서 일관된 모니터링이 가능하며, 특히 CO-RE(Compile Once – Run Everywhere) 도입으로 배포가 쉬워졌습니다. * **강력한 제어 권한:** BPF LSM 기능을 통해 단순한 모니터링을 넘어 시스템 호출을 차단하는 등의 강제 접근 제어(Mandatory Access Control)를 수행할 수 있습니다. **대규모 생산 환경에서의 운영 교훈** * **커널 호환성 유지:** 특정 커널 버전에서는 작동하지만 다른 버전에서는 실패하는 경우를 방지하기 위해 프로그램 로드 및 부착(Attach) 과정을 정교하게 관리해야 합니다. * **성능 비용 관리:** eBPF가 효율적이긴 하지만, 수많은 훅(Hook)이 동시에 실행될 때 발생하는 성능 비용을 지속적으로 측정하고 제어하는 메커니즘이 필요합니다. * **풍부한 데이터 처리:** 캡처된 원시 데이터를 단순히 전달하는 것이 아니라, 보안 분석에 유용하도록 문맥(Context)을 보강하고 정확하게 강화하는 로직이 중요합니다. * **안전한 변경 배포:** 수천 대의 호스트에 영향을 줄 수 있으므로, eBPF 프로그램의 변경 사항을 안전하게 롤아웃하고 문제 발생 시 즉시 감지할 수 있는 시스템을 갖춰야 합니다. **실용적인 제언** eBPF를 도입할 때 "안전하고 성능 저하가 없다"는 마케팅적 수사에만 의존해서는 안 됩니다. 모니터링하려는 워크로드의 특성에 따라 성능 임팩트가 달라질 수 있으므로, 자체적인 성능 모니터링 지표를 구축하고 커널 버전별로 철저한 회귀 테스트를 거치는 것을 추천합니다.

엔지니어링 스포트라이트: 테이 니시무라 (새 탭에서 열림)

데이터독(Datadog)의 인프라 엔지니어 테이 니시무라(Tay Nishimura)의 커리어 여정은 자신만의 사고방식에 적합한 직무를 찾는 과정의 중요성을 보여줍니다. 수학 전공자이자 시각적 사고를 선호하는 그녀는 일반적인 소프트웨어 개발 속도 경쟁에서 어려움을 겪었으나, 네트워크 시뮬레이터 'ToyNet' 개발을 통해 자신의 강점을 증명하며 SRE(Site Reliability Engineering)로 성공적으로 전향했습니다. 이 글은 전형적인 엔지니어의 틀에 갇히지 않고 자신의 고유한 특성을 기술적 자산으로 승화시킨 과정을 다룹니다. **학계와 실무 사이의 괴리와 시각적 사고** * 수학 전공자로서 증명 위주의 엄격한 사고에 익숙했던 테이는 효율과 속도를 중시하는 애자일 개발 환경에서 초기에 성능 피드백 문제로 어려움을 겪었습니다. * 코드를 바로 작성하기보다 코드를 그림으로 변환하여 논리를 검증한 뒤 다시 코드로 옮기는 '시각적 사고' 방식을 고수했는데, 이는 신중함을 더해주었지만 작업 속도를 늦추는 요인이 되기도 했습니다. * 일반적인 개발 직무에서는 속도 저하로 평가받았던 그녀의 신중함과 모든 실패 모드를 고려하는 태도가, 오히려 시스템의 안정성을 책임지는 SRE 직무에는 핵심적인 역량이 될 수 있음을 깨달았습니다. **ToyNet 개발과 SRE로의 전환** * 팬데믹 기간 중 해고를 겪었으나 이를 계기 삼아 평소 관심 있던 네트워크 기술을 공부하며, 수감자와 베테랑을 위한 교육 프로그램 'Project Reclass'를 시작했습니다. * 인터넷 사용이 제한된 교도소 환경에서도 네트워크 실습이 가능하도록 React, Flask, Mininet을 활용해 컨테이너 기반 네트워크 에뮬레이션 플랫폼인 'ToyNet'을 설계했습니다. * ToyNet은 테이의 클라우드 배포 역량과 기술적 깊이를 증명하는 강력한 포트폴리오가 되었으며, 이는 데이터독에 SRE로 합류하는 결정적인 발판이 되었습니다. **데이터독에서의 적응과 시각적 분석의 힘** * 데이터독 합류 후 Kubernetes, 카오스 엔지니어링, Go 언어 등 생소한 기술 스택을 빠르게 습득하며 인프라 엔지니어로서 전문성을 쌓았습니다. * 데이터독의 카오스 자동화 도구인 'Chaos Controller'를 오픈소스화하는 과정에서, 복잡한 코드베이스를 상자와 화살표로 시각화하여 구조를 파악하는 자신만의 분석 방식을 적극적으로 활용했습니다. * 과거에는 약점으로 치부되었던 '꼼꼼하고 신중한 속도'가 이제는 대규모 시스템의 신뢰성을 보장하고 복잡한 기술 문제를 해결하는 강력한 무기가 되었습니다. 자신이 업계의 전형적인 틀(Cookie-cutter shape)에 맞지 않는다고 느낄 때, 포기하기보다는 자신의 독특한 사고방식이 빛을 발할 수 있는 세부 분야를 찾는 것이 중요합니다. 테이 니시무라의 사례처럼 사이드 프로젝트를 통해 실질적인 기술력을 증명하고 이를 직무 전환의 교두보로 활용하는 전략은 커리어 고민을 겪는 엔지니어들에게 실질적인 영감을 줍니다.

It's always DNS . . . except when it's not: A deep dive through gRPC, Kubernetes, and AWS networking (새 탭에서 열림)

데이터독(Datadog)의 엔지니어들이 서비스 업데이트 중 발생한 원인 불명의 DNS 에러를 추적하며, 쿠버네티스 네트워킹과 AWS VPC 환경의 복잡한 상호작용을 해결해 나가는 과정을 다룬 글입니다. 로그상으로는 단순한 DNS 문제처럼 보였으나, 실제 원인은 AWS VPC의 연결 추적(conntrack) 한계와 하위 네트워크 레이어의 패킷 드랍에 있었습니다. 이 글은 고도화된 인프라 환경에서 단순히 리소스를 증설하는 것보다 커널 수준의 메트릭과 VPC 플로우 로그를 통한 심층 분석이 왜 중요한지를 잘 보여줍니다. **DNS 오류의 표면적 원인과 NodeLocal DNSCache** * 서비스 배포 시마다 DNS 에러가 발생하여 쿼리 지연과 모니터링 성능 저하가 나타났습니다. * 쿠버네티스의 `node-local-dns`가 메모리 부족(OOM) 및 최대 동시 요청 수(`max_concurrent`) 제한인 1,000개에 도달하여 요청을 거부하는 현상이 발견되었습니다. * 하지만 실제 초당 쿼리 수(QPS)는 예상 용량보다 훨씬 낮았으며, 이는 상위 DNS 리졸버와의 TCP 연결 실패로 인해 타임아웃이 발생하면서 동시 요청 슬롯이 빠르게 점유되었기 때문임이 밝혀졌습니다. **AWS VPC 연결 추적(conntrack)과 패킷 드랍** * 네트워크 성능을 정밀하게 확인하기 위해 AWS ENA(Elastic Network Adapter) 메트릭을 분석한 결과, `conntrack_allowance_exceeded` 수치가 급증한 것을 확인했습니다. * VPC 수준의 연결 추적 테이블(Hypervisor 레벨)이 포화 상태에 도달하면 보안 그룹 등의 상태 저장을 위한 연결 생성이 불가능해져 패킷이 드랍됩니다. * 특이하게도 인스턴스 내부의 리눅스 conntrack 엔트리는 6만 개 미만으로 안정적이었으나, VPC 레벨의 conntrack은 이미 한계에 도달하여 두 레이어 간의 가시성 차이가 존재함을 발견했습니다. **VPC 플로우 로그를 통한 심층 분석** * 인스턴스 유형을 상위 모델로 변경하여 임시적으로 문제를 해결할 수 있었으나, 근본 원인 파악을 위해 VPC 플로우 로그 분석을 병행했습니다. * Cilium, 쿠버네티스, AWS 네트워킹이 결합된 환경에서는 역경로 필터링(Reverse Path Filtering)이 정상적인 패킷을 'Martian packet'(출처가 불분명한 패킷)으로 오인하여 드랍하는 등 복잡한 문제가 발생할 수 있음을 시사했습니다. * DNS 전파 시간과 네트워크 마이크로버스트(Traffic Spikes) 역시 이러한 연결 추적 테이블 포화에 기여하는 핵심 요소임을 확인했습니다. **실용적인 결론** 단순히 로그에 나타나는 "DNS 에러"에만 집중하기보다, AWS ENA 메트릭의 `conntrack_allowance_exceeded`나 VPC 플로우 로그와 같은 하위 레이어의 지표를 함께 모니터링해야 합니다. 특히 대규모 쿠버네티스 클러스터를 운영한다면, 인스턴스 크기에 따른 VPC 수준의 conntrack 제한 수치를 미리 파악하고 적절한 인프라 사이징과 네트워크 정책 설정을 검토해야 합니다.