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

정책에서 네임스페이스 규칙 사용하기

원문 보기 위키 갱신

네임스페이스와 네임스페이스 셀렉터를 활용하면 Calico 정책이 특정 네임스페이스에만 적용되도록 만들 수 있어요. 이 문서에서는 다른 네임스페이스의 파드를 정책에서 참조하는 방법을 소개합니다. 아울러 Kubernetes RBAC로 네임스페이스 라벨 할당을 통제하는 방법도 함께 다뤄요.

출처: 문서

본문

큰 그림

Calico 네트워크 정책을 사용해 다른 네임스페이스의 파드를 참조할 수 있어요.

활용 가치

Kubernetes 네임스페이스를 활용하면 다양한 용도에 맞게 리소스를 묶거나 분리할 수 있어요. 예를 들어 개발, 프로덕션, QA 환경을 네임스페이스로 나누거나, 여러 팀이 같은 클러스터를 함께 쓰도록 허용할 수 있죠. Calico 네트워크 정책에서 네임스페이스 셀렉터를 사용하면 특정 네임스페이스의 파드와 주고받는 트래픽을 허용하거나 거부할 수 있습니다.

적용 방법

네임스페이스 안 엔드포인트와 주고받는 트래픽 제어하기

다음 예제에서는 namespace: production의 엔드포인트 중 라벨이 color: red인 것으로 들어오는(인그레스) 트래픽이 허용되는데, 같은 네임스페이스 안에서 color: blue인 파드로부터 오는 트래픽만, 그리고 port 6379로 한정돼요.

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-tcp-6379
  namespace: production
spec:
  selector: color == 'red'
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: color == 'blue'
      destination:
        ports:
          - 6379

다른 네임스페이스의 엔드포인트에서 들어오는 인그레스 트래픽을 허용하려면 정책 규칙에 namespaceSelector를 사용하세요. namespaceSelector는 네임스페이스에 붙은 라벨을 기준으로 하나 이상의 네임스페이스를 매칭해요. 다음 예제에서는 shape: circle 라벨이 붙은 네임스페이스 안에서 color: blue인 엔드포인트로부터의 인그레스 트래픽도 허용됩니다.

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-tcp-6379
  namespace: production
spec:
  selector: color == 'red'
  ingress:
    - action: Allow
      protocol: TCP
      source:
        selector: color == 'blue'
        namespaceSelector: shape == 'circle'
      destination:
        ports:
          - 6379

Kubernetes RBAC로 네임스페이스 라벨 할당 제어하기

네트워크 정책은 엔드포인트 자신의 라벨, 엔드포인트가 속한 네임스페이스의 라벨, 또는 엔드포인트의 서비스 어카운트 라벨을 매칭하는 셀렉터로 적용할 수 있어요. 엔드포인트의 네임스페이스를 기준으로 셀렉터를 적용하면 Kubernetes RBAC를 활용해 어떤 사용자가 네임스페이스에 라벨을 할당할 수 있는지 통제할 수 있습니다. 이렇게 하면 파드를 배포할 수 있는 그룹과 네임스페이스에 라벨을 할당할 수 있는 그룹을 분리할 수 있어요.

다음 예제에서는 개발 환경의 사용자가 environment == "development" 라벨이 붙은 네임스페이스의 파드와만 통신할 수 있어요.

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: restrict-development-access
spec:
  namespaceSelector: 'environment == "development"'
  ingress:
    - action: Allow
      source:
        namespaceSelector: 'environment == "development"'
  egress:
    - action: Allow
      destination:
        namespaceSelector: 'environment == "development"'

추가 리소스

더 알아보기 (Learn more)

namespaceSelector를 쓰면 다른 네임스페이스의 파드까지 정책 범위에 넣을 수 있어요. Kubernetes RBAC와 결합하면 라벨을 붙일 수 있는 사람과 파드를 배포할 수 있는 사람을 분리해 더 안전한 설계가 됩니다.