CloudNet@ 팀의 가시다님께서 리딩하시는 KANS Study (Kubernetes Advanced Networking Study) 3주차 스터디 내용 정리
이번 주차에서는 Calico CNI 를 공부하면서, 쿠버네티스 네트워크에 대해 알아보았습니다.
1. Calico CNI
Calico 는 쿠버네티스 뿐만 아니라 여러 플랫폼에서 워크로드의 네트워크 통신과 보안 기능을 제공하는 도구
https://docs.tigera.io/calico/latest/about
칼리코는 쿠버네티스 CNI 를 준수하며, 쿠버네티스 파드를 위한 네트워크 통신 환경을 마련해줍니다.
Calico 와 Flannel 과의 가장 큰 차이점은 Network Policy 를 사용할 수 있다는 것입니다.
1.1. Calico 컴포넌트 소개
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 상태 정보라고 표시된 것을 알 수 있습니다.