Kubernetes/Udemy - CKAD with Tests

Developing Network Policy

비번변경 2021. 8. 19. 23:20

들어오는 트래픽을 허용하면, 허용된 트래픽에 대한 응답을 자동으로 허용하기 때문에 요청이 발생하는 방향만 고려하면 된다.

또한 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처럼 동작한다.

따라서 요구사항을 기반으로 규칙을 어떻게 주어야 하는지 이해하는 것이 중요하다.