네트워크 보안


OpenShift Dedicated 4

OpenShift Dedicated에서 네트워크 트래픽 보안 및 네트워크 정책 적용

Red Hat OpenShift Documentation Team

초록

이 문서에서는 OpenShift Dedicated에서 네트워크 정책 및 송신 방화벽과 같은 네트워크 보안 기능을 구현하고 관리하는 방법을 설명합니다.

1장. 네트워크 정책 API 이해

네트워크 정책은 클러스터 범위 및 네임스페이스 범위 네트워크 정책 API를 모두 사용하여 정의됩니다. 이러한 다양한 수준에서 네트워크 정책을 정의하면 완전한 다중 테넌트 격리를 포함하여 클러스터에 대한 정교한 네트워크 보안 구성을 만들 수 있습니다.

1.1. 네트워크 정책 및 범위

클러스터 범위 네트워크 정책

클러스터 및 네트워크 관리자는 AdminNetworkPolicy를 사용하여 클러스터 수준에서 네트워크 정책을 정의할 수 있습니다. AdminNetworkPolicy 기능은 AdminNetworkPolicy API 및 Baseline AdminNetworkPolicy API의 두 API로 구성됩니다. 이러한 API는 전체 클러스터에 적용하거나 네임스페이스 범위 NetworkPolicy 에 위임할 수 있는 규칙을 설정하는 데 사용됩니다.

AdminNetworkPolicy API를 사용하여 정의된 정책은 "Allow" 또는 "Deny"로 설정할 때 다른 모든 정책 유형보다 우선합니다. 그러나 관리자는 "Pass"를 사용하여 지정된 정책에 대한 책임을 네임스페이스 범위 NetworkPolicy 에 위임하여 애플리케이션 개발자 및 네임스페이스 테넌트가 프로젝트의 네트워크 보안의 특정 측면을 제어할 수 있습니다.

BaselineAdminNetworkPolicy API를 사용하여 정의된 정책은 다른 네트워크 정책에서 재정의하지 않는 경우에만 적용됩니다. AdminNetworkPolicy API를 사용하여 네트워크 정책의 측면을 네임스페이스 범위 NetworkPolicy 에 위임하는 경우 BaselineAdminNetworkPolicy 에서 합리적인 최소 제한도 정의해야 합니다. 이렇게 하면 네임스페이스에 대한 NetworkPolicy 가 충분한 보호를 제공하지 않는 경우 클러스터 수준에서 기본 네트워크 보안 수준이 보장됩니다.

네임스페이스 범위 네트워크 정책
애플리케이션 개발자 및 네임스페이스 테넌트는 NetworkPolicy API를 사용하여 특정 네임스페이스에 대한 네트워크 정책 규칙을 정의할 수 있습니다. 네임스페이스에 대한 NetworkPolicy 의 규칙은 Baseline AdminNetworkPolicy API를 사용하여 구성된 클러스터 전체 규칙 또는 클러스터 전체 AdminNetworkPolicy API에서 위임 또는 "passed"된 클러스터 전체 규칙보다 우선합니다.

1.2. 네트워크 정책을 평가하고 적용하는 방법

네트워크 연결이 설정되면 네트워크 공급자(기본값: OVN-Kubernetes)에서 네트워크 정책 규칙에 대한 연결 세부 정보를 확인하여 연결을 처리하는 방법을 결정합니다.

OVN-Kubernetes는 다음과 같은 순서로 네트워크 정책 오브젝트에 대한 연결을 평가합니다.

  1. AdminNetworkPolicy 계층에서 일치 항목이 있는지 확인합니다.

    1. 연결이 허용 또는 거부 규칙과 일치하는 경우 해당 규칙을 따르고 평가를 중지합니다.
    2. 연결이 Pass 규칙과 일치하는 경우 NetworkPolicy 계층으로 이동합니다.
  2. NetworkPolicy 계층에서 일치 항목을 확인합니다.

    1. 연결이 규칙과 일치하는 경우 해당 규칙을 따르고 평가를 중지합니다.
    2. 일치하는 항목이 없는 경우 BaselineAdminNetworkPolicy 계층으로 이동합니다.
  3. BaselineAdminNetworkPolicy 계층에서 일치하는 규칙을 따릅니다.

그림 1.1. OVN-Kubernetes의 네트워크 정책 평가

1.3. AdminNetworkPolicy와 NetworkPolicy 사용자 정의 리소스의 주요 차이점

다음 표에서는 클러스터 범위 AdminNetworkPolicy API와 네임스페이스 범위 NetworkPolicy API 간의 주요 차이점을 설명합니다.

Expand
정책 요소AdminNetworkPolicyNetworkPolicy

적용 가능한 사용자

클러스터 관리자 또는 이에 상응하는

네임스페이스 소유자

범위

Cluster

네임스페이스

트래픽 드롭

명시적 거부 작업 세트에서 규칙으로 지원됩니다.

정책 생성 시 암시적 거부 격리를 통해 지원됩니다.

트래픽 위임

규칙으로 Pass 작업 세트에서 지원됩니다.

해당 없음

트래픽 허용

명시적 허용 작업 세트를 규칙으로 사용하여 지원됩니다.

모든 규칙에 대한 기본 작업은 허용하는 것입니다.

정책 내에서 규칙 우선순위

ANP 내에 표시되는 순서에 따라 달라집니다. 규칙의 위치가 높을수록 우선순위가 높습니다.

규칙이 추가됩니다.

정책 우선순위

