목차

CNI - Calico 네트워크 설정

  • 컨테이너 네트워크 표준
  • 네트워크 계층 구현 방식의 공통된 인터페이스를 제공하여 컨테이너 런타임과 오케스트레이터간의 구현방식의 난립을 방지. k8s는 Pod간 통신을 위해서 사용
  • k8s는 ‘kubenet’ 자체적 CNI Plugin을 제공하지만 매우 제한적. 3rd-party Plugin을 많이 사용함
  • CNI 필요성
    • 각 노드에 존재하는 container network의 IP대역이 동일 → Pod들이 같은 IP 할당 받을 가능성이 높음
    • 노드 별 노드 안에 있는 Pod IP만 식별 가능하기에 Pod의 IP가 다르게 할당되었다 하더라도 해당 POD가 어느 노드에 존재하는지 확인불가
    • 중복되지 않는 IP를 부여해줄 역할 → CNI Plugin
      • CNI는 worker node에 중복되지 않는 subnet 부여 및 Worker node에서 실행되는 Pod는 해당 subnet에 포함된 IP를 제공 받음
    • CNI는 Pod 생성 ~ 삭제 시마다 호출되는 API 규격과 인터페이스를 정의함
  • CNI 구성 이점
    • CNI가 브릿지 인터페이스를 만들고, 컨테이너 네트워크 대역대를 나누어 테이블 생성
    • Pod들은 CNI에 의해 제공되는 고유 IP를 갖는다
    • 클러스터내의 모든 Pod간 네트워크가 자동 구성되어 Service가 없어도 Pod간 통신 가능
    • CNI Provider는 캡슐화 네트워크(VXLAN, IP-in-IP)와 비 캡슐화 네트워크(BGP) 모델을 사용하여 네트워크 망 구현
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml

kubectl apply -f calico.yaml

kubectl get po -A
# 설치가 진행되어 확인까지 많은 시간이 필요
# Pending -> Running 으로 변경되는 것을 볼 수 있음