And Brain said,

Calico(CNI), 다양한 컨테이너 환경을 뛰어다니는 고양이 본문

IT/Kubernetes

Calico(CNI), 다양한 컨테이너 환경을 뛰어다니는 고양이

The Man 2024. 1. 26. 10:45
반응형

 
CNI(Container Network Interface)는 컨테이너에 네트워크 연결을 제공하는 표준 방법을 정의하는데, Calico는 이 CNI 규격을 구현한 소프트웨어 중 하나입니다.
 
컨테이너 환경을 생각해봅시다. 수백 수천가지 각기 다른 컨테이너들이 서로 소통하고자 한다면, 일일히 그들이 소통 가능하게 만들어주는 것은 여간 막막한 일이 아닐겁니다. 그렇다면 어떻게 해야할까요?
 
바로 여기서 Calico가 등장합니다. Calico는 정말 다양한 컨테이너들을 뛰어다니며 그들의 소통을 도와줍니다. Calico는 대규모 클라우드 환경에서 그 진가를 발휘합니다. 수천, 아니 수만 개의 컨테이너가 있어도 Calico는 끄떡없이 효율적으로 통신을 관리해줍니다.
 
Calico는 어떻게 이 같은 일을 해낼 수 있을까요?
 
그것은 바로, Calico의 강력한 무기 중 하나인 BGP(Border Gateway Protocol) 덕분입니다.
 
BGP는 인터넷 기본 라우팅 프로토콜로, 서로 다른 네트워크간에 최적의 경로를 찾아 트래픽을 전달하는 역할을 합니다. 먼저, 여러 가능한 경로 중에서 다양한 경로 속성(거리, 네트워크 정책)을 기반으로  데이터를 전송하기 위한 최적의 경로를 찾아내고 결정합니다. 또한, 네트워크 상황이 바뀔 때, BGP는 동적으로 경로를 조정하여 네트워크의 안정성을 유지시킵니다.
 
Calico가 BGP를 실현시키는 방식은 다음과 같습니다.
 
먼저, Calico는 이 BGP를 사용하여 각 노드(컴퓨터나 서버)에 지휘자 역할을 하는 BGP 에이전트를 배치합니다. 이 에이전트들은 서로 정보를 주고받으며, 네트워크의 트래픽을 원활하게 관리합니다.
 
이렇게 배치된 BGP 에이전트는 각 컨테이너 또는 Pod에 할당된 IP 주소 정보를 네트워크에 광고합니다. 이는 마치 네트워크의 큰 교통 안내판을 세우는 것과 같아서, 다른 노드들이 해당 IP 주소로 데이터를 정확하게 보낼 수 있게 도와줍니다. 이 과정은 네트워크 내의 모든 트래픽이 올바른 방향으로 이동하도록 보장합니다.

그런데 Calico는 여기서 멈추지 않습니다. 각 노드 간에 BGP 피어링이라는 동료 관계를 구축하여, 노드들이 서로 효율적으로 정보를 교환하고 협력할 수 있게 합니다. 이 피어링은 클러스터 내부는 물론, 필요에 따라 다른 클러스터 또는 외부 네트워크와도 이루어질 수 있죠. 이는 네트워크의 확장성과 연결성을 크게 향상시킵니다.

마지막으로, Calico는 BGP를 사용하여 서로 다른 서브넷에 위치한 노드들 간의 통신도 가능하게 합니다. 이는 복잡하고 분산된 네트워크 환경에서도 노드들이 효율적으로 서로 소통할 수 있게 해줍니다.

이처럼 Calico는 BGP를 통해 네트워크의 확장성, 유연성 및 성능을 크게 향상시키는 중요한 역할을 합니다. Calico를 통해 구현된 BGP는 복잡한 컨테이너화된 환경에서의 네트워킹 요구사항을 충족시키는 강력한 도구가 됩니다.
 
 
그럼, 간단하게 쿠버네티스 클러스터 환경에서 Calico를 구축해봅시다.
 
쿠버네티스 관련 설명은, 아래의 제 블로그 CI/CD Argonautica 시리즈를 참고해주시기 바랍니다.
https://theworldaswillandidea.tistory.com/153

CI/CD Argonautica - Kubernetes, 조타수 - 이론

CI/CD Argonautica Docker, 선박 이론 실습 Kubernetes, 조타수 이론 실습 [1] 실습 [2] 실습 [3] Harbor, 항구 Helm, 타륜 Istio, 돛 Jenkins, 선장 ArgoCD, 출항 1장/ Loki, Trickster Troubleshooting 우리 여행의 선박이 되어줄

theworldaswillandidea.tistory.com

 
 
 
먼저, 아래 명령어를 통해 calico.yaml을 쿠버네티스 클러스터 환경에 적용하면 끝입니다..

curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml -O
kubectl apply -f calico.yaml

 
https://theworldaswillandidea.tistory.com/195

가상머신 사용 시 Calico CNI IP 자동감지 인터페이스 변경

K8s 클러스터에 CNI를 Calico Plugin으로 설정한 후 뭔가 이상한 낌새를 느껴 calico-node의 상태를 확인했더니 아니나 다를까 Ready 상태가 아니었다. calico/node is not ready: BIRD is not ready: BGP not established with

theworldaswillandidea.tistory.com

 
혹시 Calico 노드가 알아서 인터페이스를 찾지못한다면 위 포스트를 참고하여 인터페이스를 지정해줄 수도 있다는 점 확인해보시길 바랍니다.
 
자, 이렇게 기본적인 Calico 설정이 완료됐습니, 이제 여러분만의 요구사항에 맞게 추가 설정을 할 수 있습니다. 네트워크 정책, IPAM 설정 등 Calico의 다양한 기능을 탐험해보세요.
 
다음번에도 더욱 양질의 포스트로 찾아뵙도록 하겠습니다. 그럼 다음에 만날 때까지 안녕.
 

Thanks for watching, Have a nice day.

반응형
Comments