정책에서 네임스페이스 규칙 사용하기
네임스페이스와 네임스페이스 셀렉터를 활용하면 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"'
추가 리소스
- 더 많은 네트워크 정책은 Network policy를 참고하세요
- 모든 네임스페이스에 정책을 적용하려면 Global network policy를 참고하세요
더 알아보기 (Learn more)
namespaceSelector를 쓰면 다른 네임스페이스의 파드까지 정책 범위에 넣을 수 있어요. Kubernetes RBAC와 결합하면 라벨을 붙일 수 있는 사람과 파드를 배포할 수 있는 사람을 분리해 더 안전한 설계가 됩니다.