Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.33] 🚀 NetworkPolicy 편 #3 | Ingress & Egress 트래픽 필터링

ygtoken 2025. 3. 16. 17:48
728x90

 

쿠버네티스에서 NetworkPolicy는 Ingress(인바운드) 및 Egress(아웃바운드) 트래픽을 필터링하여 보안 및 네트워크 흐름을 제어하는 기능을 제공합니다.

이번 글에서는 특정 IP 주소만 허용하는 정책과 Ingress & Egress를 동시에 제한하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 특정 IP 주소에서만 접근을 허용하는 Ingress 정책 적용

2️⃣ Ingress & Egress를 동시에 제한하는 정책 설정

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ 특정 IP 주소에서만 접근을 허용하는 Ingress 정책 적용

 

❓ 문제 상황

 

운영팀에서 특정 애플리케이션 서비스가 오직 특정 IP에서만 접근 가능하도록 설정해야 하는 요구사항이 생겼습니다.

일반적으로 모든 Pod은 네트워크에서 접근 가능하지만, 보안 강화를 위해 지정된 IP에서만 접근할 수 있도록 제한해야 합니다.

ip-restricted-app이라는 Deployment를 생성해야 합니다.

ip-restricted-app Pod은 app=ip-restricted 레이블을 가져야 합니다.

192.168.1.100 IP에서만 접근 가능하고, 다른 IP의 접근은 차단해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. NetworkPolicy를 생성하여 ip-restricted-app이 특정 IP에서만 접근 가능하도록 제한해야 합니다.

podSelector를 사용하여 app=ip-restricted 레이블을 가진 Pod에 정책을 적용

Ingress 규칙을 추가하여 특정 CIDR 블록(예: 192.168.1.100/32)에서만 접근 허용

 

2. 정책이 적용된 후, 해당 IP 외부에서 접근이 차단되는지 확인해야 합니다.

 


✅ 정답 Manifest (Ingress 특정 IP 제한 NetworkPolicy 설정)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-specific-ip
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: ip-restricted  # 이 레이블이 있는 Pod에 정책 적용
  policyTypes:
  - Ingress  # 인바운드 트래픽 제어
  ingress:
  - from:
    - ipBlock:
        cidr: 192.168.1.100/32  # 특정 IP에서만 접근 허용

 

 


📌 적용 후 예상 결과 값

 

1. NetworkPolicy 적용 확인

kubectl get networkpolicy

 

💡 예상 출력 값

NAME                  POD-SELECTOR         AGE
allow-specific-ip     app=ip-restricted    5s

 

2. 허용된 IP에서 접속 테스트 (성공해야 함)

curl http://ip-restricted-app --interface 192.168.1.100

 

💡 예상 출력 값

<html>
<body>
<h1>Welcome to IP Restricted App</h1>
</body>
</html>

 

3. 허용되지 않은 IP에서 접속 테스트 (차단되어야 함)

curl http://ip-restricted-app --interface 192.168.1.200

 

💡 예상 출력 값

curl: (7) Failed to connect to ip-restricted-app port 80: Connection refused

 

 


2️⃣ Ingress & Egress를 동시에 제한하는 정책 설정

 

❓ 문제 상황

 

운영팀에서 특정 애플리케이션 서비스가 외부와의 모든 통신을 차단해야 하는 요구사항이 생겼습니다.

기본적으로 모든 Pod은 네트워크에서 자유롭게 통신할 수 있지만, 특정 보안 정책을 준수해야 하는 경우 Ingress와 Egress를 모두 차단해야 합니다.

isolated-app이라는 Deployment를 생성해야 합니다.

isolated-app Pod은 app=isolated 레이블을 가져야 합니다.

해당 Pod은 내부/외부 모든 네트워크 트래픽을 차단해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. NetworkPolicy를 생성하여 isolated-app의 모든 Ingress 및 Egress 트래픽을 차단해야 합니다.

podSelector를 사용하여 app=isolated 레이블을 가진 Pod에 정책을 적용

IngressEgress 정책을 추가하여 모든 네트워크 트래픽을 차단

 

2. 정책이 적용된 후, 해당 Pod이 외부 및 내부와의 통신이 차단되는지 확인해야 합니다.

 


✅ 정답 Manifest (Ingress & Egress 차단 NetworkPolicy 설정)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-all-traffic
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: isolated  # 이 레이블이 있는 Pod에 정책 적용
  policyTypes:
  - Ingress  # 인바운드 트래픽 차단
  - Egress  # 아웃바운드 트래픽 차단
  ingress: []  # 모든 Ingress 트래픽 차단
  egress: []  # 모든 Egress 트래픽 차단

 

 


📌 적용 후 예상 결과 값

1. NetworkPolicy 적용 확인

kubectl get networkpolicy

 

💡 예상 출력 값

NAME                 POD-SELECTOR      AGE
block-all-traffic   app=isolated      5s

 

2. 내부 서비스 접근 테스트 (차단되어야 함)

kubectl exec -it isolated-app -- wget -qO- http://internal-service.default.svc.cluster.local

 

💡 예상 출력 값

wget: download timed out

 

3. 외부 인터넷 접근 테스트 (차단되어야 함)

kubectl exec -it isolated-app -- wget -qO- http://example.com

 

💡 예상 출력 값

wget: download timed out

 

728x90