[Project] Multi-Tenant K8s Cluster on ARM64 - (14) Network Flow

developowl·2026년 3월 13일
post-thumbnail

현재까지 구축한 멀티-테넌트 프로젝트의 네트워크 흐름에 대해 정리해보고 도식화 해보았습니다.

아키텍처

현재 구축한 멀티-테넌트 프로젝트의 아키텍처 입니다. Users(클라이언트)가 테넌트 서버로 네트워크 통신을 보냈을 때 네트워크의 흐름을 패킷의 목적지 정보와 함께 정리해보겠습니다.

전체 네트워크 흐름도

순차적 설명

  1. <Public IP>:<외부 포트> 주소를 가지고 가정용 모뎀에 접근
  2. 가정용 모뎀은 이를 <홈랩 내부 IP>:<로컬포트> 로 포트포워딩
  3. 직후 패킷이 들고 있는 목적지 정보는 <홈랩 내부 IP>:<로컬 포트>
  4. 홈랩(마스터 노드) 진입 즉시 iptables 규칙에 따라 <홈랩 내부 IP>:<nodePort> 에서 <파드 고유 IP>:<targetPort> 로 변환
  5. 직후 패킷이 들고 있는 목적지 정보는 <파드 고유 IP>:<targetPort>
  6. 정해진 길(iptables 명시)을 따라 워커노드에 도착+) CNI 라우팅(라우팅 테이블/터널/encap) + conntrack + iptables 체인이 협업
  7. 워커 노드 진입 이후 패킷이 들고 있는 목적지 정보는 <파드 고유 IP>:<targetPort>
  8. 워커 노드는 추가적인 서비스 선택/재-DNAT 없이 커널 경로(CNI/conntrack)를 거쳐 Pod로 직접 전달

2번 항목: 가정용 모뎀의 포트포워딩

  • 포트포워딩 설정을 하기 위해 접속한 네트워크 관리자 페이지 내의 포트포워딩 항목입니다.

마무리

지난번 포스팅에서는 아키텍처만 보았을 때 네트워크 흐름이 간단할 줄 알았습니다만,, 실제로 패킷이 어떠한 목적지 정보를 가지고 테넌트 서버(파드)로 도달하는지를 고민해보니 헷갈리는 점이 너무나 많았던 것 같습니다. 이론으로 네트워크의 흐름을 알게 되었으니, 조만간 아래의 명령어로 iptables 를 분석해보는 시간을 갖겠습니다.

sudo iptables -t nat -L -n | <포트 번호>
  • 핵심 정보
    • DNAT (Destination NAT) 기록
      • 패킷이 노드에 도착했을 때 원래 목적지(Node IP: 30100)를 진짜 목적지(Pod IP: 40100)로 바꾸는 명령줄을 확인
    • KUBE-SERVICES & KUBE-NODEPORTS 체인
      • 쿠버네티스가 관리하는 특별한 규칙들
        • KUBE-SERVICES: Cluster IP 로 들어오는 내부 트래픽을 처리하는 규칙들
        • KUBE-NODEPORTS: 외부에서 nodePort 로 들어오는 트래픽을 낚아채는 규칙들
    • Load Balancing 로직
      • 만약 파드가 여러 개라면, iptables 는 패킷을 어느 파드로 보낼지 결정함
      • statistic mode random probability 0.50000 같은 문구가 있다면, “패킷을 50% 확률로 이 파드에, 나머지 50%는 저 파드에 보내라” 라는 설정을 의미함
profile
Don’t get mad at the computer.

0개의 댓글