728x90
✅ 목표: Cilium의 L7(애플리케이션 레벨) 네트워크 정책을 사용해
특정 파드가 MinIO에 보낼 수 있는 HTTP 요청 메서드(GET, PUT 등) 를 제한하는 방법을 실습합니다.
🔎 이번 글에서 수행할 작업 요약
- L7 레벨에서 HTTP 메서드 제한이 필요한 상황 이해
- Cilium L7 HTTP 정책 구성 및 적용
- 접근 허용/차단 결과를 테스트 파드를 통해 확인
- 로그 기반 검증을 통해 정책 효과 확인
📘 1단계: L7 HTTP 메서드 제한 필요성 이해
이 단계의 목적: 단순한 IP/포트 제어가 아닌, HTTP 요청의 종류(GET, PUT, DELETE 등)를
제어해야 하는 이유와 L7 정책이 필요한 상황을 이해합니다.
- 예시 상황:
- 분석 파드는 GET으로만 조회해야 함
- 업로드 권한이 있는 파드는 PUT을 허용해야 함
- 삭제 요청(DELETE)은 관리자 파드에서만 허용해야 함
☑️ 이러한 요청 유형별 제어는 L7(애플리케이션 계층) 정책을 통해 구현할 수 있습니다.
⚙️ 2단계: Cilium L7 정책 구성 및 배포
이 단계의 목적: GET 메서드만 허용하는 Cilium L7 정책을 작성하고
특정 네임스페이스 파드에 적용하여 정책 기반 접근 제어를 구성합니다.
# l7-get-only-policy.yaml
apiVersion: "cilium.io/v2" # Cilium Network Policy의 API 버전
kind: CiliumNetworkPolicy # 리소스 종류는 CiliumNetworkPolicy
metadata:
name: allow-only-get # 정책 이름 (고유해야 함)
namespace: etl # 이 정책을 적용할 네임스페이스 지정
spec:
endpointSelector: {} # etl 네임스페이스 내 모든 파드를 대상으로 적용
egress: # egress(외부로 나가는 요청)에 대한 제어 설정
- toEndpoints:
- matchLabels:
app.kubernetes.io/name: minio # 목적지가 MinIO 서비스인 경우만 해당
toPorts:
- ports:
- port: "9000" # MinIO 서비스 포트
protocol: TCP # TCP 프로토콜로 통신
rules:
http: # HTTP 레벨(L7) 정책 정의
- method: "GET" # GET 메서드만 허용, 다른 메서드는 차단됨
# 위 정책 파일 적용
kubectl apply -f l7-get-only-policy.yaml
🧪 3단계: 접근 테스트 (허용 및 차단 확인)
이 단계의 목적: GET 요청은 허용되고, PUT 요청은 차단되는지 실제로 테스트하여
L7 정책이 의도대로 작동하는지 검증합니다.
# ✅ GET 요청 테스트 (허용되어야 함)
kubectl exec -it test-client -n etl -- \
curl -I http://minio.minio.svc.cluster.local:9000
# -I 옵션은 HTTP 헤더만 요청 (HEAD 요청과 유사) → 메서드 제어 확인용
# ❌ PUT 요청 테스트 (차단되어야 함)
kubectl exec -it test-client -n etl -- \
curl -X PUT http://minio.minio.svc.cluster.local:9000/test.txt -d "test-data"
# -X PUT: PUT 메서드 사용
# -d "test-data": 업로드할 바디 데이터 포함
# 응답이 timeout, 403, 000 등의 결과일 경우 차단됨
🔍 4단계: 로그 기반 정책 효과 확인
이 단계의 목적: Hubble 또는 Cilium CLI를 사용해 L7 정책이 적용된 요청의 흐름을 추적하고,
실제로 DROP 또는 FORWARDED로 처리되는지 확인합니다.
# Cilium Monitor로 Drop된 요청 확인
cilium monitor -n etl | grep DROP
# DROP 로그가 출력되면 정책에 의해 요청이 차단된 것
# Hubble CLI를 통한 흐름 시각화
hubble observe --namespace etl --protocol http
# etl 네임스페이스에서 발생한 HTTP 요청 흐름을 실시간 확인 가능
📎 요약 및 핵심 정리
- Cilium의 L7 정책을 사용해 HTTP 요청 메서드(GET, PUT 등)를 세밀하게 제어할 수 있음을 실습을 통해 확인함
- endpointSelector: {}를 사용하여 네임스페이스 전체 파드를 대상으로 설정할 수 있었음
- toEndpoints, toPorts, rules.http.method 구문을 통해 목적지와 요청 유형을 명확하게 지정함
- 허용된 GET 요청과 차단된 PUT 요청을 비교 테스트하고, Hubble로 흐름 추적까지 수행함
728x90