AI Briefing

카카오, Kubernetes 네트워크 이슈 해결용 'network-node-manager' 오픈소스 공개

·2021.03.03 00:00

핵심 내용

conntrack 버그로 인한 연결 끊김 및 IPVS 모드 외부 IP 접근 문제를 iptables 규칙으로 우회한다.

1 / 7

자세히 보기

카카오 클라우드플랫폼팀이 Kubernetes 클러스터 노드의 네트워크 설정을 자동 관리하는 network-node-manager를 공개했다. 이 도구는 DaemonSet 형태로 배포되어 Host Network Namespace에서 권한을 가지고 동작하며, Service Object의 변경을 감시해 노드의 iptables 규칙을 동적으로 업데이트한다.

주요 해결 이슈

1. 클러스터 외부 통신 시 Connection Reset 문제 Overlay Network 환경에서 Pod가 외부 서버와 통신할 때, 응답 패킷의 순서가 뒤섞이면 Linux conntrack의 버그로 인해 패킷이 INVALID로 분류될 수 있다. 이때 DNAT가 수행되지 않아 노드가 해당 패킷을 수신하고 Connection Reset(RST)을 전송하게 되며, 이는 결국 Pod 내부의 "connection reset by peer" 오류로 이어진다. network-node-manager는 INVALID 상태의 패킷을 노드에서 DROP하는 iptables Filter Rule을 설정하여 이 문제를 우회한다. TCP 재전송 메커니즘이 데이터 유실을 보완하므로 통신에는 지장이 없다.

2. IPVS 모드에서의 External-IP 접근 문제 kube-proxy가 IPVS 모드를 사용할 때, ExternalTrafficPolicy: Local이 설정된 LoadBalancer Service의 경우 문제가 발생한다. Service Pod가 존재하지 않는 노드에서는 외부 트래픽을 Drop하도록 IPVS 규칙이 설정되는데, 이로 인해 해당 노드에 있는 Client Pod도 External-IP로 접근할 수 없게 된다. network-node-manager는 Client Pod가 External-IP로 전송한 패킷을 Cluster-IP로 DNAT 변환하는 규칙을 추가하여, IPVS의 Cluster-IP 라우팅을 통해 정상적으로 Service Pod에 도달하도록 해결한다.

배포 및 지원 범위

이 도구는 iptables와 IPVS 두 가지 kube-proxy 모드 모두를 지원하며, IPv6 Service도 처리할 수 있다. 배포 시 클러스터의 Pod Network CIDR(IPv4/IPv6)와 kube-proxy 모드 정보를 환경 변수로 지정해야 한다. 현재는 Service Object만 감시하며, CNI 플러그인에 종속되지 않는 추가적인 네트워크 이슈 해결 기능을 향후 업데이트할 계획이다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.