쿠버네티스 네트워킹(CNI, Service, Pod-to-Pod 통신, NAT, 라우팅)을 제대로 이해하려면 “리눅스에서 패킷이 어떻게 움직이는지”를 먼저 잡고 가는 게 가장 빠릅니다.
이 글에서는 OSI 같은 이론을 길게 하지 않고, 시스템 관리자/개발자 관점에서 실제로 무엇을 확인하고 어떻게 설정하는지 중심으로 정리합니다.
1) 네트워크는 “서로 도달할 수 있게 만든 연결”이다
클라우드든 온프레미스든, 컴퓨터 A와 B가 통신하려면 최소한 다음이 필요합니다.
- 네트워크 인터페이스(물리/가상 NIC)
- 같은 네트워크(서브넷)에 있음을 나타내는 IP
- 같은 네트워크 안에서의 전달 장치(스위치)
- 다른 네트워크로 넘어가려면 라우터 + 라우팅 테이블(게이트웨이)
2) 스위치: “같은 네트워크(서브넷) 내 통신”을 가능하게 하는 장치
예를 들어 네트워크가 192.168.1.0/24라고 가정합니다.
- A:
192.168.1.10/24 - B:
192.168.1.11/24
이 둘이 같은 스위치(혹은 같은 L2 네트워크)에 연결돼 있고, IP가 올바르게 설정되어 있다면 A ↔ B는 통신 가능합니다.
2.1 리눅스에서 인터페이스 확인: ip link
ip link
# 또는
ip link show eth0
2.2 IP 확인/설정: ip addr, ip addr add
ip addr
ip addr show eth0
# 임시로 IP 부여(재부팅 시 사라짐)
sudo ip addr add 192.168.1.11/24 dev eth0
sudo ip link set eth0 up
ip addr add로 한 설정은 보통 “임시”입니다. 영구 설정은 배포판별 네트워크 설정 파일(Netplan, ifcfg, NetworkManager 등)에서 합니다.
3) 라우터: “서로 다른 네트워크”를 연결하는 장치
이제 네트워크가 두 개 있다고 합시다.
- 네트워크1:
192.168.1.0/24(A, B) - 네트워크2:
192.168.2.0/24(C, D)
예:
- B:
192.168.1.11/24 - C:
192.168.2.11/24
B가 C에 어떻게 가죠?
서브넷이 다르면 스위치만으로는 못 갑니다.
이때 “두 네트워크를 다리처럼 연결하는” 라우터가 필요합니다.
라우터는 두 네트워크에 각각 인터페이스를 가지고 IP를 가집니다.
- 라우터(R):
- 네트워크1 쪽 IP:
192.168.1.1 - 네트워크2 쪽 IP:
192.168.2.1
- 네트워크1 쪽 IP:
4) 게이트웨이(Gateway): “밖으로 나가는 문”을 라우팅 테이블에 등록하는 것
네트워크를 방이라고 하면, 게이트웨이는 다른 방(다른 네트워크/인터넷)으로 나가는 문입니다.
시스템이 그 문을 통해 나가려면 “문이 어디인지” 알아야 하는데, 그게 라우팅 테이블입니다.
4.1 라우팅 테이블 확인: ip route (또는 route)
ip route
# 또는 구식
route -n
예를 들어 B가 192.168.2.0/24로 가는 길을 라우터 192.168.1.1로 지정하려면:
sudo ip route add 192.168.2.0/24 via 192.168.1.1
그러면 B는 “192.168.2.x로 가는 패킷은 192.168.1.1(라우터)로 보내라”를 알게 됩니다.
중요한 포인트: 한쪽(B)만 설정하면 끝이 아닙니다.
C도 다시 B 네트워크로 돌아가는 길을 알아야 왕복 통신이 됩니다.
C에도 반대 방향 라우팅이 필요합니다.
sudo ip route add 192.168.1.0/24 via 192.168.2.1
5) 기본 게이트웨이(Default Gateway): “모르는 목적지는 전부 여기로”
인터넷(수많은 네트워크)을 일일이 라우팅 테이블에 등록하는 건 불가능합니다. 그래서 기본 경로(default route) 를 둡니다.
기본 경로는 다음과 같은 의미입니다.
- “내가 아는 경로(더 구체적인 라우트)가 없으면 전부 이 게이트웨이로 보내라”
표현은 보통 둘 다 같은 뜻입니다.
default0.0.0.0/0
설정 예:
sudo ip route add default via 192.168.1.1
# 또는
sudo ip route add 0.0.0.0/0 via 192.168.1.1
라우팅 테이블에서 gateway가 0.0.0.0로 보이는 엔트리는 보통 이런 의미로 해석합니다.
- “이 목적지는 게이트웨이가 필요 없다(직접 연결된 네트워크다)”
예: 192.168.2.0/24 dev eth0 scope link 같은 형태
6) 리눅스 호스트를 “라우터”로 만들기: 핵심은 IP 포워딩
강의에서 가장 중요한 실습 포인트 중 하나가 이 부분입니다.
6.1 토폴로지 예시
(A) 192.168.1.5/24 ---- eth0 (B) 192.168.1.6/24
eth1 (B) 192.168.2.6/24 ---- (C) 192.168.2.5/24
- B는 NIC가 2개(eth0, eth1)라서 양쪽 네트워크에 다 물려 있음
- A가 C로 통신하려면 A는 “192.168.2.0/24는 B를 통해 가라”를 알아야 함
- C도 “192.168.1.0/24는 B를 통해 가라”를 알아야 함
A에서:
sudo ip route add 192.168.2.0/24 via 192.168.1.6
C에서:
sudo ip route add 192.168.1.0/24 via 192.168.2.6
여기까지 하면 흔히 이런 상황이 나옵니다.
- 라우팅은 맞는 것 같은데 ping이 안 됨
- “Network is unreachable”는 사라졌는데 응답이 없음
이때 이유는:
리눅스는 기본적으로 “한 인터페이스로 들어온 패킷을 다른 인터페이스로 전달(포워딩)하지 않기” 때문
(보안상 기본값)
6.2 IP 포워딩 켜기: /proc/sys/net/ipv4/ip_forward
현재 값 확인:
cat /proc/sys/net/ipv4/ip_forward
# 0이면 포워딩 OFF
# 1이면 포워딩 ON
임시로 켜기:
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
또는 sysctl 사용:
sudo sysctl -w net.ipv4.ip_forward=1
이제 A ↔ C ping이 통과하는 걸 볼 수 있습니다.
재부팅 후에도 유지하려면(영구 설정)
배포판/환경에 따라 다르지만 대표적으로 아래 중 하나를 씁니다.
/etc/sysctl.conf 또는 /etc/sysctl.d/*.conf에 추가:
net.ipv4.ip_forward = 1
적용:
sudo sysctl --system
7) 앞으로 자주 쓰게 될 핵심 명령어 요약
인터페이스/링크
ip link
ip link set eth0 up
IP 주소 확인/추가
ip addr
sudo ip addr add 192.168.1.11/24 dev eth0
라우팅 테이블 확인/추가
ip route
sudo ip route add 192.168.2.0/24 via 192.168.1.1
sudo ip route add default via 192.168.1.1
IP 포워딩 확인/설정
cat /proc/sys/net/ipv4/ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
8) 쿠버네티스 관점에서 왜 이게 중요하나?
이 내용이 쿠버네티스에서 바로 연결되는 지점들:
- Pod 네트워크는 결국 노드의 라우팅/포워딩 위에서 구성됩니다.
- CNI 플러그인은 노드에 veth, bridge, route, iptables/nftables 등을 설정해 says “Pod 간 통신이 되는 것처럼” 만듭니다.
- 노드 간 Pod-to-Pod 통신 이슈가 나면 결국 확인 포인트가:
- 라우팅 테이블(
ip route) - 포워딩(
ip_forward) - NAT/필터(iptables/nft)
- 인터페이스 상태(
ip link), IP 설정(ip addr)
로 내려옵니다.
- 라우팅 테이블(
'CKA' 카테고리의 다른 글
| Network - 네트워크 기초(veth, bridge, routing, NAT, port-forward) (1) | 2026.01.05 |
|---|---|
| Network - 네트워크 기초(DNS) (0) | 2026.01.05 |
| Storage - 정리 (0) | 2026.01.05 |
| Storage - Storage Class (0) | 2026.01.03 |
| Storage - PV & PVC (0) | 2026.01.03 |