Kubernetes

Calico IPAM

Operation CWAL 2021. 1. 31. 02:56

Kubernetes는 직접 Pod에 IP 주소를 할당하고 관리하는 대신 IPAM 플러그인을 사용하도록 설계되었다. CNI 플러그인과 마찬가지로 다양한 IPAM 플러그인이 존재하지만, 보통은 CNI 플러그인과 같이 제공하는 경우가 많다. Calico 역시 자체 IPAM 플러그인 calico-ipam을 가지고 있으며 다음과 같은 기능을 가지고 있다.

 

Calico IPAM

Calico 설치시 따로 설정을 변경하지 않는 이상, Default로 사용되는 IPAM 플러그인이다. 기본적으로 K8s의 Pod CIDR과 매칭되는 하나의 IP Pool을 사용하지만, 필요한 경우 Pod CIDR을 쪼개서 여러개의 IP Pool을 구성하여 이를 node, namespace, pod annotation에 따라 선택할 수 있는 기능을 제공한다.

 

Calico IPAM blocks

Calico IPAM은 IP Pool을 Block이라는 소단위로 쪼개어 Node에 분배하는데, 각 Node는 1개 이상의 Block을 가질 수 있다. 또한 Block은 Cluster의 Node나 Pod이 늘어나거나 줄어듬에 따라 유동적으로 추가/제거될 수 있음을 알아두자.

Block을 사용할 경우, 최대한 기존 Block 내에서 IP를 생성하려 하기 때문에 Routing Table의 크기를 줄일 수 있다. 기존 Block내에 가용한 IP 주소가 없는 경우, 새로운 Block을 생성할 수 있다.

Routing Table

 

Block 크기는 기본적으로 64개의 주소(/26)를 가질 수 있으며, 이는 IPPool 리소스를 수정함으로 변경 가능하다.

Calico IPPool

.spec.blockSize의 값이 26으로 설정된 상태임을 확인할 수 있다.

 

 

Host-local IPAM

host-local 플러그인은 매우 단순하게 동작하는데, 정적인 CIDR을 Node마다 미리 할당한 뒤 해당 범위 안에서만 IP 주소를 할당하는 방식이다. 한번 설정되고나면 변경이 불가하며, 가용한 IP가 없다면 더 이상의 Pod을 생성할 수 없다.

Calico에서도 사용이 가능하지만, node/pod/namespace 단위의 IP Pool 할당 기능은 사용할 수 없다.

 

참고
Get started with IP address management

 

'Kubernetes' 카테고리의 다른 글

ETCD Encryption  (0) 2021.04.21
Imperative Vs. Declarative  (0) 2021.04.08
Container Runtime과 Docker  (0) 2021.03.09
Calico 설치 및 Mode 변경  (2) 2021.01.29
StatefulSet  (0) 2021.01.25