3장. 네트워크 정책


3.1. 네트워크 정책 생성

워크로드 간 트래픽을 제한하고 애플리케이션 보안을 개선하려면 클러스터에 대한 NetworkPolicy 오브젝트를 구성합니다. 네트워크 정책은 선택한 Pod에 대해 허용된 수신 및 송신 연결을 정의하고 네임스페이스 내에서 애플리케이션을 격리하는 데 도움이 됩니다.

개발자는 클러스터의 Pod로 트래픽을 제한하는 네트워크 정책을 정의할 수 있습니다.

3.1.1. 네트워크 정책 정의

워크로드 간 트래픽을 제어하고 네트워크 격리를 개선하려면 프로젝트에 대한 NetworkPolicy 오브젝트를 구성합니다. 네트워크 정책은 선택한 Pod에 대해 허용된 수신 및 송신 연결을 정의하고 클러스터의 애플리케이션을 보호하는 데 도움이 됩니다.

기본적으로 네트워크 정책 모드에서는 다른 Pod 및 네트워크 끝점에서 프로젝트의 모든 Pod에 액세스할 수 있습니다. 프로젝트에서 하나 이상의 Pod를 분리하기 위해 해당 프로젝트에서 NetworkPolicy 오브젝트를 생성하여 수신되는 연결을 표시할 수 있습니다. 프로젝트 관리자는 자신의 프로젝트 내에서 NetworkPolicy 오브젝트를 만들고 삭제할 수 있습니다.

중요

OpenShift Container Platform 4.22에서 OpenShift Container Platform에는 기본적으로 자체 네임스페이스 중 일부에 NetworkPolicy 오브젝트가 포함됩니다. 이러한 포함은 전반적인 보안이 향상되고 컨트롤 플레인 구성 요소를 더 잘 보호합니다. OpenShift Container Platform이 기본적으로 자체 네임스페이스에 포함하는 NetworkPolicy 오브젝트를 수정하지 마십시오. 기본적으로 오브젝트가 포함된 네임스페이스를 확인하려면 다음 명령을 실행합니다.

$ oc get networkpolicies --all-namespaces

OpenShift Container Platform 4.22 릴리스에는 이러한 오브젝트가 모든 OpenShift Container Platform 네임스페이스에 포함되어 있지 않습니다. 이후 OpenShift Container Platform 릴리스에는 추가 네임스페이스에 개체가 포함될 수 있습니다.

기본적으로 프로젝트의 모든 Pod는 모든 네트워크 끝점에서 액세스할 수 있습니다.

하나 이상의 NetworkPolicy 오브젝트에서 선택기와 Pod가 일치하면 Pod는 해당 NetworkPolicy 오브젝트 중 하나 이상에서 허용되는 연결만 허용합니다. NetworkPolicy 오브젝트가 선택하지 않은 Pod는 완전히 액세스할 수 있습니다.

3.1.1.1. 정책 추가 기능

NetworkPolicy 오브젝트는 추가 기능이므로 여러 NetworkPolicy 오브젝트를 결합하여 복잡한 네트워크 요구 사항을 충족할 수 있습니다.

예를 들어 동일한 프로젝트 내에서 allow-same-namespace 정책과 allow-http-and-https 정책을 모두 정의하는 경우 role=frontend 레이블이 있는 Pod는 두 정책에서 허용하는 모든 연결을 허용합니다.

즉, Pod에서 다음을 수락합니다.

  • 동일한 네임스페이스에 있는 Pod의 모든 포트 연결
  • 모든 네임스페이스의 Pod에서 포트 80443 에 대한 연결입니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-router
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          policy-group.network.openshift.io/ingress: ""
  podSelector: {}
  policyTypes:
  - Ingress

policy-group.network.openshift.io/ingress:" 레이블은 OVN-Kubernetes를 지원합니다.

클러스터 공격 면적을 줄이고 예측 가능한 네트워크 동작을 보장하기 위해 OpenShift Container Platform은 중요한 네트워킹 구성 요소에 최소 권한 네트워크 정책을 적용합니다.

클러스터 DNS 및 클러스터 Ingress를 관리하는 Operator는 해당 네임스페이스에서 기본 "deny-all" NetworkPolicy 오브젝트를 자동으로 설치하고 유지 관리합니다.

다음 네임스페이스의 대상 "허용" 정책을 사용하여 트래픽이 제어됩니다.

  • DNS 구성 요소 네임스페이스(openshift-dnsopenshift-dns-operator):

    • 송신은 API 서버 및 필수 DNS 포트로 제한됩니다.
    • Ingress는 필수 DNS 트래픽 및 메트릭으로 제한됩니다.
  • Ingress 구성 요소 네임스페이스(openshift-ingressopenshift-ingress-operator)

    • 송신은 API 서버, DNS 포트 및 경로 끝점으로 제한됩니다.
    • Ingress는 HTTP/HTTPS 트래픽 및 메트릭으로 제한됩니다.
