CKA SimA 15 NetworkPolicy

1 개요[ | ]

k8s NetworkPolicy 작성 예시
k8s 클러스터 내 보안 문제 해결을 위한 NetworkPolicy 작성 예시

2 사전 작업[ | ]

  • 테스트용 네임스페이스와 Pod 생성
k create ns project-alpha

k run web-0 -n project-alpha --image=nginx --labels=app=web
k run database-1 -n project-alpha --image=nginx --labels=app=db1
k run database-2 -n project-alpha --image=nginx --labels=app=db2
k run secrets-0 -n project-alpha --image=nginx --labels=app=secrets

3 초기 상태 확인[ | ]

  • Pod IP 및 라벨 확인
# k -n project-alpha get po -o wide -L app
NAME          READY   STATUS    RESTARTS   AGE   IP             APP
web-0         1/1     Running   0          1m    10.42.0.10     web
database-1    1/1     Running   0          1m    10.42.0.11     db1
database-2    1/1     Running   0          1m    10.42.0.12     db2
secrets-0     1/1     Running   0          1m    10.42.0.13     secrets

4 연결 테스트 (제한 없음)[ | ]

  • 아직 NetworkPolicy가 없어 모든 Pod에 접근 가능
# k -n project-alpha exec web-0 -- curl -s 10.42.0.11:1111
database one
# k -n project-alpha exec web-0 -- curl -s 10.42.0.12:2222
database two
# k -n project-alpha exec web-0 -- curl -s 10.42.0.13:3333
secret storage

5 NetworkPolicy 작성[ | ]

  • web 앱에서 db1, db2 앱으로만 특정 포트로 egress 허용
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-to-dbs
  namespace: project-alpha
spec:
  podSelector:
    matchLabels:
      app: web
  policyTypes:
    - Egress
  egress:
    - to:
        - podSelector:
            matchLabels:
              app: db1
      ports:
        - protocol: TCP
          port: 1111
    - to:
        - podSelector:
            matchLabels:
              app: db2
      ports:
        - protocol: TCP
          port: 2222
  • 정책 적용
# k apply -f /tmp/np-web-egress.yaml
networkpolicy.networking.k8s.io/allow-web-to-dbs created

6 적용 후 연결 테스트[ | ]

  • 허용된 포트는 정상 연결
# k -n project-alpha exec web-0 -- curl -s 10.42.0.11:1111
database one
# k -n project-alpha exec web-0 -- curl -s 10.42.0.12:2222
database two
  • 허용되지 않은 대상 및 포트는 연결 차단됨
# k -n project-alpha exec web-0 -- curl -s 10.42.0.13:3333
curl: (7) Failed to connect to 10.42.0.13 port 3333 after ...

7 관련 문서[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}