calico
컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션.
Linux 및 Windows에 대해 인터넷과 동일한 IP 네트워킹 원칙을 기반으로 Kubernetes 포드를 연결하기 위한 네트워킹 및 네트워크 정책 솔루션을 제공한다.
캡슐화 또는 오버레이 없이 구축되어 고성능의 대규모 데이터 센터 네트워킹을 제공할 수 있으며, 분산 방화벽을 통해 Kubernetes 포드에 대해 세분화된 의도 기반 네트워크 보안 정책을 제공한다.
CNI
Container Network Interface의 약어로 CNCF 프로젝트 중 하나이다.
컨테이너 간의 네트워크를 제어할 수 있는 플러그인을 만들기 위한 표준에 해당한다.
표준으로써의 역할을 할 뿐, 특정 서비스에 어울리는 기능을 구현하기 위해서는 CNI를 활용한 추가 기능 개발을 통해 서비스에 적용해야 한다. 이것을 CNI 문서에는 3rd party plugins라고 부른다.
즉, calico는 Antrea, Canal, Flannel 등과 함께 CNI를 활용한 3rd party plugin이며, 그중에서도 가장 보편적이고 성능적으로 준수한 플러그인 중 하나에 해당한다.
아주 와닿진 않지만, 쿠버네티스 클러스터 내의 네트워크 관련 설정을 관여하며, 적절하게 구성하지 않으면 pod 내에서 통신이 정상적으로 이루어지지 않는 것 같다. ping google.com조차도 할 수 없었다…….
이 글에서는 calico 리소스를 관리하는 명령줄 도구 calicoctl 설치 방법에 대해 정리한다. calico를 설치하는 게 아니다……!
calicoctl는 binary, kubectl plugin, docker container, k8s pod 등을 통해 설치하고 사용할 수 있다. 이 글에서는 kubernetes pod로 설치하려고 한다.
설치 방법
k8s Pod로 calicoctl을 설치하는 방법은 아주 간단한다.
calicoctl 매니페스트 파일 적용하는 것이 전부이기 때문이다.
매니페스트 파일 적용
kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calicoctl.yaml
# calicoctl 3.17 버전 설치
kubectl apply -f https://docs.projectcalico.org/archive/v3.17/manifests/calicoctl.yaml
데이터 저장소 유형이 ETCD인 경우에는 아래 명령을 사용한다.
kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calicoctl-etcd.yaml
+ 매니페스트 파일을 다운로드 후, 적절하게 수정한 뒤 적용할 수도 있다.
예시)
curl -O https://projectcalico.docs.tigera.io/manifests/calicoctl.yaml
kubectl apply -f calicoctl.yaml
참고로 다른 설치 방법 또한 curl로 다운로드하는 것이 전부인 듯하다. 공식 문서 https://projectcalico.docs.tigera.io/maintenance/clis/calicoctl/install를 참고한다.
설치 후 확인
매니페스트 파일은 ServiceAccount, ClusterRole, ClusterRoleBinding 그리고 calicoctl 포드로 구성되어 있다. 매니페스트 적용 후에는 calicoctl 포드가 정상적으로 동작하는지 확인해본다.
실행 방법
정상적으로 동작하면 exec 명령으로 직접 접속하거나 명령을 전달하여 필요한 작업을 진행하면 된다.
kubectl exec -n kube-system calicoctl -- <COMMAND>
# 예시
kubectl exec -n kube-system calicoctl -- calicoctl get nodes
참고 문서