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

엔드포인트 레이블과 운영자 정책

원문 보기 위키 갱신

Calico가 OpenStack VM을 WorkloadEndpoint로 표현할 때 붙이는 프로젝트·네트워크·보안 그룹·네임스페이스 레이블을 정리한 레퍼런스예요. 이 레이블을 활용하면 OpenStack 보안 그룹 정책 위에 추가로 적용되는 운영자(operator) 정책을 만들 수 있어요. 사용자 수준의 보안 그룹 설정으로는 덮어쓸 수 없는 정책이 필요할 때 유용해요.

출처: 문서

본문

Calico가 OpenStack VM을 Calico WorkloadEndpoint로 표현할 때, VM이 속한 프로젝트, 네트워크, 보안 그룹, 네임스페이스를 식별하는 레이블을 WorkloadEndpoint에 붙여요. 배포 운영자는 이 레이블들을 사용해 OpenStack 보안 그룹이 정의한 정책에 추가되는 Calico 정책을 구성할 수 있고, 이 정책은 사용자 수준의 보안 그룹 설정으로는 덮어쓸 수 없어요.

VM 엔드포인트 레이블

VM의 OpenStack 프로젝트(이전 이름은 'tenant')와 네트워크에 해당하는 레이블은 다음과 같아요.

레이블 이름 값
projectcalico.org/openstack-project-id <VM의 프로젝트 ID>
projectcalico.org/openstack-project-name <VM의 프로젝트 이름>
projectcalico.org/openstack-project-parent-id <VM의 부모 프로젝트 ID>
projectcalico.org/openstack-network-name <VM의 네트워크 이름>

VM이 속한 각 보안 그룹에 해당하는 레이블은 다음과 같아요.

레이블 이름 값
sg.projectcalico.org/openstack-<보안 그룹 ID> <보안 그룹 ID>
sg-name.projectcalico.org/openstack-<보안 그룹 이름> <보안 그룹 이름>

VM의 Calico 네임스페이스에 해당하는 레이블은 다음과 같아요.

레이블 이름 값
projectcalico.org/namespace <네임스페이스 이름>

/etc/neutron/neutron.conf에서 [calico] openstack_region을 구성했다면(멀티 리전 배포에서 권장하는 방식이에요) 네임스페이스는 "openstack-region-" 다음에 구성된 리전 이름이 붙어요. 그렇지 않으면 단순히 "openstack"이에요.

SECONDARY: Calico가 프로젝트 이름과 부모 ID 레이블을 제공하게 하려면 클러스터 안에서 Neutron에게 'admin' 역할을 부여해야 해요.

openstack role add --project service --user neutron admin

또는 Neutron 서버가 Keystone 데이터베이스를 admin 수준으로 조회할 수 있는 동등한 권한을 주면 돼요. Calico의 드라이버는 Neutron 서버의 일부로 동작하고, 이 레이블들의 정보를 얻으려면 Keystone 데이터베이스를 조회해야 하기 때문이에요. Neutron에 충분한 권한이 없으면 Calico는 해당 레이블을 생성하지 않는 쪽으로 폴백해요.

SECONDARY: Calico는 레이블 이름과 값에 특정 문자(영숫자, '-', '_', '.', '/')만 허용해요. 그래서 프로젝트나 보안 그룹 이름에 다른 문자가 들어 있으면 여기서는 '_'로 대체돼요. 길이 제한도 있어서 특히 긴 이름은 잘릴 수 있어요.

SECONDARY: Calico는 VM이 만들어진 이후에 그 VM과 연결된 주어진 ID의 프로젝트 이름이나 보안 그룹 이름을 바꾸는 것을 지원하지 않아요. 운영자는 혼란을 피하기 위해 VM 생성 이후에 특정 프로젝트 ID의 프로젝트 이름이나 특정 보안 그룹 ID의 보안 그룹 이름을 바꾸지 않는 것이 좋아요.

운영자 정책 구성하기

운영자 정책 구성에는 calicoctl 실행 파일이 필요해요. 아직 준비하지 않았다면 calicoctl을 설치하고 구성하세요.

  • OpenStack용 Calico 배포는 etcd 데이터스토어를 사용하므로, etcd 데이터스토어용 안내를 따르면 돼요.

  • etcd 엔드포인트 설정과, 배포가 사용한다면 TLS 자격 증명은 neutron.conf와 Felix 구성에 있는 것과 일치해야 해요.

예시

이제 OpenStack 보안 그룹에서 파생되는 정책보다 먼저 적용될 Calico 운영자 정책을 구성할 수 있어요. 예를 들어 "superman" 프로젝트와 "lexluthor" 프로젝트 사이의 어떤 통신도 막고 싶다면 다음을 구성할 수 있어요.

calicoctl apply -f - <<EOF
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'"
EOF

SECONDARY: Calico는 order 필드가 지정된 정책(여기처럼)을 OpenStack 보안 그룹에서 파생된 어떤 정책보다 먼저 적용해요.

더 알아보기 (Learn more)

운영자 정책은 order 필드가 있으면 보안 그룹 파생 정책보다 항상 먼저 평가된다는 점이 핵심이에요. 프로젝트 이름·ID, 보안 그룹 이름·ID에 대응하는 레이블 문법만 익히면 조합의 폭이 넓어져요. 레이블은 생성 후 이름 변경을 지원하지 않으니 처음부터 이름을 신중하게 지으세요.