NetworkPolicy 기본 설정
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 80
정책의 주요 내용
- podSelector: 이 네트워크 정책이 적용될 파드를 지정합니다. 이 설정에서는 role: db라는 라벨이 붙은 모든 파드에 정책을 적용합니다. 즉, 이 정책은 데이터베이스 역할을 하는 파드를 보호하는 역할을 합니다.
- policyTypes: 정책이 적용될 트래픽의 방향을 지정합니다.
- Ingress: 외부에서 파드로 들어오는 트래픽에 대한 규칙을 정의합니다.
- Egress: 파드에서 외부로 나가는 트래픽에 대한 규칙을 정의합니다. 이 설정에서는 인그레스(Ingress)와 이그레스(Egress) 규칙을 모두 정의하고 있습니다. 하지만 YAML 파일에 이그레스(Egress) 규칙이 명시되어 있지 않으므로, 이 정책이 적용되는 파드에서는 외부로의 모든 트래픽이 차단됩니다.
- ingress: role: db 파드로 들어오는 트래픽에 대한 허용 규칙을 정의합니다.
- from: 어떤 소스로부터의 트래픽을 허용할지 지정합니다. 여기서는 두 가지 소스를 허용하고 있습니다.
- namespaceSelector: project: myproject 라벨이 붙은 모든 네임스페이스의 파드로부터의 접근을 허용합니다.
- podSelector: 현재 네임스페이스(default) 내에서 role: frontend 라벨이 붙은 모든 파드로부터의 접근을 허용합니다. 즉, 이 데이터베이스 파드에는 myproject라는 프로젝트 라벨이 붙은 네임스페이스의 파드와, default 네임스페이스에 있는 frontend 파드만 접근할 수 있습니다.
- ports: 허용되는 포트와 프로토콜을 지정합니다. 여기서는 TCP 프로토콜을 사용하는 80번 포트로 들어오는 트래픽만 허용하고 있습니다.
- 참고: 보통 데이터베이스는 3306(MySQL), 5432(PostgreSQL) 등 다른 포트를 사용
- from: 어떤 소스로부터의 트래픽을 허용할지 지정합니다. 여기서는 두 가지 소스를 허용하고 있습니다.
[샘플1] 모든 인그레스 트래픽 차단 정책
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
정책의 주요 내용
- podSelector: {}: 이 부분이 가장 중요합니다. 비어 있는 {}는 '모든 파드'를 의미합니다. 즉, 이 정책이 적용되는 네임스페이스의 모든 파드에 대해 규칙을 적용하겠다는 뜻입니다. 만약 네임스페이스가 명시되지 않았다면, 이 정책을 배포하는 네임스페이스의 모든 파드에 적용됩니다.
- policyTypes: 정책이 적용될 트래픽의 방향을 지정합니다.
- Ingress: 외부에서 파드로 들어오는 트래픽에 대한 규칙을 정의합니다.
- 이 설정은 Ingress만 명시하고 있으며, 인그레스 규칙을 구체적으로 정의하는 ingress: 섹션이 없습니다.
요약
- 들어오는 트래픽(Ingress):
- ingress 규칙이 명시되어 있지 않습니다.
- policyTypes에 Ingress가 포함되어 있고 ingress 규칙이 없으면, 이는 **'모든 인그레스 트래픽을 거부한다'**는 의미로 해석됩니다.
- 따라서 이 정책이 적용되는 네임스페이스의 모든 파드는 외부로부터의 모든 네트워크 접근이 차단됩니다.
- 나가는 트래픽(Egress):
- Egress 정책 타입이 명시되지 않았으므로, 나가는 트래픽에는 아무런 제약이 없습니다. 모든 파드는 외부로 자유롭게 통신할 수 있습니다.
[샘플2] 모든 인그레스 트래픽 허용 정책
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-ingress
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
정책의 주요 내용
- podSelector: {}: 이 정책이 적용될 파드를 지정합니다. 비어 있는 {}는 '모든 파드'를 의미합니다. 이 정책이 배포되는 네임스페이스에 있는 모든 파드에 규칙이 적용됩니다.
- ingress: - {}: 이 부분이 핵심입니다. 비어 있는 ingress 규칙은 **모든 소스(from)**와 **모든 포트(ports)**에 대해 인그레스 트래픽을 허용하겠다는 의미입니다.
- policyTypes: - Ingress: 이 정책이 **들어오는 트래픽(Ingress)**에 대한 규칙만 정의하고 있음을 나타냅니다.
요약
- 들어오는 트래픽(Ingress):
- ingress: - {}는 모든 외부 소스로부터 모든 포트로 들어오는 트래픽을 허용합니다.
- 이 정책은 마치 방화벽의 모든 문을 활짝 열어주는 것과 같습니다.
- 나가는 트래픽(Egress):
- Egress 정책 타입이 명시되지 않았습니다.
- 따라서 파드에서 외부로 나가는 트래픽에는 아무런 제약이 없습니다. 모든 파드는 외부로 자유롭게 통신할 수 있습니다.
https://kubernetes.io/docs/concepts/services-networking/network-policies/
Network Policies
If you want to control traffic flow at the IP address or port level (OSI layer 3 or 4), NetworkPolicies allow you to specify rules for traffic flow within your cluster, and also between Pods and the outside world. Your cluster must use a network plugin tha
kubernetes.io
'k8s > CKS' 카테고리의 다른 글
[CKS] Pod Security Standards (1) | 2025.09.07 |
---|---|
[CKS] falco 사용방법 및 샘플 - 2 (0) | 2025.09.07 |
[CKS] falco 사용방법 및 샘플 - 1 (0) | 2025.09.07 |
[CKS] Admission Control in Kubernetes - ImagePolicyWebhook (0) | 2025.09.07 |
[CKS] ServiceAccount 생성 및 Pod 적용 (0) | 2025.09.07 |