GKE에서 WireGuard 충돌 및 MTU 불일치 버그 탐색

러블의 인프라 팀이 Google Kubernetes Engine(GKE)에서 발생한 클러스터 전체 네트워킹 문제를 디버깅하여 간헐적인 연결 실패를 해결했습니다. AI 에이전트를 사용해 Clickhouse 로그를 스캔한 결과, anetd 파드(Google의 Cilium 구현)가 6일 동안 파드당 약 120번(거의 시간당 한 번) 충돌한 것을 발견했습니다. 크래시 덤프에서 WireGuard 자체가 아닌 Google의 WireGuard 통합 코드에서 동시 맵 접근 패닉이 발생한 것으로 나타났습니다.
첫 번째 수정: 투명 암호화 비활성화
Google 지원팀에서 WireGuard 버그를 우회하기 위해 노드 간 암호화를 비활성화할 것을 권장했습니다. 팀이 변경 사항을 적용하고 모든 anetd 파드를 재시작했습니다. 충돌은 약 4시간 동안 멈췄지만, 사용자들이 Valkey(인메모리 데이터 저장소)에 대한 임의의 연결 실패를 보기 시작했습니다.
두 번째 버그: MTU 불일치
엔지니어 Erik이 tcpdump와 Wireshark로 패킷을 캡처했습니다. 결정적 증거는 "목적지 도달 불가 (단편화 필요)"였습니다. 원인은 다음과 같습니다:
- WireGuard가 활성화된 상태에서 클러스터 MTU는 1420바이트로 설정되었습니다(WireGuard의 80바이트 캡슐화 오버헤드 고려).
- WireGuard를 비활성화한 후, 구성은 표준 1500바이트로 되돌아갔어야 했지만 일부 노드가 재시작되지 않아 여전히 이전 1420 MTU를 사용했습니다.
- MTU가 일치하지 않는 노드를 통과하는 Valkey 연결이 간헐적으로 실패했습니다.
해결 방법
해결책: 모든 노드의 롤링 재시작을 통해 클러스터 전체에 일관된 MTU 구성을 적용했습니다. 이로 인해 단편화 오류가 제거되고 안정성이 복원되었습니다.
주요 시사점
- 첫 번째 버그는 Google의
anetd가 WireGuard를 통합한 부분에서 발생한 맵 접근의 동시성 버그로, GKE 구현에 특화된 문제입니다. - 암호화를 비활성화하면 패닉은 우회할 수 있지만, 전체 노드 롤아웃이 필요한 MTU 불일치가 발생합니다.
- AI 에이전트는 수백만 개의 로그 라인에서 anetd 충돌 패턴을 신속하게 파악하는 데 도움을 주었습니다.
📖 전체 소스 읽기: HN AI Agents
👀 See Also

클로드 코드 사용을 통한 실용적인 프롬프트 엔지니어링 교훈
프로젝트 매니저가 Claude Code 결과를 개선한 구체적인 기법을 공유합니다: 2단계 프롬프팅, 단일 목표 프롬프트, 그리고 매우 구체적인 역할 정의.

WSL2에서 로컬 모션 감지를 위한 USB 웹캠 접근
개발자가 Windows에서 WSL2로 USB 웹캠을 전달하기 위해 usbipd-win을 사용하는 방법을 공유하며, 클라우드 의존 없이 OpenCV를 사용한 로컬 모션 감지를 가능하게 합니다.

클로드로 API 엔드포인트 구축하기: 70개 이상의 엔드포인트 프로젝트에서 얻은 실용적인 프롬프트 엔지니어링 교훈
한 개발자가 Claude를 사용하여 코드의 약 80%를 작성하며 70개 이상의 LinkedIn 자동화 API 엔드포인트를 구축했습니다. 이 프로젝트는 행동 수행 에이전트(API 호출, 데이터 추출, 의사결정 트리 등을 실행하는 에이전트)를 위한 프롬프트 구성에 대한 구체적인 교훈을 보여주었는데, 자연어 지시보다는 명시적 제약 조건을 가진 계약서처럼 프롬프트를 다루는 것이 더 효과적임을 발견했습니다.

실용적인 OpenClaw 조언: 작게 시작하고 흔한 함정 피하기
한 개발자가 OpenClaw로 개인 건강 추적기를 만든 경험에서 얻은 교훈을 공유하며, 좁은 범위, 결정론적 워크플로우, 하나의 LLM 고수 등을 강조했습니다. 이 글은 ChatGPT와 Gemini를 비교한 구체적인 모델 관찰도 포함하고 있습니다.