들어오는 트래픽을 허용하면, 허용된 트래픽에 대한 응답을 자동으로 허용하기 때문에 요청이 발생하는 방향만 고려하면 된다.
또한 Network Policy는 ingress, egress 규칙을 모두 가질 수 있다.
여러 경우
- 클러스터 내에 label은 같지만 namespace가 다른 포드가 여러 개 있는 경우
-> 모든 namespace에서 label이 일치하는 모든 포드의 연결이 허용된다. - 특정 namespace의 포드만 허용하고 싶은 경우
-> namespaceSelector를 사용한다. - podSelector가 없는 대신 namespaceSelector만 있는 경우
-> 설정된 namespace 내의 모든 포드와의 연결을 허용하며, 그 외의 포드는 허용하지 않는다. - 클러스터 외부에서 포드에 연결하고 싶은 경우
클러스터 내에 속하지 않기 때문에 selector는 동작하지 않는다. 따라서 특정 IP의 트래픽을 허용하도록 ipBlock을 사용한다.
apiVersion: networking.k8s.io/v1
kind: NetworkingPolicy
metadata:
name: db-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress: # 규칙 지정
- from: # 허용 트래픽 소스
- podSelector:
matchLabels:
name: api-pod
namespaceSelector:
matchLabels:
name: prod
ports:
- protocol: TCP
port: 3306
egress:
- to:
- ipBlock:
cidr: 192.168.5.10/32
ports:
- protocol: TCP
port: 80
yaml 파일 내용 상의 selector 3개는 단일 규칙으로 적용되거나 하나의 규칙의 일부로 적용된다.
from 항목 아래에서 하나의 -로 묶인 규칙은 AND처럼 모든 규칙을 만족해야 트래픽이 허용되며, -로 구분된 각각의 규칙은 OR처럼 동작한다.
따라서 요구사항을 기반으로 규칙을 어떻게 주어야 하는지 이해하는 것이 중요하다.