Calico 네트워크 정책

Update : 2020-11-17

Calico 네트워킹 소개

Calico는 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션입니다. Calico는 Kubernetes, OpenShift, Docker EE, OpenStack 및 베어 메탈 서비스를 포함한 광범위한 플랫폼을 지원합니다.

Calico는 유연한 네트워킹 기능과 보안 기능을 결합하여 네이티 Linux 커널 성능과 클라우드 네이티브 확장성을 갖춘 솔루션을 제공합니다. Calico 네트워크 정책 집행을 통해 네트워크 세분화 및 테넌트 격리를 구현할 수 있습니다. 이는 테넌트를 각각 격리해야 하는 다중 테넌트 환경에서 또는 개발, 스테이징 및 프로덕션에 별도의 환경을 생성하고자 하는 경우 유용합니다. 네트워크 정책은 네트워크 인,아 규칙을 생성할 수 있다는 점에서 AWS 보안 그룹과 유사하지만, 인스턴스를 보안 그룹에 할당하는 대신 포드의 selector, label등 사용하여 네트워크 정책을 Pod 할당합니다.

해당 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?