IP 주소 관리 시작하기
Calico 클러스터에서 IP 주소 관리(IPAM)가 어떻게 동작하는지 이해하고, Calico IPAM과 host-local IPAM 중 무엇을 쓸지 정하는 방법을 다뤄요. IP 풀 개념, 블록 단위 할당, 노드·네임스페이스별 주소 배분까지 함께 살펴봐요. IP 주소 계획은 클러스터 확장성에 직결되니 처음부터 개념을 잡아 두면 좋아요.
출처: 문서
본문
큰 그림
Calico를 사용하는 Kubernetes 클러스터에서 IP 주소 관리(IPAM)가 어떻게 동작하는지 이해해요.
이런 점이 좋아요
IPAM 기법마다 제공하는 기능이 달라요. Calico의 IPAM은 다른 주소 관리 방식과 비교해 IP 할당 효율과 유연성을 더 제공해요.
개념
Kubernetes에서의 IPAM
Kubernetes는 IPAM 플러그인을 사용해 파드에 할당되는 IP 주소를 관리해요. IPAM 플러그인마다 제공하는 기능이 다르고요. Calico는 Calico와 잘 맞도록 설계된 자체 IPAM 플러그인 calico-ipam을 제공하며, 여러 기능을 갖추고 있어요.
Calico IPAM
calico-ipam 플러그인은 Calico의 IP 풀 리소스를 사용해 클러스터 안에서 IP 주소가 파드에 어떻게 할당될지 제어해요. 대부분의 Calico 설치에서 쓰이는 기본 플러그인이에요.
기본적으로 Calico는 Kubernetes pod CIDR 전체에 하나의 IP 풀을 사용하지만, pod CIDR을 여러 풀로 나눌 수도 있어요. 노드의 특정 집합에 별도의 IP 풀을 할당하거나, 네임스페이스를 사용해 클러스터 안의 팀, 사용자, 애플리케이션에 IP 풀을 배정할 수 있어요.
SUCCESS: Calico IPAM은 Kubernetes 노드 CIDR 할당(
Node.spec.podCIDR)을 사용하지 않기 때문에 kube-controller-manager에--allocate-node-cidrs=false를 설정할 수 있어요. 그러면 Kubernetes가 쓰이지 않는 노드 CIDR을 할당하지 않고, 노드에서CIDRNotAvailable이벤트가 발생하는 것을 피할 수 있어요.kubeadm으로 클러스터를 부트스트랩하면서
--pod-network-cidr을 전달했다면, kubeadm이 노드 CIDR 할당을 자동으로 켜요. 클러스터 생성 후 컨트롤러 매니저를 재구성하는 방법은 Kubernetes 문서를 참고하세요.
다음 방법으로 각 파드가 어떤 풀을 사용할지 제어할 수 있어요.
- 노드 셀렉터
- 파드의 네임스페이스에 붙인 애노테이션, 또는
- 파드에 붙인 애노테이션
Calico는 host-local IPAM 플러그인도 지원해요. 다만 host-local IPAM 플러그인을 사용하면 일부 Calico 기능을 쓸 수 없어요.
Calico IPAM 블록
Calico IPAM에서 IP 풀은 블록(block)으로 더 잘게 나뉘어요. 블록은 클러스터의 특정 노드와 연결되는 작은 묶음이에요. 클러스터의 각 노드는 하나 이상의 블록과 연결될 수 있어요. 클러스터의 노드와 파드 수가 늘거나 줄면 Calico가 필요에 따라 블록을 자동으로 만들고 없애요.
블록 덕분에 Calico는 같은 노드의 파드에 할당된 주소를 효율적으로 묶어 라우팅 테이블 크기를 줄여요. 기본적으로 Calico는 연결된 블록 안에서 IP 주소를 할당하려 하고, 필요하면 새 블록을 만들어요. Calico는 노드에 연결되지 않은 블록의 주소를 그 노드의 파드에 할당할 수도 있어요. 덕분에 파드가 뜬 노드와 독립적으로 IP 할당이 가능해요.
기본적으로 Calico는 64개 주소를 담을 수 있는 블록(/26)을 만들지만, IP 풀마다 블록 크기를 조정할 수 있어요.
host-local IPAM
host-local 플러그인은 단순한 IP 주소 관리 플러그인이에요. 각 노드에 정적으로 할당된, 미리 정해진 CIDR을 사용해 파드 주소를 고름으로써 동작해요. 한번 정해지면 노드의 CIDR은 바꿀 수 없어요. 파드는 노드에 할당된 CIDR 안에서만 주소를 받을 수 있어요.
Calico는 Kubernetes API의 Node.Spec.PodCIDR 필드를 사용해 각 노드에 쓸 CIDR을 결정하는 방식으로 host-local IPAM 플러그인을 사용할 수 있어요. 다만 노드별, 파드별, 네임스페이스별 IP 할당 기능은 host-local 플러그인으로는 쓸 수 없어요.
host-local IPAM 플러그인은 주로, 파드 트래픽을 한 호스트에서 다른 호스트로 라우팅하는 다른 방식들이 사용해요. 예를 들어 flannel 네트워킹 위에 정책 적용용으로 Calico를 설치할 때와, Google Kubernetes Engine(GKE)에서 Calico를 사용할 때 쓰여요.
방법
calico-ipam으로 Calico 설치하기
시작하기 가이드 중 하나를 따라 Calico를 설치하세요.
host-local IPAM으로 Calico 설치하기
시작하기 가이드 중 하나를 따라 flannel 네트워킹과 함께, 또는 GKE에서 Calico를 설치하세요.
또는 host-local IPAM 레퍼런스 문서를 참고하세요.
튜토리얼
IP 풀에 대한 블로그/튜토리얼은 Calico IPAM: Explained and Enhanced를 참고하세요.
추가 리소스
이 밖에도 Calico IPAM을 활용하는 여러 방법이 있어요.
- 토폴로지 기반 주소 할당
- 파드에 특정 주소 사용하기
- 한 IP 풀에서 다른 IP 풀로 마이그레이션하기
- IP 범위로 레거시 방화벽과 상호 운용하기
- IP 주소 사용률 보기
- IP 주소 블록 크기 변경하기
더 알아보기 (Learn more)
Calico IPAM은 IP 풀을 /26 블록으로 쪼개 노드와 묶어 주소 활용 효율을 높여요. --allocate-node-cidrs=false로 kubeadm의 자동 CIDR 할당과의 충돌을 피하는 것도 실무 팁이에요. host-local 플러그인은 flannel/GKE 조합에서 쓰인다는 점만 기억하면 선택이 쉬워져요.