0Pricing
Kubernetes Basics · 강의

격리를 위한 네트워크 정책

Kubernetes 네트워크 정책을 사용하여 파드와 네임스페이스 사이의 네트워크 트래픽 흐름을 제어하세요.

격리를 위한 네트워크 정책은(는) CoddyKit의 무료 Kubernetes Basics 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kubernetes Basics 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kubernetes Basics 강의에는 총 4개의 강의가 포함되어 있습니다.

네트워크 정책: 트래픽 교통경찰

Kubernetes에서는 기본적으로 Pod가 서로 자유롭게 통신할 수 있습니다. 유연성 측면에서는 좋지만 보안에 항상 적합한 것은 아닙니다.

네트워크 정책은 Pod의 방화벽처럼 작동하여 허용되는 네트워크 트래픽의 유입(ingress)과 유출(egress)을 제어합니다.

기본값: 모든 Pod가 통신 가능

기본적으로 Pod가 배포되면 namespace와 관계없이 클러스터의 다른 모든 Pod와 통신할 수 있습니다. 이 "평면 네트워크" 모델은 설정을 단순하게 해 주지만 격리 기능이 부족합니다.

프로덕션 환경에서는 보안을 강화하고 애플리케이션 구성 요소 간의 권한 없는 액세스를 방지하기 위해 통신을 제한해야 하는 경우가 많습니다.

Ingress 및 Egress 규칙

네트워크 정책은 Pod 간 통신을 허용하는 방식을 규칙으로 정의합니다. 주로 다음 두 가지 트래픽 유형을 다룹니다.

  • Ingress: Pod로 들어오는 트래픽입니다.
  • Egress: Pod에서 나가는 트래픽입니다.

이러한 규칙은 레이블을 사용하여 특정 Pod에 적용하며, 다른 Pod, namespace 또는 IP 블록을 대상으로 지정할 수 있습니다.

CNI 플러그인 요구 사항

네트워크 정책은 저절로 작동하지 않습니다! 네트워크 정책이 작동하려면 Kubernetes 클러스터에 이를 지원하는 컨테이너 네트워크 인터페이스(CNI) 플러그인이 있어야 합니다.

Calico, Cilium, Weave Net과 같은 인기 있는 CNI 플러그인이 이 기능을 제공합니다. 이를 지원하는 CNI가 없으면 네트워크 정책은 아무런 효과가 없습니다.

정책의 구조

네트워크 정책은 YAML을 사용하여 정의합니다. 주요 필드는 다음과 같습니다.

  • metadata.name: 정책의 고유한 이름입니다.
  • spec.podSelector: 이 정책을 적용할 Pod를 선택합니다.
  • spec.policyTypes: 정책을 Ingress, Egress 또는 둘 다에 적용할지 지정합니다.
  • spec.ingress/spec.egress: 허용되는 트래픽의 규칙을 나열합니다.

모든 수신 트래픽 차단

현재 namespace에서 app: backend 레이블이 있는 Pod로 들어오는 모든 트래픽을 거부하는 정책을 만들어 보겠습니다. 이는 "기본 거부" 보안 방식을 적용할 때 흔히 사용하는 시작점입니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-backend-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress: [] # An empty ingress list denies all incoming traffic

Frontend에서 Ingress 허용

이제 같은 namespace에서 app: frontend 레이블이 있는 Pod로부터 app: backend Pod로 들어오는 트래픽만 허용하도록 정책을 수정해 보겠습니다.

소스 Pod를 지정하는 from 섹션에 유의하십시오.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

나가는 트래픽 제어

Ingress와 마찬가지로 Egress(나가는) 트래픽도 제어할 수 있습니다. 여기서는 app: backend Pod가 app: database 레이블이 있는 Pod로만 나가는 요청을 보낼 수 있도록 허용하는 정책을 만듭니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-egress-to-db
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database

다른 namespace 대상 지정

Frontend가 web-apps와 같은 다른 namespace에 있다면 어떻게 해야 할까요? namespaceSelector를 사용하여 namespace를 가로질러 Pod를 대상으로 지정할 수 있습니다.

이 정책은 web-apps namespace의 모든 Pod에서 app: backend Pod로 들어오는 트래픽을 허용합니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-apps-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: web-apps
      podSelector: {} # All pods in the selected namespace

정책 문제

app: web 및 env: prod 레이블이 있는 Pod를 생각해 보십시오. monitoring namespace의 Pod에서 들어오는 트래픽만 허용하는 네트워크 정책은 무엇입니까?

복습: 네트워크 보호

잘하셨습니다! Kubernetes 네트워크 정책이 애플리케이션에 중요한 네트워크 격리를 제공하는 방식을 배웠습니다.

  • 네트워크 정책은 Pod의 방화벽처럼 작동합니다.
  • Ingress(들어오는) 트래픽과 Egress(나가는) 트래픽을 모두 제어합니다.
  • 이를 지원하는 CNI 플러그인이 필요합니다.
  • podSelector, policyTypes 및 규칙 정의를 포함한 YAML로 정의합니다.
  • 레이블을 사용해 Pod를 대상으로 지정하고 전체 namespace를 대상으로 지정할 수도 있습니다.

네트워크에도 "최소 권한" 모델을 적용하는 데 활용하십시오!

자주 묻는 질문

“격리를 위한 네트워크 정책” 강의는 무료인가요?

네 — “격리를 위한 네트워크 정책” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kubernetes Basics 강의 전체를 잠금 해제할 수 있습니다. Kubernetes Basics 강의에는 총 4개의 강의가 포함되어 있습니다.

“격리를 위한 네트워크 정책”에서 뭘 배우나요?

Kubernetes 네트워크 정책을 사용하여 파드와 네임스페이스 사이의 네트워크 트래픽 흐름을 제어하세요. 브라우저에서 직접 실행하는 실습 코드로 Kubernetes Basics을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kubernetes Basics을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kubernetes Basics은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“격리를 위한 네트워크 정책” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kubernetes Basics 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kubernetes Basics 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 역할 기반 액세스 제어(RBAC)
  2. 격리를 위한 네트워크 정책
  3. 파드 보안 표준
  4. 서비스 계정과 워크로드 ID
← Kubernetes Basics(으)로 돌아가기