EKS VPC CNI 플러그인 사용 시 네트워킹 동작 원리

Jaden Kim·약 7시간 전
0
post-thumbnail

🔹 다른 Plugin을 사용하는 경우 (Calico)

다른 CNI 플러그인을 사용할 경우에는, 보통 Pod의 IP 대역과 Node의 IP 대역이 서로 다릅니다.
예를 들어 Pod의 IP가 10.1.1.2 라면 Node의 IP는 192.168.1.102 인 식으로, 이로 인해 Node 간 통신 구간에서는 Pod의 IP 대역을 알 수가 없습니다.
따라서 파드가 다른 노드의 파드에 요청을 보내기 위해서는, 네트워크 단에서 추가적인 조치가 필요합니다.

예를 들어 노드1(192.168.1.101)의 파드A(10.1.1.2)가 노드2(192.168.1.102)의 파드B(10.1.2.3)로 요청을 보낸다고 합시다.
다른 노드로의 트래픽 전달이 필요하므로, 파드A -> 노드1 -> 노드2 -> 파드B로 트래픽이 흘러야 합니다.
이 때 노드1에서는 파드B의 IP 주소인 10.1.2.3을 직접 찾아갈 수 없습니다.
파드에 해당하는 노드를 찾아가기 위한 네트워크적인 조치가 필요하며, VXLAN/IPIP를 통해서 패킷을 캡슐화하여 IP 헤더를 추가해야 합니다.
이러한 방식을 Overlay 방식이라고 말합니다.

[Pod A:10.1.1.2] 
    |
  veth
    |
[Node 1] 
    |
  VXLAN Encapsulation (outer IP: 192.168.1.101 → 192.168.1.102)
    |
==== Physical Network ====
    |
[Node 2]
    |
  VXLAN Decapsulation
    |
  veth
    |
[Pod B:10.1.2.3]

Calico Routing 방식에서는 라우팅 테이블에 각 노드의 Pod IP 대역에 노드 IP를 매칭해서 저장하는 식으로 운영해서, 오버헤드 없이 사용 가능합니다.
하지만 보통 BGP를 이용해서 라우팅 정보를 노드 간 공유하는데, 클라우드 환경에서는 BGP가 제한되는 경우가 많습니다.

🔹 EKS VPC CNI를 사용하는 경우

이와 달리, EKS VPC CNI는 Pod의 IP 대역과 노드의 IP 대역이 동일하게 설정됩니다.
예를 들어 노드1(192.168.1.101)에 파드A(192.168.1.51)가 속하고, 노드2(192.168.1.102)에 파드B(192.168.1.52)가 속하는 식입니다.
따라서 노드에 연결된 ENI 에서는 파드의 IP만 보고도 어떤 노드의 ENI에 요청을 보내야하는지 알 수 있습니다.
덕분에 별도의 네트워크 오버헤드 없이 트래픽을 다른 노드의 파드에 전달 가능합니다.

[Pod A: 192.168.1.51] 
    |
  veth
    |
[Node 1: 192.168.1.101] 
    |
==== AWS Network ====
    |
[Node 2: 192.168.1.102]
    |
  veth
    |
[Pod B: 192.168.1.52]

🔹 VPC CNI 플러그인의 IP 할당 원리

VPC CNI plugin은 파드 생성 시점에 IP 할당 시 L-IPAM 방식을 사용하여, ENI 슬롯과 IP 풀(warm pool)을 이용해 Pod에 IP를 할당합니다.
기본적으로 하나의 ENI는 여러 개의 보조 IP를 가질 수 있으며, 이들을 ENI의 슬롯에 관리합니다.
Pod는 ENI에 할당된 보조 IP 중 하나를 할당받아서 사용합니다.

+-------------------------+
|         ENI-1          |
+-------------------------+
| Primary IP   | 10.0.1.10 |  <-- Node IP
+-------------------------+
| Secondary IP | 10.0.1.11 |  <-- Pod A IP
| Secondary IP | 10.0.1.12 |  <-- Pod B IP
| Secondary IP | 10.0.1.13 |  <-- Pod C IP
| Secondary IP | 10.0.1.14 |  <-- Pod D IP
+-------------------------+

🔧 Warm Pool이란?

Warm IP Pool이란 필요할 때 즉시 Pod에 IP를 할당할 수 있도록 미리 확보해둔 ENI의 보조 IP 풀입니다.
Pod가 실행될 때 kubelet은 VPC CNI에 할당할 IP를 요청하고, VPC CNI는 warm pool에서 IP 하나를 Pod에 할당합니다.
VPC CNI는 설정된 WARM_IP_TARGET 수만큼 보조 IP를 미리 할당받아 ENI에 세팅해두고, Pod가 스케줄될 때마다 빠르게 IP를 할당합니다.
또한 ENI에는 최대로 할당 가능한 슬롯 크기가 정해져 있기 때문에, WARM_ENI_TARGET 수만큼 미리 비어있는 ENI를 추가로 연결해둡니다.

0개의 댓글