새소식

Kubernetes

[Study 3주차] 쿠버네티스 Calico CNI 소개

  • -

CloudNet@ 팀의 가시다님께서 리딩하시는 KANS Study (Kubernetes Advanced Networking Study) 3주차 스터디 내용 정리

 

이번 주차에서는 Calico CNI 를 공부하면서, 쿠버네티스 네트워크에 대해 알아보았습니다.



1. Calico CNI

 

Calico 는 쿠버네티스 뿐만 아니라 여러 플랫폼에서 워크로드의 네트워크 통신과 보안 기능을 제공하는 도구

 

  • Calico 공식 문서

https://docs.tigera.io/calico/latest/about

 

칼리코는 쿠버네티스 CNI 를 준수하며, 쿠버네티스 파드를 위한 네트워크 통신 환경을 마련해줍니다.
Calico 와 Flannel 과의 가장 큰 차이점은 Network Policy 를 사용할 수 있다는 것입니다.

 

 

1.1. Calico 컴포넌트 소개

 

출처:  https://docs.tigera.io/calico/latest/reference/architecture/overview

 

Calico 컴포넌트 구분

 

1. 칼리코 데이터저장소

- 칼리코 동작을 위한 데이터를 저장하는 곳

- 저장소는 쿠버네티스 API 저장소 or ETCD 를 선택

 

2. 칼리코 노드
- 각 쿠버네티스 노드마다 데몬셋으로 칼리코 데몬셋 파드가 배포
- 칼리코 노드 파드에는 칼리코 동작을 위한 Bird, Felix, Confd 프로그램이 동작

 

a. Bird
- BGP 라우팅 프로토콜을 사용하여, 각 노드 간 파드 대역을 공유

 

b. Felix
- Bird 를 통해 학습한 상대방 노드의 파드 네트워크 대역을 호스트의 라우팅 테이블에 업데이트 하는 역할

 

c. Confd
- BGP 설정 등을 통해 칼리코 데이터저장소에 변경 발생 시, Bird 의 변경된 설정 파일을 만들고 해당 설정을 반영하도록 함

 

3. CNI IPAM 플러그인
- 칼리코에서 자체적으로 사용하는 Pod CIDR IPAM



1.2. Calico CNI 설치

 

현재 쿠버네티스에는 CNI 가 설치되어 있지 않기 떄문에, Node 의 상태가 NotReady 로 표시되고 있습니다.

 

실습을 위해 Calico CNI 매니페스트를 통해서 Calico 를 배포합니다.

kubectl apply -f https://raw.githubusercontent.com/gasida/KANS/main/kans3/calico-kans.yaml

 

Calico CNI 설치 후, Node 상태와 Pod 가 정상적으로 동작하는 것을 알 수 있습니다.

 

calicoctl 설치

 

Calico 의 경우, 별도의 CLI 도구가 필요합니다.
아래 명령어를 통해 calicoctl 을 설치해줍니다.

curl -L https://github.com/projectcalico/calico/releases/download/v3.28.1/calicoctl-linux-amd64 -o calicoctl
chmod +x calicoctl && mv calicoctl /usr/bin
calicoctl version

 

 

1.3. Calicoctl 사용 및 Calico 컴포넌트 확인

 

Calico IPAM 확인

 

Calico 가 자체적으로 사용하고 있는 IPAM 확인

# IPAM 정보 확인
calicoctl ipam show

# 각 노드에 할당된 Pod CIDR 확인
calicoctl ipam show --show-blocks

 

 

해당 IP 대역이 실제로 Calico 가 별도로 관리하고 있는 대역인 지 확인이 가능할까요??
아래 명령어를 실행하면 노드가 가지고 있는 IPAM 이 나옵니다.

kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' ;echo

 

 

해당 IP 범위는 앞서 확인했던 칼리코 IPAM 과 다른 대역이며, 실제 파드들은 칼리코 IPAM 대역을 사용하고 있는 것을 알 수 있습니다.

 

Calico Node 확인

calicoctl node status

 

 

앞서 컴포넌트 설명에 나와있던 것처럼 Bird 가 BGP 를 사용하기 때문에, BGP 상태 정보라고 표시된 것을 알 수 있습니다.

 

Contents

포스팅 주소를 복사했습니다