티스토리 뷰

1. 문제#1 Pod간 통신 제한 

1) 문제 시나리오

(1) Deployment 생성 

- frontend와 backend Deployment를 생성 

- fronend 2개의 레플리카, backend 1개의 레플리카를 실행 

(2) NetworkPolicy생성

- frontend Pod만 backend Pod와 통신할 수 있도록 NetworkPolicy를 구성 

- 다른 Pod는 backend와 통신할 수 없어야 한다. 

(3) 결과확인

- frontend Pod에서 backend Pod로 요청이 성공적으로 전달되는지 확인 

- 다른 Pod(별도의 테스트용 Pod)에서 backend로 요청이 차단되는지 확인 

2) 해결과정 

(1) Deployment YAML 작성 

- frontend deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

- backend deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

(2) Deployment 생성

kubectl apply -f frontend-deployment.yaml
kubectl apply -f backend-deployment.yaml

(3) NetworkPolicy YAML 작성 

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: allow-frontend-to-backend
spec:
 podSelector:
  matchLabels:
   app: backend # backend Pod에 대한 정책 적용 
 ingress:
 - from:
   - podSelector:
      matchLabels:
       app: frontend #frontend Pod에만 ingree 허용 
   ports: 
   - protocol: TCP
     port: 80

(4) NetPol 생성

kubectl apply -f allow-frontend-to-backend.yaml

(5) frontend->backend요청 테스트 

kubectl exec <frontend-pod-name> -- curl http://<backend-service-name>

<!DOCTYPE html>
<html>
<head><title>Welcome to nginx!</title></head>
...
</html>

(6) 다른 Pod-> backend요청테스트 

kubectl run test-pod --image=busybox --restart=Never -- sh -c "sleep 3600"
kubectl exec test-pod -- curl http://<backend-service-name>

#요청 실패 
curl: (7) Failed to connect to <backend-service-name> port 80 after X ms.

2. 문제#2 외부트래픽 허용 

1) 문제시나리오

(1) NetPol 생성 

- 특정 CIDR범위(192.168.0.0/16)에서 오는 트래픽만 허용하도록 NetPol 구성 

- 이 정책은 모든 Pod에 적용

(2) 결과 확인 

- CIDR 범위내에서 요청이 성공적으로 전달되는지, CIDR범위 외부에서 요청이 차단되는지 확인 

2) 해결과정

(1) YAML 작성 

#allow-external-cidr.yaml
apiVersion: networking.k8s.io/v1
kind:NetworkPolicy
metadata:
 name: allow-external-cidr
 spec: 
  podSelector: {} #네임스페이스 내 모든 Pod에 적용 
  ingress:
  - from:
   - ipBlock:
      cidr: 192.168.0.0/16 # 특정 CIDR범위만 허용 
    ports: 
    - protocol: TCP
      port: 80

(2) NetPol 생성 

kubectl apply -f allow-external-cidr.yaml

(3) CIDR 범위내 요청 테스트 

curl http://<pod-ip>:80 --interface <192.168.x.x>

(4) CIDR 범위 외 요청 테스트

curl http://<pod-ip>:80 --interface <10.x.x.x>

#출력 예시 curl: (7) Failed to connect to <pod-ip> port 80 after X ms.

3. 문제#3 기본 Deny 정책 

1) 문제시나리오 

(1) NetPol 생성 

- 네임스페이스 내 모든 Pod 간 통신을 차단하는 기본 Deny 정책을 생성 

- 특정 레이블('app=allowed')을 가진 Pod간의 통신만 허용하는 추가 NetPol을 생성 

(2) 결과확인

- 모든 Pod간 통신이 차단되었는지 확인, 레이블이 일치하는 Pod간 통신이 허용되는지 확인 

2) 해결과정 

1) 기본 Deny 정책 YAML 작성 

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {} # 네임스페이스 내 모든 Pod에 적용 (기본 Deny)
  policyTypes:
  - Ingress # 들어오는 트래픽 차단
  - Egress  # 나가는 트래픽 차단

2) 기본 Deny 정책 생성 

kubectl apply -f default-deny.yaml

3) 특정 Pod 간 통신 허용 정책 작성 

#allow-speicific-pods.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
 name: allow-specific-pods
spec:
 podSelector:
  matchLabels:
   app: allowed # 특정 레이블을 가진 Pod에만 적용 
 ingress:
 - from:
  - podSelector:
     matchLabels:
      app: allowed #동일한레이블d을 가진 Pod끼리 트래픽 허용
   ports:
   - protocol: TCP
     port: 80

4)허용정책 생성

kubectl apply -f allow-specific-pods.yaml

5) 모든 통신 차단 확인

kubectl run test-pod --image=busybox --restart=Never -- sh -c "sleep 3600"
kubectl exec test-pod -- curl http://<allowed-pod-ip>

6) 특정 레이블을 가진 Pod 간 통신 확인 

kubectl run test-pod2 --labels app=allowed --image nginx --restart=Never -- sh -c "sleep 3600"
kubectl exec test-pod2 -- curl http://<allowed-pod-ip>

<!DOCTYPE html>
<html>
<head><title>Welcome to nginx!</title></head>
...
</html>

'쿠버네티스' 카테고리의 다른 글

CKA 기출문제 정리 CoreDNS 및 DNS 확인  (0) 2025.01.02
CKA 기출문제 정리 external name  (0) 2025.01.02
CKA 기출문제 LoadBalancer  (0) 2025.01.01
CKA 기출 문제 데몬셋  (0) 2025.01.01
CKA 기출문제 정리 HPA  (0) 2025.01.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함