ANPs 중 우선순위 필드는 평가 순서를 설정합니다. 정책 우선 순위가 높은 우선 순위 번호가 적습니다.

정책 간에는 정책 순서가 없습니다.

기능 우선 순위

계층 1 ACL 및 BANP를 통해 먼저 평가되는 것은 계층 3 ACL을 통해 마지막으로 평가됩니다.

ANP 및 BANP 전에 시행되며 ACL의 계층 2에서 평가됩니다.

Pod 선택 일치

네임스페이스에 다른 규칙을 적용할 수 있습니다.

단일 네임스페이스의 Pod에 다른 규칙을 적용할 수 있습니다.

클러스터 송신 트래픽

노드네트워크 피어를 통해 지원

허용되는 CIDR 구문과 함께 ipBlock 필드를 통해 지원됩니다.

클러스터 인그레스 트래픽

지원되지 않습니다.

지원되지 않습니다.

FQDN(정규화된 도메인 이름) 피어 지원

지원되지 않습니다.

지원되지 않습니다.

네임스페이스 선택기

namespaces.matchLabels 필드를 사용하여 고급 네임스페이스를 지원합니다.

namespaceSelector 필드를 사용하여 라벨 기반 네임스페이스 선택을 지원합니다.

2장. 네트워크 정책

2.1. 네트워크 정책 정의

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

2.1.1. 네트워크 정책 정의

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

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

네트워크 정책은 TCP(Transmission Control Protocol), UDP(User Datagram Protocol), IMP(Internet Control Message Protocol) 및 SCTP(Stream Control Transmission Protocol) 프로토콜에만 적용됩니다. 다른 프로토콜은 영향을 받지 않습니다.

주의
  • 네트워크 정책은 호스트 네트워크 네임스페이스에 적용되지 않습니다. 호스트 네트워킹이 활성화된 Pod는 네트워크 정책 규칙의 영향을 받지 않습니다. 그러나 호스트 네트워크 pod에 연결하는 Pod는 네트워크 정책 규칙의 영향을 받을 수 있습니다.
  • podSelector 필드를 {} 로 설정하지 않고 namespaceSelector 필드를 사용하면 hostNetwork Pod가 포함되지 않습니다. 네트워크 정책을 생성할 때 hostNetwork Pod를 대상으로 하려면 namespaceSelector 필드와 함께 {} 로 설정된 podSelector 를 사용해야 합니다.
  • 네트워크 정책은 localhost 또는 상주 노드의 트래픽을 차단할 수 없습니다.

다음 예제 NetworkPolicy 오브젝트는 다양한 시나리오 지원을 보여줍니다.

  • 모든 트래픽 거부:

    기본적으로 프로젝트를 거부하려면 모든 Pod와 일치하지만 트래픽을 허용하지 않는 NetworkPolicy 오브젝트를 추가합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: deny-by-default
    spec:
      podSelector: {}
      ingress: []
    Copy to Clipboard Toggle word wrap
  • OpenShift Dedicated Ingress 컨트롤러의 연결만 허용합니다.

    프로젝트에서 OpenShift Dedicated Ingress 컨트롤러의 연결만 허용하도록 하려면 다음 NetworkPolicy 오브젝트를 추가합니다.

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-from-openshift-ingress
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              policy-group.network.openshift.io/ingress: ""
      podSelector: {}
      policyTypes:
      - Ingress
    Copy to Clipboard Toggle word wrap
  • 프로젝트 내 Pod 연결만 허용:

    중요

    동일한 네임스페이스에 있는 hostNetwork Pod의 수신 연결을 허용하려면 allow-from-hostnetwork 정책을 allow-same-namespace 정책과 함께 적용해야 합니다.

    Pod가 동일한 프로젝트 내 다른 Pod의 연결은 수락하지만 다른 프로젝트에 속하는 Pod의 기타 모든 연결을 거부하도록 하려면 다음 NetworkPolicy 오브젝트를 추가합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-same-namespace
    spec:
      podSelector: {}
      ingress:
      - from:
        - podSelector: {}
    Copy to Clipboard Toggle word wrap
  • Pod 레이블을 기반으로 하는 HTTP 및 HTTPS 트래픽만 허용:

    특정 레이블(다음 예에서 role=frontend)을 사용하여 Pod에 대한 HTTP 및 HTTPS 액세스만 활성화하려면 다음과 유사한 NetworkPolicy 오브젝트를 추가합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-http-and-https
    spec:
      podSelector:
        matchLabels:
          role: frontend
      ingress:
      - ports:
        - protocol: TCP
          port: 80
        - protocol: TCP
          port: 443
    Copy to Clipboard Toggle word wrap
  • 네임스페이스와 Pod 선택기를 모두 사용하여 연결 수락:

    네임스페이스와 Pod 선택기를 결합하여 네트워크 트래픽을 일치시키려면 다음과 유사한 NetworkPolicy 오브젝트를 사용하면 됩니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-pod-and-namespace-both
    spec:
      podSelector:
        matchLabels:
          name: test-pods
      ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                project: project_name
            podSelector:
              matchLabels:
                name: test-pods
    Copy to Clipboard Toggle word wrap

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

예를 들어, 이전 샘플에서 정의된 NetworkPolicy 오브젝트의 경우 동일한 프로젝트 내에서 allow-same-namespace 정책과 allow-http-and-https 정책을 모두 정의할 수 있습니다. 따라서 레이블이 role=frontend로 지정된 Pod는 각 정책에서 허용하는 모든 연결을 허용할 수 있습니다. 즉 동일한 네임스페이스에 있는 Pod의 모든 포트 연결과 모든 네임스페이스에 있는 Pod에서 포트 80443에 대한 연결이 허용됩니다.