중요

이러한 네임스페이스에서 관리되지 않는 Pod 또는 사용자 정의 Pod를 실행하지 마십시오. 이러한 네임스페이스는 기본 거부 모델에서 작동하므로 이러한 네임스페이스에서 실행되는 관리되지 않는 컨테이너에 대한 네트워크 트래픽이 차단됩니다.

OVN-Kubernetes 네트워크 정책을 최적화하여 흐름 수를 줄이고 필요한 경우 외부 IP 트래픽이 허용되는지 확인하는 방법을 알아봅니다.

네트워크 정책을 설계할 때 다음 지침을 참조하십시오.

  • spec.podSelector 사양이 동일한 네트워크 정책의 경우 수신 또는 송신 규칙의 하위 집합이 있는 여러 네트워크 정책보다 여러 수신 또는 송신 규칙이 있는 하나의 네트워크 정책을 사용하는 것이 더 효율적입니다.
  • podSelector 또는 namespaceSelector 사양을 기반으로 하는 모든 수신 또는 송신 규칙은 네트워크 정책에서 선택한 Pod 수 + 수신 또는 송신 규칙에서 선택한 Pod 수에 비례하여 OVS 흐름 수를 생성합니다. 따라서 모든 Pod에 대한 개별 규칙을 생성하는 대신 하나의 규칙에서 필요한 만큼 많은 Pod를 선택할 수 있는 podSelector 또는 namespaceSelector 사양을 사용하는 것이 좋습니다.

    예를 들어 다음 정책에는 다음 두 가지 규칙이 있습니다.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: test-network-policy
    spec:
      podSelector: {}
      ingress:
      - from:
        - podSelector:
            matchLabels:
              role: frontend
      - from:
        - podSelector:
            matchLabels:
              role: backend

    다음 정책은 동일한 두 규칙을 나타냅니다.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: test-network-policy
    spec:
      podSelector: {}
      ingress:
      - from:
        - podSelector:
            matchExpressions:
            - {key: role, operator: In, values: [frontend, backend]}

    동일한 지침이 spec.podSelector 사양에 적용됩니다. 다른 네트워크 정책에 대해 동일한 수신 또는 송신 규칙이 있는 경우 일반적인 spec.podSelector 사양을 사용하여 하나의 네트워크 정책을 생성하는 것이 더 효율적일 수 있습니다. 예를 들어 다음 두 정책에는 다른 규칙이 있습니다.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: policy1
    spec:
      podSelector:
        matchLabels:
          role: db
      ingress:
      - from:
        - podSelector:
            matchLabels:
              role: frontend
    ---
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: policy2
    spec:
      podSelector:
        matchLabels:
          role: client
      ingress:
      - from:
        - podSelector:
            matchLabels:
              role: frontend

    다음 네트워크 정책은 규칙과 동일한 두 규칙을 나타냅니다.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: policy3
    spec:
      podSelector:
        matchExpressions:
        - {key: role, operator: In, values: [db, client]}
      ingress:
      - from:
        - podSelector:
            matchLabels:
              role: frontend

    선택기가 여러 개만 표시된 경우 이 최적화를 적용할 수 있습니다. 선택기가 다른 레이블을 기반으로 하는 경우 이 최적화를 적용하지 못할 수 있습니다. 이러한 경우 특히 네트워크 정책 최적화를 위해 몇 가지 새로운 레이블을 적용하는 것이 좋습니다.

3.1.2.1. OVN-Kubernetes의 NetworkPolicy CR 및 외부 IP

OVN-Kubernetes에서 NetworkPolicy CR(사용자 정의 리소스)은 엄격한 격리 규칙을 적용합니다. 외부 IP를 사용하여 서비스가 노출되면 트래픽을 허용하도록 명시적으로 구성되지 않는 한 네트워크 정책에서 다른 네임스페이스의 액세스를 차단할 수 있습니다.

네임스페이스에서 외부 IP에 대한 액세스를 허용하려면 필요한 네임스페이스에서 수신을 명시적으로 허용하고 지정된 서비스 포트에 대한 트래픽을 허용하는 NetworkPolicy CR을 생성합니다. 필요한 포트에 대한 트래픽을 허용하지 않고 액세스는 계속 제한될 수 있습니다.

출력 예

  apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    annotations:
    name: <policy_name>
    namespace: openshift-ingress
  spec:
    ingress:
    - ports:
      - port: 80
        protocol: TCP
    - ports:
      - port: 443
        protocol: TCP
    - from:
      - namespaceSelector:
          matchLabels:
          kubernetes.io/metadata.name: <my_namespace>
    podSelector: {}
    policyTypes:
    - Ingress

다음과 같습니다.

<policy_name>
정책의 이름을 지정합니다.
<my_namespace>
정책이 배포된 네임스페이스의 이름을 지정합니다.

자세한 내용은 "네트워크 정책 정보"를 참조하십시오.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동