Calico 란? - EKS에서 Calico 사용하는 방법
IT/DevOps

Calico 란? - EKS에서 Calico 사용하는 방법

반응형

Intro

EKS에서 Calico를 사용하는 이유는 VPC CNI를 사용하지 않고 Overlay Network를 구성하기 위해 사용되거나 Pod간 통신제어를 하기위해 사용을 하게 됩니다.

EKS클러스터에는 기본적으로 aws-nod 라는 VPC CNI Plugin이 내장되어 있습니다. 이 VPC CNI는 VPC의 IP를 그대로 사용하기 때문에 초기에 구성한 VPC에 IP가 부족한 경우 대응이 복잡해지게 됩니다.

이때 Calico를 사용하게되면 VPC의 네트워크가 아닌 가상 네트워크를(VXLAN) 사용하기 때문에 훨씬 더 유연한 네트워크 구성을 할 수있게 됩니다.
*VXLAN이란? 다음 블로그 참고 [https://kim-dragon.tistory.com/163]

추가로 Calico CNI를 설치하게 되면 Pod간 네트워크 통신을 제어할 수 있는 Network Policy를 사용할 수 있습니다.
AWS VPC CNI 자체만으로는 pod간 통신제어가 불가능 합니다. 단, 노드그룹을 Fargate로 구성시 Security Goup으로 pod간 통신 제어가 가능합니다.

오늘은 이 Calico를 AWS EKS에서 사용할 수 있는 2가지 방법에 대해 알아보도록 하겠습니다.

Calico란?

Calico는 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션입니다

Calico는 Linux 및 Windows 에 대해 인터넷과 동일한 IP 네트워킹 원칙을 기반으로 Kubernetes 포드를 연결하기위한 네트워킹 및 네트워크 정책 솔루션을 제공합니다.

Calico는 캡슐화 또는 오버레이없이 구축되어 고성능의 대규모 데이터 센터 네트워킹을 제공 할 수 있습니다. 또한 Calico는 분산 방화벽을 통해 Kubernetes 포드에 대해 세분화 된 의도 기반 네트워크 보안 정책을 제공합니다.

Calico는 Managed Kubernetes Service인 EKS, AKS, GKE, IKS 또는 self-managed Kubernetes Distributions인 Kubnernetes, OpenShift, Rancher 등 광범위한 플랫폼을 지원하고 있습니다.

2020년 8월 에 Kubernetes CNI 에 대한 독립적인 벤치마크 비교를 발표 했는데 아래 요약 표와 같이 테스트한 모든 CNI 중에서 Calico가 거의 모든 범주에서 탁월 하다고 합니다.

AWS EKS에 Calico 사용하는 방법 2가지

Case1 : Calico를 Network Policy로만 사용

  • 위 그림과 같이 Policy만 Calico를 사용하도록 적용이 가능합니다. Policy를 calico로 구성하여 AWS Security group과 동일하게 Pod간 네트워크 통신 제어가 가능해집니다.
  • AWS EKS클러스터에는 기본적으로 Calico를 활용할 수 있도록 구성이 되어있습니다. ( 단, Calico관련 아래 manifests 적용이 필요함)

Case1 의 구성 방법

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml

Case2 : Calico를 Network Policy + CNI + Routing 용도로 사용

  • AWS EKS에는 기본적으로 VPC네트워크를 그대로 활용할 수 있도록 구성된 VPC CNI 가 설치가되 어있습니다.
  • Calico CNI는 Overlay Network를 지원하기 때문에 AWS VPC와는 상관없는 네트워크 설계가 가능해집니다.

Case2 구성 샘플

  • 테스트용 EKS 클러스터 생성
eksctl create cluster --name my-calico-cluster --without-nodegroup
  • 기존에 설치되어있는 VPC CNI 삭제
kubectl delete daemonset -n kube-system aws-node
  • Calico CNI 설치
kubectl apply -f https://docs.projectcalico.org/manifests/calico-vxlan.yaml
  • EKS 클러스터에 테스트용 노드 그룹 생성
eksctl create nodegroup --cluster my-calico-cluster --node-type t3.medium --max-pods-per-node 100
  • 테스트용 Nginx pod배포
# 테스트용 네임스페이스 생성
kubectl create test

# 테스트용 deployment 생성 
kubectl create deploy test-deploy --image=nginx --replicas=10 -n test

# 배포한 pod 조회
kubectl get pod -n test -o wide --watch

다음과 같이 Worker Node의 IP와는 별도의 IP가 할당되는 것을 확인할 수 있음

  • Calico 기본 IP Pool 확인

아래 리소스를 확인해보면 기본으로 172.16.0.0/16 으로 CIDR Pool이 설정되어있음

kubectl get IPPool

다음 시간에는 Case2 : Calico를 Network Policy + CNI + Routing 용도로 사용 에 대해 어떻게 활용할 수 있을지 테스트 해보도록 하겠습니다.

감사합니다.

반응형