2.1.1.1. allow-from-router 네트워크 정책 사용

다음 NetworkPolicy 를 사용하여 라우터 구성과 관계없이 외부 트래픽을 허용합니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-router
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          policy-group.network.openshift.io/ingress: ""
1

  podSelector: {}
  policyTypes:
  - Ingress
Copy to Clipboard Toggle word wrap
1
policy-group.network.openshift.io/ingress:" 레이블은 OVN-Kubernetes를 지원합니다.
2.1.1.2. allow-from-hostnetwork 네트워크 정책 사용

다음 allow-from-hostnetwork NetworkPolicy 오브젝트를 추가하여 호스트 네트워크 Pod에서 트래픽을 전달합니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-hostnetwork
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          policy-group.network.openshift.io/host-network: ""
  podSelector: {}
  policyTypes:
  - Ingress
Copy to Clipboard Toggle word wrap

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

  • 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
    Copy to Clipboard Toggle word wrap

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

    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]}
    Copy to Clipboard Toggle word wrap

    동일한 지침이 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
    Copy to Clipboard Toggle word wrap

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

    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
    Copy to Clipboard Toggle word wrap

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

2.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
Copy to Clipboard Toggle word wrap

다음과 같습니다.

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

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

2.1.3. 다음 단계

2.2. 네트워크 정책 생성

클러스터 관리자는 네임스페이스에 대한 네트워크 정책을 생성할 수 있습니다.

2.2.1. NetworkPolicy 오브젝트 예

다음은 예제 NetworkPolicy 오브젝트에 대한 주석입니다.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-27107 
1

spec:
  podSelector: 
2

    matchLabels:
      app: mongodb
  ingress:
  - from:
    - podSelector: 
3

        matchLabels:
          app: app
    ports: 
4

    - protocol: TCP
      port: 27017
Copy to Clipboard Toggle word wrap
1
NetworkPolicy 오브젝트의 이름입니다.
2
정책이 적용되는 Pod를 설명하는 선택기입니다. 정책 오브젝트는 NetworkPolicy 오브젝트를 정의하는 프로젝트에서 Pod만 선택할 수 있습니다.
3
정책 오브젝트가 수신 트래픽을 허용하는 Pod와 일치하는 선택기입니다. 선택기는 NetworkPolicy와 동일한 네임스페이스의 Pod와 일치합니다.
4
트래픽을 허용할 하나 이상의 대상 포트 목록입니다.

2.2.2. CLI를 사용하여 네트워크 정책 만들기

클러스터의 네임스페이스에서 허용된 수신 또는 송신 네트워크 트래픽을 설명하는 세분화된 규칙을 정의하기 위해 네트워크 정책을 생성할 수 있습니다.

참고

cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 다음과 같이 정책 규칙을 생성합니다.

    1. <policy_name>.yaml 파일을 생성합니다.

      $ touch <policy_name>.yaml
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <policy_name>
      네트워크 정책 파일 이름을 지정합니다.
    2. 방금 만든 파일에서 다음 예와 같이 네트워크 정책을 정의합니다.

      모든 네임스페이스의 모든 Pod에서 수신 거부

      이는 다른 네트워크 정책 구성에서 허용하는 포드 간 트래픽 이외의 모든 교차 포드 네트워킹을 차단하는 기본 정책입니다.

      kind: NetworkPolicy
      apiVersion: networking.k8s.io/v1
      metadata:
        name: deny-by-default
      spec:
        podSelector: {}
        policyTypes:
        - Ingress
        ingress: []
      Copy to Clipboard Toggle word wrap

      동일한 네임 스페이스에 있는 모든 Pod의 수신 허용

      kind: NetworkPolicy
      apiVersion: networking.k8s.io/v1
      metadata:
        name: allow-same-namespace
      spec:
        podSelector:
        ingress:
        - from:
          - podSelector: {}
      Copy to Clipboard Toggle word wrap

      특정 네임스페이스에서 하나의 Pod로 수신 트래픽 허용

      이 정책을 사용하면 namespace-y 에서 실행되는 Pod의 pod-a 레이블이 있는 Pod로의 트래픽을 허용합니다.

      kind: NetworkPolicy
      apiVersion: networking.k8s.io/v1
      metadata:
        name: allow-traffic-pod
      spec:
        podSelector:
         matchLabels:
            pod: pod-a
        policyTypes:
        - Ingress
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                 kubernetes.io/metadata.name: namespace-y
      Copy to Clipboard Toggle word wrap
  2. 네트워크 정책 오브젝트를 생성하려면 다음 명령을 입력합니다. 성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

    $ oc apply -f <policy_name>.yaml -n <namespace>
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <policy_name>
    네트워크 정책 파일 이름을 지정합니다.
    <namespace>
    선택적 매개변수입니다. 현재 네임스페이스와 다른 네임스페이스에 오브젝트를 정의한 경우 매개변수는 네임스페이스를 지정합니다.

    성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

참고

cluster-admin 권한을 사용하여 웹 콘솔에 로그인하는 경우 클러스터의 모든 네임스페이스에서 직접 또는 웹 콘솔의 양식에서 네트워크 정책을 생성할 수 있습니다.

2.2.3. 기본 거부 모든 네트워크 정책 생성

