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 의 구성 방법
- 자세한 내용은 AWS 공식 문서를 참고 하시기 바랍니다. https://docs.aws.amazon.com/eks/latest/userguide/calico.html
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 용도로 사용
에 대해 어떻게 활용할 수 있을지 테스트 해보도록 하겠습니다.
감사합니다.
'IT > DevOps' 카테고리의 다른 글
[CI/CD] Github Action과 친해지기 - Maven Build 하기 (0) | 2021.10.28 |
---|---|
[CI/CD] Github Action과 친해지기 - AWS ECR push 하기 (2) | 2021.10.28 |
자주 사용하는 도커(Docker) 명령어 정리 (0) | 2021.10.08 |
[kubnernetes] 디스크 볼륨 타입 유형 비교 (emptyDir vs hostPath) (1) | 2021.10.06 |
[kubernetes] ExternalDNS란? 개념부터 설치까지 정리(AWS EKS) (3) | 2021.09.28 |