Q8. 네트워크 폴리시의 네임스페이스 선택

네임스페이스 space1 & space2에 기존 파드들이 존재한다.


네임스페이스 space1 에 있는 모드 파드들이 네임스페이스 space2 의 파드들로만 외부로 향하는 트래픽을 보낼 수 있도록 제한하는 np라는 이름의 네트워크 폴리시가 필요하다.


또한 np 라는 이름으로 네임스페이스 space2 의 파드들이 space1 의 파드로부터 들어오는 트래픽만 받도록 설정해야한다.


네트워크 폴리시는 53포트의 DNS 트래픽과 TCP, UDP 트래픽을 허용해야 한다.



학습을 위해 네트워크 폴리시 에디터를 확인해보자.


네트워크 폴리시의 namespaceSelector는 네임스페이스 레이블로 작동한다. 따라서 네임스페이스들의 기존 레이블을 확인하자.

k get ns --show-labels



해결 방법 파트 1

첫번째 네트워크 폴리시를 생성하자.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np
  namespace: space1
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: space2
  - ports:
    - port: 53
      protocol: TCP
    - port: 53
      protocol: UDP



해결 방법 파트 2

두번째 NP를 생성해보자.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: np
  namespace: space2
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: space1



검증

# 아래가 작동해야 한다
k -n space1 exec app1-0 -- curl -m 1 microservice1.space2.svc.cluster.local
k -n space1 exec app1-0 -- curl -m 1 microservice2.space2.svc.cluster.local
k -n space1 exec app1-0 -- nslookup tester.default.svc.cluster.local
k -n kube-system exec -it validate-checker-pod -- curl -m 1 app.space1.svc.cluster.local

# 아래는 작동하지 않아야 한다
k -n space1 exec app1-0 -- curl -m 1 tester.default.svc.cluster.local
k -n kube-system exec -it validate-checker-pod -- curl -m 1 microservice1.space2.svc.cluster.local
k -n kube-system exec -it validate-checker-pod -- curl -m 1 microservice2.space2.svc.cluster.local
k -n run nginx --image=nginx:1.21.5-alpine --restart=Never -i --rm -- curl -m 1 microservice1.space2.svc.cluster.local