이 정책은 다른 배포된 네트워크 정책 및 호스트 네트워크 Pod 간 트래픽에서 허용하는 네트워크 트래픽 이외의 모든 포드 간 네트워킹을 차단합니다. 이 절차에서는 my -project 네임스페이스에 기본 거부 정책을 적용하여 강력한 거부 정책을 적용합니다.

주의

트래픽 통신을 허용하는 NetworkPolicy CR(사용자 정의 리소스)을 구성하지 않으면 다음 정책으로 클러스터 전체에서 통신 문제가 발생할 수 있습니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 모든 네임스페이스의 모든 포드의 수신을 거부하도록 기본 거부 정책을 정의하는 다음 YAML을 생성합니다. YAML을 deny-by-default.yaml 파일에 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: deny-by-default
      namespace: my-project 
    1
    
    spec:
      podSelector: {} 
    2
    
      ingress: [] 
    3
    Copy to Clipboard Toggle word wrap
    1
    정책을 배포할 네임스페이스를 지정합니다. 예를 들어 'my-project 네임스페이스는 다음과 같습니다.
    2
    이 필드가 비어 있으면 구성이 모든 Pod와 일치합니다. 따라서 정책은 my-project 네임스페이스의 모든 pod에 적용됩니다.
    3
    지정된 수신 규칙이 없습니다. 이로 인해 들어오는 트래픽이 모든 Pod로 삭제됩니다.
  2. 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

    $ oc apply -f deny-by-default.yaml
    Copy to Clipboard Toggle word wrap

    성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

2.2.4. 외부 클라이언트의 트래픽을 허용하는 네트워크 정책 생성

기본 거부 정책을 배치하면 app=web 레이블이 있는 외부 클라이언트에서 Pod로의 트래픽을 허용하는 정책을 구성할 수 있습니다.

참고

cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.

다음 절차에 따라 공용 인터넷의 외부 서비스를 직접 또는 Load Balancer를 사용하여 Pod에 액세스하는 방식으로 허용하는 정책을 구성합니다. app=web 레이블이 있는 Pod에만 트래픽이 허용됩니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 직접 또는 로드 밸런서를 사용하여 pod에 액세스하여 공용 인터넷의 트래픽을 허용하는 정책을 생성합니다. YAML을 web-allow-external.yaml 파일에 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: web-allow-external
      namespace: default
    spec:
      policyTypes:
      - Ingress
      podSelector:
        matchLabels:
          app: web
      ingress:
        - {}
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

    $ oc apply -f web-allow-external.yaml
    Copy to Clipboard Toggle word wrap

    성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다. 이 정책은 다음 다이어그램에 설명된 대로 외부 트래픽을 포함하여 모든 리소스의 트래픽을 허용합니다.

참고

cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.

다음 절차에 따라 모든 네임스페이스의 모든 Pod에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 구성합니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 모든 네임스페이스의 모든 Pod에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 생성합니다. YAML을 web-allow-all-namespaces.yaml 파일에 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: web-allow-all-namespaces
      namespace: default
    spec:
      podSelector:
        matchLabels:
          app: web 
    1
    
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector: {} 
    2
    Copy to Clipboard Toggle word wrap
    1
    기본 네임스페이스의 app:web pod에만 정책을 적용합니다.
    2
    모든 네임스페이스의 모든 Pod를 선택합니다.
    참고

    기본적으로 정책 오브젝트에 namespaceSelector 매개변수를 지정하지 않으면 네임스페이스를 선택하지 않습니다. 즉, 정책은 네트워크 정책이 배포하는 네임스페이스의 트래픽만 허용합니다.

  2. 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

    $ oc apply -f web-allow-all-namespaces.yaml
    Copy to Clipboard Toggle word wrap

    성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

검증

  1. 다음 명령을 입력하여 기본 네임스페이스에서 웹 서비스를 시작합니다.

    $ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 보조 네임스페이스에 alpine 이미지를 배포하고 쉘을 시작합니다.

    $ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
    Copy to Clipboard Toggle word wrap
  3. 쉘에서 다음 명령을 실행하고 서비스에서 요청을 허용하는지 확인합니다.

    # wget -qO- --timeout=2 http://web.default
    Copy to Clipboard Toggle word wrap

    예상 출력

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    Copy to Clipboard Toggle word wrap

참고

cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.

다음 절차에 따라 특정 네임스페이스의 app=web 레이블을 사용하여 Pod로의 트래픽을 허용하는 정책을 구성합니다. 다음을 위해 이 작업을 수행할 수 있습니다.

  • 프로덕션 워크로드가 배포된 네임스페이스로만 트래픽을 프로덕션 데이터베이스로 제한합니다.
  • 특정 네임스페이스에 배포된 모니터링 툴을 활성화하여 현재 네임스페이스에서 메트릭을 스크랩할 수 있습니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. purpose=production 레이블이 있는 특정 네임스페이스의 모든 Pod의 트래픽을 허용하는 정책을 생성합니다. YAML을 web-allow-prod.yaml 파일에 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: web-allow-prod
      namespace: default
    spec:
      podSelector:
        matchLabels:
          app: web 
    1
    
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              purpose: production 
    2
    Copy to Clipboard Toggle word wrap
    1
    기본 네임스페이스의 app:web pod에만 정책을 적용합니다.
    2
    purpose=production 레이블이 있는 네임스페이스의 Pod로만 트래픽을 제한합니다.
  2. 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

    $ oc apply -f web-allow-prod.yaml
    Copy to Clipboard Toggle word wrap

    성공적인 출력에는 정책 오브젝트의 이름과 생성된 상태가 나열됩니다.

