Deny(거부) 정책
Deny(거부) 정책
Cilium 1.9부터 기본으로 제공되는 Deny 정책이 파드로/파드로부터의 특정 트래픽을 어떻게 명시적으로 제한하는지 설명하는 문서예요. Allow 정책보다 우선한다는 점이 핵심이에요.
출처: Deny Policies
본문
Deny 정책은 Cilium 1.9부터 기본으로 제공·활성화되며, 파드로/파드로부터의 특정 트래픽을 명시적으로 제한할 수 있게 해 줘요.
Deny 정책은 Allow 정책보다 우선해요. 그것이 Cilium Network Policy든, Clusterwide Cilium Network Policy든, 심지어 Kubernetes Network Policy든 관계없이요.
"allow" 정책과 마찬가지로, 파드는 어떤 정책 하나가 이를 선택하는 즉시 default-deny 모드로 들어가요.
같은 파드에 여러 allow/deny 정책이 적용되면 다음 표는 해당 파드에 대해 기대되는 시행 결과를 보여줘요.
| 서버 파드에 배포된 Ingress 정책 집합 | ||||
|---|---|---|---|---|
| Allow 정책 | ||||
| Layer 7 (HTTP) | ✓ | ✓ | ✓ | ✓ |
| Layer 4 (80/TCP) | ✓ | ✓ | ✓ | ✓ |
| Layer 4 (81/TCP) | ✓ | ✓ | ✓ | ✓ |
| Layer 3 (Pod: Client) | ✓ | ✓ | ✓ | ✓ |
| Deny 정책 | ||||
| Layer 4 (80/TCP) | ✓ | ✓ | ✓ | |
| Layer 3 (Pod: Client) | ✓ | ✓ | ||
| 트래픽 연결 결과 (허용/거부) | ||||
Client → Server curl server:81 |
Allowed | Allowed | Denied | Denied |
curl server:80 |
Allowed | Denied | Denied | Denied |
ping server |
Allowed | Allowed | Denied | Denied |
위 표의 두 번째 열을 고른다면, 맨 아래 부분은 클라이언트와 서버 사이에서 curl 또는 ping 트래픽을 선택하는 정책의 전달 동작을 보여줘요.
- 81 포트로의 curl은 허용돼요. 81 포트에 allow 정책이 있고 해당 포트에 deny 정책이 없기 때문이에요.
- 80 포트로의 curl은 거부돼요. 해당 포트에 deny 정책이 있기 때문이에요.
- 서버로의 ping은 허용돼요. Layer 3 allow 정책이 있고 deny가 없기 때문이에요.
다음 정책은 해당 클러스터에서 Cilium이 관리하는 모든 네임스페이스의 모든 파드에 "world"로부터의 ingress를 거부해요. 이 정책은 "world"를 제외한 모든 곳에서 오는 트래픽을 허용하고 있으므로, 기존의 클러스터 내부 간 정책은 여전히 허용돼요.
apiVersion: "cilium.io/v2"
kind: CiliumClusterwideNetworkPolicy
metadata:
name: "external-lockdown"
spec:
endpointSelector: {}
ingressDeny:
- fromEntities:
- "world"
ingress:
- fromEntities:
- "all"
Deny 정책이 지원하지 않는 것은 다음과 같아요. L7에서의 정책 시행, 즉 URL을 구체적으로 거부하는 것과 toFQDNs, 즉 특정 도메인 이름으로의 트래픽을 구체적으로 거부하는 것이에요.