[kubernetes] 네트워크 정책 (NetworkPolicy)

vinca·2023년 12월 18일
0

☸️ kubernetes

목록 보기
32/35
post-thumbnail
post-custom-banner

NetworkPolicy

Kubernetes의 네트워크 정책(NetworkPolicy)은 클러스터 내 파드와 파드 또는 파드와 외부 리소스 간의 네트워크 트래픽을 허용 또는 제한하는 정책이다.

이러한 정책은 크게 인그레스와 이그레스로 나뉘게 되는데, 쉽게 말해서 들어오는 트래픽은 🔜인그레스로 검증하고, 나가는 트래픽은 🔙이그레스로 검증한다.

인그레스와 이그레스

🔙 이그레스(나가는 방향)

ME 파드의 입장에서 다른 파드로 요청을 보낼 때(나갈 때) "대상 파드가 이그레스 규칙에 허용되는가" 를 확인한다.

🔜 인그레스(들어오는 방향)

ME 파드로 요청이 들어올 때 "요청을 보낸 파드가 인그레스 규칙에 허용 되는가"를 확인한다.

레이블 선택자를 사용하여 대상 파드를 지정하고 레이블, 파드 IP, 네임스페이스를 통해서 규칙을 정의할 수 있다.

그럼 3가지를 모두 살펴보도록 하자.✨

실습

전체 네트워크 트래픽 차단

role: sensitive 레이블을 가진 파드에 대해서 모든 네트워크 트래픽을 차단해 보자.

위 코드와 같이 인그레스와 이그레스를 선언만 해놓고, 아무런 규칙을 정의하지 않게되면 기본적으로 모든 행위가 차단된다. (최소 권한 원칙)

특정 레이블을 가진 파드만을 허용

role: internal 레이블 가진 파드에 대해서 app: chk-info를 가진 파드들 만이 통신이 가능하도록 한다.

  • role: internal을 가지고 네트워크 정책이 적용된 파드
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    role: internal
  name: deploy-podselector-int-vinca
spec:
  replicas: 1
  selector:
    matchLabels:
      role: internal
  template:
    metadata:
      labels:
        role: internal
    spec:
      containers:
      - image: sysnet4admin/chk-info
        name: chk-info
  • app: chk-info를 가진 파드
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: chk-info
  name: deploy-podselector-int-only
spec:
  replicas: 3
  selector:
    matchLabels:
      app: chk-info
  template:
    metadata:
      labels:
        app: chk-info
    spec:
      containers:
      - image: sysnet4admin/chk-info
        name: chk-info

IP 단위로 테스트

PodSelector: {}를 통해서 전체 파드에 대해서 인그레스와 이그레스를 적용한다.

이 때 ipBlock을 통해서 허용되는 범위를 cidr를 통해서 지정하면, 해당 ip 범위 내에 들어가는 파드만을 인그레스와 이그레스를 허용해 준다.

  • IP 단위로 테스트2 (주석 부분) - except
    허용되는 범위 내에 예외(except)를 둘 수도 있다.
    예외 처리된 ip는 인그레스에 있으므로, 모든 파드에 접근할 수 없게 된다.

네임스페이스 단위로 사용

⚠ 이번에는 네트워크 정책을 dev2 네임스페이스에 지정하였다.

PodSelector: {}를 통해서 dev2 네임스페이스의 전체 파드에 대해서 인그레스와 이그레스를 적용한다.

이를 통해 dev2 네임스페이스를 가진 파드만이 dev2 네임스페이스의 다른 파드로 접근할 수 있다.

이그레스(자신이 다른 파드로 나가는 것)은 모두 허용되어 있다.

dev2 네임스페이스에 다음과 같이 파드를 배포해주자.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: chk-info
  name: deploy-namespaceselector-dev2
  namespace: dev2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: chk-info
  template:
    metadata:
      labels:
        app: chk-info
    spec:
      containers:
      - image: sysnet4admin/chk-info
        name: chk-info

dev2 네임스페이스에 속한 파드만이 dev2 네임스페이스의 다른 파드에 접근할 수 있다.

네트워크 정책 내 dev2 네임스페이스의 이그레스에 대한 권한은 전부 열려있으므로 다른 네임스페이스에 접근할 수 있다.

Reference

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps
post-custom-banner

0개의 댓글