검증

  1. 다음 명령을 입력하여 기본 네임스페이스에서 웹 서비스를 시작합니다.

    $ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 prod 네임스페이스를 생성합니다.

    $ oc create namespace prod
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 prod 네임스페이스에 레이블을 지정합니다.

    $ oc label namespace/prod purpose=production
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 dev 네임스페이스를 생성합니다.

    $ oc create namespace dev
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 dev 네임스페이스에 레이블을 지정합니다.

    $ oc label namespace/dev purpose=testing
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 dev 네임스페이스에 alpine 이미지를 배포하고 쉘을 시작합니다.

    $ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
    Copy to Clipboard Toggle word wrap
  7. 쉘에서 다음 명령을 실행하고 차단된 요청 이유를 확인합니다. 예를 들어 예상되는 출력 상태는 wget: download timed out 입니다.

    # wget -qO- --timeout=2 http://web.default
    Copy to Clipboard Toggle word wrap
  8. 다음 명령을 실행하여 prod 네임스페이스에 alpine 이미지를 배포하고 쉘을 시작합니다.

    $ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
    Copy to Clipboard Toggle word wrap
  9. 쉘에서 다음 명령을 실행하고 요청이 허용되는지 확인합니다.

    # wget -qO- --timeout=2 http://web.default
    Copy to Clipboard Toggle word wrap

    예상 출력

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    Copy to Clipboard Toggle word wrap

2.2.7. OpenShift Cluster Manager를 사용하여 네트워크 정책 생성

클러스터의 네임스페이스에 허용된 수신 또는 송신 네트워크 트래픽을 설명하는 세분화된 규칙을 정의하기 위해 네트워크 정책을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Cluster Manager 에 로그인했습니다.
  • OpenShift Dedicated 클러스터를 생성하셨습니다.
  • 클러스터의 ID 공급자를 구성했습니다.
  • 구성된 ID 공급자에 사용자 계정을 추가했습니다.
  • OpenShift Dedicated 클러스터 내에 프로젝트를 생성하셨습니다.

프로세스

  1. OpenShift Cluster Manager 에서 액세스할 클러스터를 클릭합니다.
  2. Open console 을 클릭하여 OpenShift 웹 콘솔로 이동합니다.
  3. ID 공급자를 클릭하고 클러스터에 로그인할 수 있는 인증 정보를 제공합니다.
  4. 관리자 관점에서 Networking 에서 NetworkPolicies 를 클릭합니다.
  5. NetworkPolicy 생성을 클릭합니다.
  6. 정책 이름 필드에 정책의 이름을 입력합니다.
  7. 선택 사항: 이 정책이 하나 이상의 특정 Pod에만 적용되는 경우 특정 Pod에 레이블 및 선택기를 제공할 수 있습니다. 특정 Pod를 선택하지 않으면 클러스터의 모든 Pod에 이 정책이 적용됩니다.
  8. 선택 사항: 모든 수신 트래픽 거부를 사용하거나 모든 송신 트래픽 확인란을 거부하여 모든 수신 및 송신 트래픽 차단할 수 있습니다.
  9. 또한 승인하려는 포트, 네임스페이스 또는 IP 블록을 지정할 수 있도록 수신 및 송신 규칙의 조합을 추가할 수도 있습니다.
  10. 정책에 수신 규칙을 추가합니다.

    1. 수신 규칙 추가 를 선택하여 새 규칙을 구성합니다. 이 작업은 인바운드 트래픽을 제한하려는 방법을 지정할 수 있는 Add allowed source 드롭다운 메뉴를 사용하여 새 Ingress 규칙 행을 생성합니다. 드롭다운 메뉴에서는 Ingress 트래픽을 제한하는 세 가지 옵션을 제공합니다.

      • 동일한 네임스페이스의 Pod는 동일한 네임스페이스 내의 Pod로 트래픽을 제한합니다. 네임스페이스에 Pod를 지정할 수 있지만 이 옵션을 비워 두면 네임스페이스에 있는 Pod의 모든 트래픽이 허용됩니다.
      • 클러스터 내부에서 포드가 정책과 동일한 클러스터 내의 Pod로 트래픽을 제한할 수 있습니다. 인바운드 트래픽을 허용하려는 네임스페이스 및 Pod를 지정할 수 있습니다. 이 옵션을 비워 두면 이 클러스터 내의 모든 네임스페이스 및 Pod의 인바운드 트래픽이 허용됩니다.
      • IP 블록별 피어 는 지정된 CIDR(Classless Inter-Domain Routing) IP 블록의 트래픽을 제한합니다. exceptions 옵션을 사용하여 특정 IP를 차단할 수 있습니다. CIDR 필드를 비워 두면 모든 외부 소스의 모든 인바운드 트래픽이 허용됩니다.
    2. 모든 인바운드 트래픽을 포트로 제한할 수 있습니다. 포트를 추가하지 않으면 모든 포트에 트래픽에 액세스할 수 있습니다.
  11. 네트워크 정책에 송신 규칙을 추가합니다.

    1. 송신 규칙 추가 를 선택하여 새 규칙을 구성합니다. 이 작업은 아웃바운드 트래픽을 제한하려는 방법을 지정할 수 있는 Add allowed destination"* 드롭다운 메뉴를 사용하여 새 Egress 규칙 행을 생성합니다. 드롭다운 메뉴에서는 송신 트래픽을 제한하는 세 가지 옵션을 제공합니다.

      • 동일한 네임스페이스의 Pod는 동일한 네임스페이스 내의 pod로 아웃바운드 트래픽을 제한합니다. 네임스페이스에 Pod를 지정할 수 있지만 이 옵션을 비워 두면 네임스페이스에 있는 Pod의 모든 트래픽이 허용됩니다.
      • 클러스터 내부에서 포드가 정책과 동일한 클러스터 내의 Pod로 트래픽을 제한할 수 있습니다. 아웃바운드 트래픽을 허용하려는 네임스페이스 및 Pod를 지정할 수 있습니다. 이 옵션을 비워 두면 이 클러스터 내의 모든 네임스페이스 및 Pod의 아웃바운드 트래픽이 허용됩니다.
      • IP 블록별 피어를 허용 하면 지정된 CIDR IP 블록의 트래픽을 제한합니다. exceptions 옵션을 사용하여 특정 IP를 차단할 수 있습니다. CIDR 필드를 비워 두면 모든 외부 소스의 모든 아웃바운드 트래픽이 허용됩니다.
    2. 모든 아웃바운드 트래픽을 포트로 제한할 수 있습니다. 포트를 추가하지 않으면 모든 포트에 트래픽에 액세스할 수 있습니다.

