
Egress All Deny - 나가는 문(Egress)을 모두 잠그기화이트리스트 전략이 필수임DNS 허용 (Essential) - 이름(DNS)을 찾는 통로만 개방CoreDNS 와의 통신이 반드시 필요함[UDP/TCP 53] 만 개방하는 것이 핵심특정 외부망 허용 - 신뢰할 수 있는 통로만 선별📌 Ingress & Egress 란?
Ingress: 안으로 들어오는 길
- 클러스터 외부에서 내부의 서비스(파드)로
들어오는 트래픽을 의미[Ingress Policy]
- 어떤 외부 IP가 우리 서버에 접속할 수 있는지 제어
- 특정 포트만 열어두고 나머지는 닫는 설정을 함
- 설정 예시
- NodePort, LoadBalancer, Ingress
Egress: 밖으로 나가는 길
- 클러스터 내부의 파드에서 외부(다른 노드, 다른 네임스페이스, 혹은 인터넷)로
나가는 트래픽을 의미[Egress Policy]
- Zero-Trust 의 핵심: 허락 없이 외부로 데이터를 보내는 것을 막음
- 기본적으로 모든 출구를 막고(All Deny), 꼭 필요한 통로만 열어줌
- 설정 예시
- NetworkPolicy (Egress rule)
Egress 의 중요 포인트
- 공격자의 경로 차단
- 내부 전파 방지(Lateral Movement)
- 네트워크 비용 및 리소스 낭비 방지
tenant-alpha 내의 모든 파드가 오직 DNS 만 가능하고 나머지는 모두 차단되도록 설정apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns-and-deny-egress
namespace: tenant-alpha
spec:
podSelector: {} # 테넌트 내 모든 파드에 적용
policyTypes:
- Egress
egress:
# 1. 클러스터 내부 DNS(CoreDNS) 통신 허용
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
kubectl apply -f tenant-egress-policy.yaml
시나리오: tenant-alpha 내부 파드에서 8.8.8.8 로 직접 통신을 시도
kubectl exec local-tester -n tenant-alpha -- nc -zv 8.8.8.8 53 -w 2

nc: 8.8.8.8 (8.8.8.8:53): Connection timed out 출력시나리오: 외부 서버의 IP는 몰라도 DNS lookup은 성공해야 함
kubectl exec local-tester -n tenant-alpha -- nslookup google.com
