Calico 네트워크 정책
Update : 2020-11-17
Calico 네트워킹 소개

Calico는 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션입니다. Calico는 Kubernetes, OpenShift, Docker EE, OpenStack 및 베어 메탈 서비스를 포함한 광범위한 플랫폼을 지원합니다.
Calico는 유연한 네트워킹 기능과 보안 기능을 결합하여 네이티 Linux 커널 성능과 클라우드 네이티브 확장성을 갖춘 솔루션을 제공합니다. Calico 네트워크 정책 집행을 통해 네트워크 세분화 및 테넌트 격리를 구현할 수 있습니다. 이는 테넌트를 각각 격리해야 하는 다중 테넌트 환경에서 또는 개발, 스테이징 및 프로덕션에 별도의 환경을 생성하고자 하는 경우 유용합니다. 네트워크 정책은 네트워크 인,아 규칙을 생성할 수 있다는 점에서 AWS 보안 그룹과 유사하지만, 인스턴스를 보안 그룹에 할당하는 대신 포드의 selector, label등 사용하여 네트워크 정책을 Pod 할당합니다.
주의 !!! Amazon EKS와 함께 Fargate를 사용하는 경우 Calico가 지원되지 않습니다.
이 랩에서는 Calico CNI를 사용하지 않습니다. Calico의 Network Policy만 구성해서 사용합니다.
해당 LAB은 Project Calico 를 참조합니다. https://docs.projectcalico.org/security/kubernetes-policy
EKS에 Calico 설치하기
aws/amazon-vpc-cni-k8s GitHub 프로젝트에서 Calico 매니페스트를 적용합니다. 이 매니페스트는 kube-system 네임스페이스에 데몬 세트를 생성합니다.
calico 매니페스트 파일의 주요 내용을 살펴 봅니다.
정상적으로 설치되었는 지 확인합니다.
아래와 같이 결과를 확인 할 수 있습니다. 모든 노드에 분산 설치되기 위해 Daemonset으로 설치 되었습니다.
Calico 기반의 네트워크 정책 구성.
1.데모 앱 배포.
이 랩에서는 EKS Cluster에 새로운 Namespace, front-end, back-end, Client, UI 서비스 등을 만들고, 상호간의 네트워크 통신을 허용 또는 제어하는 네트워크 정책을 생성합니다. 또한 각 서비스간에 사용 가능한 송/수신 경로를 보여주는 UI를 포함하고 있습니다.
name space : stars
Pod : frontend , backend 각 1개
replicationcontroller : frontend, backend 1개에 설정
service : frontend, backend에 ClusterIP type으로 설정
name space : management-ui
Pod : management-ui
replicationcontroller : management-ui 1개에 설정
service : management-ui에 LoadBalcer Type으로 설정.
name space : client
Pod: client-sjnjk
replicationcontroller : client에 1개 설정
service : client에 ClusterIP type으로 설정
아래와 같은 출력 결과를 확인 할 수 있습니다.
각 매니페스트 파일을 참조하십시요
frontend.yaml
backend.yaml
management-ui.yaml 파일
client yaml 파일
2. management-ui에 접속
management UI Pod는 External IP로 LB Service를 제공하고 있습니다. 아래와 같은 명령을 통해서 External IP를 확인합니다.
출력 결과는 아래와 같습니다.
해당 웹 사이트는 Client App , Front end App, Back end App 간의 트래픽 허용 상태를 제공해 줍니다.

3.네트워크 정책 적용
Network Policy를 적용해서 Pod간의 제어를 확인해 봅니다.
먼저 stars, client namespace 에 deny 정책을 업데이트 합니다.
default-deny.yaml을 확인해 봅니다.
다시 아래 management-ui 로 접속해 봅니다.
ELB 주소로 접속하면, All deny로 출력되는 결과가 없습니다.

다시 정책을 허용합니다.
아래에서 처럼 이제 management-ui로는 접속이 가능합니다. 하지만 Frontend, Backend, Client Pod간에는 통신되지 않습니다.

아래 매니페스트 파일을 확인해 봅니다.
namespace : stars 의 frontend, backend pod는 management-ui에 연결이 가능하도록 합니다.
namespace : client 의 client pod는 management-ui에 연결이 가능하도록 합니다.
이제 Client에서 Front end로 유입되는 트래픽을 허용합니다.
아래에서 매니페스트 파일을 통해 상세 내용을 확인 할 수 있습니다.
다시 management-ui 로 접속해 보면 트래픽 허용되는 것을 확인 할 수 있습니다.

이제 frontend에서 backend로 유입되는 트래픽을 허용합니다.
아래에서 매니페스트 파일을 통해 상세 내용을 확인 할 수 있습니다.
다시 management-ui 로 접속해 보면 트래픽 허용되는 것을 확인 할 수 있습니다.

Last updated
Was this helpful?