2.3. 네트워크 정책 보기

클러스터 관리자는 네임스페이스에 대한 네트워크 정책을 볼 수 있습니다.

2.3.1. NetworkPolicy 오브젝트 예

다음은 예제 NetworkPolicy 오브젝트에 대한 주석입니다.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-27107 
1

spec:
  podSelector: 
2

    matchLabels:
      app: mongodb
  ingress:
  - from:
    - podSelector: 
3

        matchLabels:
          app: app
    ports: 
4

    - protocol: TCP
      port: 27017
Copy to Clipboard Toggle word wrap
1
NetworkPolicy 오브젝트의 이름입니다.
2
정책이 적용되는 Pod를 설명하는 선택기입니다. 정책 오브젝트는 NetworkPolicy 오브젝트를 정의하는 프로젝트에서 Pod만 선택할 수 있습니다.
3
정책 오브젝트가 수신 트래픽을 허용하는 Pod와 일치하는 선택기입니다. 선택기는 NetworkPolicy와 동일한 네임스페이스의 Pod와 일치합니다.
4
트래픽을 허용할 하나 이상의 대상 포트 목록입니다.

2.3.2. CLI를 사용하여 네트워크 정책 보기

네임스페이스에서 네트워크 정책을 검사할 수 있습니다.

참고

cluster-admin 역할을 가진 사용자로 로그인하면 클러스터의 모든 네트워크 정책을 볼 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인합니다.
  • 네트워크 정책이 존재하는 네임스페이스에서 작업하고 있습니다.

프로세스

  • 네임스페이스의 네트워크 정책을 나열합니다.

    • 네임스페이스에 정의된 네트워크 정책 개체를 보려면 다음 명령을 입력합니다.

      $ oc get networkpolicy
      Copy to Clipboard Toggle word wrap
    • 선택 사항: 특정 네트워크 정책을 검사하려면 다음 명령을 입력합니다.

      $ oc describe networkpolicy <policy_name> -n <namespace>
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <policy_name>
      검사할 네트워크 정책의 이름을 지정합니다.
      <namespace>
      선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.

      예를 들면 다음과 같습니다.

      $ oc describe networkpolicy allow-same-namespace
      Copy to Clipboard Toggle word wrap

      oc describe 명령의 출력

      Name:         allow-same-namespace
      Namespace:    ns1
      Created on:   2021-05-24 22:28:56 -0400 EDT
      Labels:       <none>
      Annotations:  <none>
      Spec:
        PodSelector:     <none> (Allowing the specific traffic to all pods in this namespace)
        Allowing ingress traffic:
          To Port: <any> (traffic allowed to all ports)
          From:
            PodSelector: <none>
        Not affecting egress traffic
        Policy Types: Ingress
      Copy to Clipboard Toggle word wrap

참고

cluster-admin 권한을 사용하여 웹 콘솔에 로그인하는 경우 YAML 또는 웹 콘솔의 양식에서 클러스터의 모든 네임스페이스에서 네트워크 정책을 직접 볼 수 있습니다.

2.3.3. OpenShift Cluster Manager를 사용하여 네트워크 정책 보기

Red Hat OpenShift Cluster Manager에서 네트워크 정책의 구성 세부 정보를 볼 수 있습니다.

사전 요구 사항

  • OpenShift Cluster Manager 에 로그인했습니다.
  • OpenShift Dedicated 클러스터를 생성하셨습니다.
  • 클러스터의 ID 공급자를 구성했습니다.
  • 구성된 ID 공급자에 사용자 계정을 추가했습니다.
  • 네트워크 정책을 생성하셨습니다.

프로세스

  1. OpenShift Cluster Manager 웹 콘솔의 관리자 화면에서 Networking 에서 NetworkPolicies 를 클릭합니다.
  2. 확인할 네트워크 정책을 선택합니다.
  3. 네트워크 정책 세부 정보 페이지에서 연결된 모든 수신 및 송신 규칙을 볼 수 있습니다.
  4. 네트워크 정책 세부 정보에서 YAML 을 선택하여 YAML 형식으로 정책 구성을 확인합니다.

    참고

    이러한 정책의 세부 정보만 볼 수 있습니다. 이러한 정책은 편집할 수 없습니다.

2.4. 네트워크 정책 삭제

