본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

OpenStack용 Calico 네트워크 정책 시작하기

원문 보기 위키 갱신

OpenStack 보안 그룹을 넘어서는 보안을 Calico 네트워크 정책으로 확장하는 방법을 소개해요. VM에 미리 정의된 레이블을 붙여 사용자가 우회할 수 없는 추가 제한을 걸 수 있다는 점이 핵심이에요. 리전(region)이 여러 개인 OpenStack 배포에서도 정책을 쉽게 정의할 수 있어요.

출처: 문서

본문

큰 그림

Calico 네트워크 정책을 사용해 OpenStack 보안 그룹 너머까지 보안을 확장해요.

가치

배포 사용자(deployment users) 입장에서는 OpenStack 보안 그룹만으로도 충분한 기능과 유연성을 제공해요. 하지만 배포 관리자(deployment administrators) 입장에서는 VM 보안 그룹에서 레이블링이 제한적이라, 생겨나는 모든 보안 사용 사례를 다루기 어려워요. Calico 네트워크 정책은 VM 전용 레이블을 제공해서 VM을 식별하고, 사용자의 보안 그룹 구성으로는 우회할 수 없는 추가 제한을 걸 수 있게 해 줘요.

개념

멀티 리전 배포

OpenStack API만으로는 리전 간 네트워크 트래픽에 정책을 적용하기 어려워요. 보안 그룹이 단일 리전에만 존재하기 때문이에요. Calico에서는 OpenStack 배포의 각 리전이 하나의 etcd 데이터스토어 안에서 별도의 Calico 네임스페이스가 돼요. 리전을 네임스페이스에 매핑했기 때문에, 서로 다른 리전의 VM 사이 통신에 대한 Calico 네트워크 정책을 쉽게 정의할 수 있어요.

레이블: 더 많은 유연성, 더 강한 보안

Calico는 OpenStack 배포를 위해 미리 정의된 VM 엔드포인트 레이블(프로젝트, 보안 그룹, 네임스페이스)을 제공해요. Calico 네트워크 정책의 셀렉터 필드에서 이 레이블들을 사용해 허용/거부 정책의 대상 VM을 식별할 수 있어요.

정책 순서와 강제

Calico 네트워크 정책은 언제나 OpenStack 보안 그룹보다 먼저 강제되고, 사용자 수준의 보안 그룹 구성으로 우회할 수 없어요.

시작하기 전에...

방법

특정 보안 그룹 사이의 모든 ingress 트래픽 제한하기

다음 예제는 OpenStack 보안 그룹 정책보다 먼저 적용되는 GlobalNetworkPolicy를 만들어요. OpenStack superman 프로젝트와 lexluthor 프로젝트 사이의 모든 ingress 통신을 막아요. 프로젝트를 식별하기 위해 미리 정의된 Calico VM 엔드포인트 레이블 openstack-project-name을 사용해요.

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-lexluthor-to-superman
spec:
  order: 10
  selector: "projectcalico.org/openstack-project-name == 'superman'"
  types:
    - Ingress
  ingress:
    - action: Deny
      source:
        selector: "projectcalico.org/openstack-project-name == 'lexluthor'"
---
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-superman-to-lexluthor
spec:
  order: 10
  selector: "projectcalico.org/openstack-project-name == 'lexluthor'"
  types:
    - Ingress
  ingress:
    - action: Deny
      source:
        selector: "projectcalico.org/openstack-project-name == 'superman'"

다른 리전의 VM 사이에서 특정 트래픽 허용하기

다음 예제는 미리 정의된 VM 엔드포인트 레이블 openstack-security_group_ID를 사용해요. openstack-85cc… 레이블을 가진 모든 리전의 VM에서, openstack-a773… 레이블을 가진 VM의 80번 포트로 들어오는 트래픽을 허용해요.

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: allow-tcp-80
spec:
  selector: 'has(sg.projectcalico.org/openstack-a7734e61-b545-452d-a3cd-0189cbd9747a)'
  types:
    - Ingress
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: 'has(sg.projectcalico.org/openstack-85cc3048-abc3-43cc-89b3-377341426ac5)'
      destination:
        ports:
          - 80

추가 리소스

더 알아보기 (Learn more)

Calico 정책은 OpenStack 보안 그룹보다 먼저 적용되므로, 관리자가 사용자 구성과 무관하게 최소 보안을 강제할 수 있어요. 리전을 네임스페이스로 매핑하는 개념만 잡으면 멀티 리전 정책도 어렵지 않아요.