클러스터 관리자는 네임스페이스에서 네트워크 정책을 삭제할 수 있습니다.

2.4.1. CLI를 사용하여 네트워크 정책 삭제

네임스페이스에서 네트워크 정책을 삭제할 수 있습니다.

참고

cluster-admin 역할을 가진 사용자로 로그인하면 클러스터의 모든 네트워크 정책을 삭제할 수 있습니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 네트워크 정책이 존재하는 네임스페이스에서 작업하고 있습니다.

프로세스

  • 네트워크 정책 오브젝트를 삭제하려면 다음 명령을 입력합니다. 성공적인 출력에는 정책 오브젝트의 이름과 삭제된 상태가 나열됩니다.

    $ oc delete networkpolicy <policy_name> -n <namespace>
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <policy_name>
    네트워크 정책의 이름을 지정합니다.
    <namespace>
    선택적 매개변수입니다. 현재 네임스페이스와 다른 네임스페이스에 오브젝트를 정의한 경우 매개변수는 네임스페이스를 지정합니다.

    성공적인 출력에는 정책 오브젝트의 이름과 삭제된 상태가 나열됩니다.

참고

cluster-admin 권한을 사용하여 웹 콘솔에 로그인하는 경우, YAML에서 직접 또는 Actions 메뉴를 통해 웹 콘솔의 정책에서 클러스터의 모든 네임스페이스에서 네트워크 정책을 삭제할 수 있습니다.

2.4.2. OpenShift Cluster Manager를 사용하여 네트워크 정책 삭제

네임스페이스에서 네트워크 정책을 삭제할 수 있습니다.

사전 요구 사항

  • OpenShift Cluster Manager 에 로그인했습니다.
  • OpenShift Dedicated 클러스터를 생성하셨습니다.
  • 클러스터의 ID 공급자를 구성했습니다.
  • 구성된 ID 공급자에 사용자 계정을 추가했습니다.

프로세스

  1. OpenShift Cluster Manager 웹 콘솔의 관리자 화면에서 Networking 에서 NetworkPolicies 를 클릭합니다.
  2. 다음 방법 중 하나를 사용하여 네트워크 정책을 삭제합니다.

    • 네트워크 정책 테이블에서 정책을 삭제합니다.

      1. 네트워크 정책 테이블의 삭제하려는 네트워크 정책 행에서 스택 메뉴를 선택한 다음 NetworkPolicy 삭제 를 클릭합니다.
    • 개별 네트워크 정책 세부 정보에서 작업 드롭다운 메뉴를 사용하여 정책을 삭제합니다.

      1. 네트워크 정책의 작업 드롭다운 메뉴를 클릭합니다.
      2. 메뉴에서 Delete NetworkPolicy 를 선택합니다.

2.5. 네트워크 정책으로 다중 테넌트 격리 구성

클러스터 관리자는 다중 테넌트 네트워크 격리를 제공하도록 네트워크 정책을 구성할 수 있습니다.

참고

이 섹션에 설명된 대로 네트워크 정책을 구성하면 이전 버전의 OpenShift Dedicated에서 OpenShift SDN의 다중 테넌트 모드와 유사한 네트워크 격리가 제공됩니다.

2.5.1. 네트워크 정책을 사용하여 다중 테넌트 격리 구성

다른 프로젝트 네임스페이스의 Pod 및 서비스에서 격리하도록 프로젝트를 구성할 수 있습니다.

사전 요구 사항

  • 클러스터는 mode: NetworkPolicy 로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • admin 권한이 있는 사용자로 클러스터에 로그인합니다.

프로세스

  1. 다음 NetworkPolicy 오브젝트를 생성합니다.

    1. 이름이 allow-from-openshift-ingress인 정책입니다.

      $ cat << EOF| oc create -f -
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-openshift-ingress
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                policy-group.network.openshift.io/ingress: ""
        podSelector: {}
        policyTypes:
        - Ingress
      EOF
      Copy to Clipboard Toggle word wrap
      참고

      policy-group.network.openshift.io/ingress: "" 는 OVN-Kubernetes의 기본 네임스페이스 선택기 레이블입니다.

    2. 이름이 allow-from-openshift-monitoring인 정책:

      $ cat << EOF| oc create -f -
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-openshift-monitoring
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                network.openshift.io/policy-group: monitoring
        podSelector: {}
        policyTypes:
        - Ingress
      EOF
      Copy to Clipboard Toggle word wrap
    3. 이름이 allow-same-namespace인 정책:

      $ cat << EOF| oc create -f -
      kind: NetworkPolicy
      apiVersion: networking.k8s.io/v1
      metadata:
        name: allow-same-namespace
      spec:
        podSelector:
        ingress:
        - from:
          - podSelector: {}
      EOF
      Copy to Clipboard Toggle word wrap
    4. 이름이 allow-from-kube-apiserver-operator 인 정책:

      $ cat << EOF| oc create -f -
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-from-kube-apiserver-operator
      spec:
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: openshift-kube-apiserver-operator
            podSelector:
              matchLabels:
                app: kube-apiserver-operator
        policyTypes:
        - Ingress
      EOF
      Copy to Clipboard Toggle word wrap

      자세한 내용은 웹 후크 의 상태를 검증하는 새로운 kube-apiserver-operator 웹 후크 컨트롤러를 참조하십시오.

  2. 선택 사항: 현재 프로젝트에 네트워크 정책이 있는지 확인하려면 다음 명령을 입력합니다.

    $ oc describe networkpolicy
    Copy to Clipboard Toggle word wrap

    출력 예

    Name:         allow-from-openshift-ingress
    Namespace:    example1
    Created on:   2020-06-09 00:28:17 -0400 EDT
    Labels:       <none>
    Annotations:  <none>
    Spec:
      PodSelector:     <none> (Allowing the specific traffic to all pods in this namespace)
      Allowing ingress traffic:
        To Port: <any> (traffic allowed to all ports)
        From:
          NamespaceSelector: policy-group.network.openshift.io/ingress:
      Not affecting egress traffic
      Policy Types: Ingress
    
    
    Name:         allow-from-openshift-monitoring
    Namespace:    example1
    Created on:   2020-06-09 00:29:57 -0400 EDT
    Labels:       <none>
    Annotations:  <none>
    Spec:
      PodSelector:     <none> (Allowing the specific traffic to all pods in this namespace)
      Allowing ingress traffic:
        To Port: <any> (traffic allowed to all ports)
        From:
          NamespaceSelector: network.openshift.io/policy-group: monitoring
      Not affecting egress traffic
      Policy Types: Ingress
    Copy to Clipboard Toggle word wrap

3장. OpenShift Dedicated 클러스터에 대한 네트워크 확인

네트워크 확인 검사는 기존 VPC(Virtual Private Cloud)에 OpenShift Dedicated 클러스터를 배포하거나 클러스터에 새로 추가된 서브넷을 사용하여 추가 머신 풀을 생성할 때 자동으로 실행됩니다. 검사를 통해 네트워크 구성을 확인하고 오류를 강조 표시하여 클러스터 배포 전에 구성 문제를 해결할 수 있습니다.

네트워크 확인 검사를 수동으로 실행하여 기존 클러스터의 구성을 확인할 수도 있습니다.

3.1. OpenShift Dedicated 클러스터에 대한 네트워크 확인 이해

OpenShift Dedicated 클러스터를 기존 VPC(Virtual Private Cloud)에 배포하거나 클러스터에 새로 추가된 서브넷을 사용하여 추가 머신 풀을 생성하면 네트워크 확인이 자동으로 실행됩니다. 이를 통해 클러스터 배포 전에 구성 문제를 식별하고 해결할 수 있습니다.

Red Hat OpenShift Cluster Manager를 사용하여 클러스터를 설치할 준비가 되면 VPC(Virtual Private Cloud) 서브넷 설정 페이지의 서브넷 ID 필드에 서브넷 ID를 입력한 후 자동 검사가 실행됩니다.

클러스터에 새로 추가된 서브넷이 포함된 시스템 풀을 추가하면 자동 네트워크 확인에서 서브넷을 확인하여 시스템 풀이 프로비저닝되기 전에 네트워크 연결을 사용할 수 있는지 확인합니다.

자동 네트워크 확인이 완료되면 레코드가 서비스 로그로 전송됩니다. 레코드는 네트워크 구성 오류를 포함하여 확인 검사 결과를 제공합니다. 배포 전에 확인된 문제를 해결할 수 있으며 배포에 성공할 가능성이 큽니다.

기존 클러스터에 대해 네트워크 확인을 수동으로 실행할 수도 있습니다. 이를 통해 구성을 변경한 후 클러스터의 네트워크 구성을 확인할 수 있습니다. 네트워크 확인 검사를 수동으로 실행하는 단계는 네트워크 확인 실행을 참조하십시오.

3.2. 네트워크 확인 검사 범위

네트워크 확인에는 다음 요구 사항 각각에 대한 검사가 포함됩니다.

  • 상위 VPC(Virtual Private Cloud)가 있습니다.
  • 지정된 모든 서브넷이 VPC에 속합니다.
  • VPC에 enableDnsSupport 가 활성화되어 있습니다.
  • VPC에는 enableDnsHostnames 가 활성화되어 있습니다.
  • egress는 AWS 방화벽 사전 요구 사항 섹션에 지정된 필수 도메인 및 포트 조합에서 사용할 수 있습니다.

3.3. 자동 네트워크 확인 우회

알려진 네트워크 구성 문제가 있는 OpenShift Dedicated 클러스터를 기존 VPC(Virtual Private Cloud)에 배포하려면 자동 네트워크 확인을 바이패스할 수 있습니다.

클러스터를 생성할 때 네트워크 확인을 바이패스하면 클러스터에 제한된 지원 상태가 있습니다. 설치 후 문제를 해결한 다음 네트워크 확인을 수동으로 실행할 수 있습니다. 제한된 지원 상태는 확인에 성공하면 제거됩니다.

Red Hat OpenShift Cluster Manager를 사용하여 기존 VPC에 클러스터를 설치할 때 VPC(Virtual Private Cloud) 서브넷 설정 페이지에서 바이패스 네트워크 확인을 선택하여 자동 확인을 바이패스할 수 있습니다.

3.4. 수동으로 네트워크 확인 실행

Red Hat OpenShift Cluster Manager를 사용하여 기존 OpenShift Dedicated 클러스터에 대한 네트워크 확인 검사를 수동으로 실행할 수 있습니다.

사전 요구 사항

  • 기존 OpenShift Dedicated 클러스터가 있어야 합니다.
  • 클러스터 소유자이거나 클러스터 편집기 역할이 있습니다.

프로세스

  1. OpenShift Cluster Manager 로 이동하여 클러스터를 선택합니다.
  2. 작업 드롭다운 메뉴에서 Verify networking 을 선택합니다.

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat