26.4. OVN-Kubernetes 네트워크 정책


중요

AdminNetworkPolicy 리소스는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

Kubernetes는 사용자가 네트워크 보안을 적용하는 데 사용할 수 있는 두 가지 기능을 제공합니다. 사용자가 네트워크 정책을 적용할 수 있는 한 가지 기능은 애플리케이션 개발자 및 네임스페이스 테넌트가 네임스페이스 범위 정책을 생성하여 네임스페이스를 보호하기 위해 주로 설계된 NetworkPolicy API입니다. 자세한 내용은 네트워크 정책 정보를 참조하십시오.

두 번째 기능은 AdminNetworkPolicy (ANP) API와 Baseline AdminNetworkPolicy (BANP) API의 두 가지 API로 구성된 AdminNetworkPolicy입니다. ANP 및 BANP는 클러스터 범위 정책을 생성하여 클러스터 및 네트워크 관리자가 전체 클러스터를 보호하도록 설계되었습니다. 클러스터 관리자는 ANPs를 사용하여 NetworkPolicy 오브젝트보다 우선하는 복구 불가능한 정책을 적용할 수 있습니다. 관리자는 BANP를 사용하여 NetworkPolicy 오브젝트를 사용하는 사용자가 덮어쓸 수 있는 선택적 클러스터 범위 네트워크 정책 규칙을 설정하고 적용할 수 있습니다. ANP 및 BANP를 함께 사용하면 관리자가 클러스터를 보호하는 데 사용할 수 있는 다중 테넌시 정책을 만들 수 있습니다.

OpenShift Container Platform의 OVN-Kubernetes CNI는 ACL(Access Control List) 계층을 사용하여 이러한 네트워크 정책을 구현하여 이를 평가하고 적용합니다. ACL은 계층 1에서 계층 3까지 내림차순으로 평가됩니다.

계층 1은 관리NetworkPolicy (ANP) 오브젝트를 평가합니다. 계층 2는 NetworkPolicy 오브젝트를 평가합니다. 계층 3은 BaselineAdminNetworkPolicy (BANP) 오브젝트를 평가합니다.

그림 26.3. OVK-Kubernetes Access Control List (ACL)

OVN-Kubernetes 액세스 제어 목록

트래픽이 ANP 규칙과 일치하는 경우 해당 ANP의 규칙이 먼저 평가됩니다. 일치 항목이 ANP 허용 또는 거부 규칙인 경우 클러스터의 기존 NetworkPoliciesBaselineAdminNetworkPolicy (BANP)는 의도적으로 평가에서 건너뜁니다. 일치 항목이 ANP 패스 규칙인 경우 평가는 NetworkPolicy 정책이 평가되는 ACL의 계층 1에서 계층 2로 이동합니다.

26.4.1. AdminNetworkPolicy

관리NetworkPolicy (ANP)는 클러스터 범위의 CRD(사용자 정의 리소스 정의)입니다. OpenShift Container Platform 관리자는 ANP를 사용하여 네임스페이스를 생성하기 전에 네트워크 정책을 생성하여 네트워크를 보호할 수 있습니다. 또한 NetworkPolicy 오브젝트에서 덮어쓸 수 없는 클러스터 범위 수준에서 네트워크 정책을 생성할 수 있습니다.

AdminNetworkPolicyNetworkPolicy 오브젝트의 주요 차이점은 전자는 관리자용이고 후자는 테넌트 소유자용이고 네임스페이스 범위가 지정되는 동안 클러스터 범위라는 것입니다.

관리자는 ANP를 사용하여 다음을 지정할 수 있습니다.

  • 평가 순서를 결정하는 우선순위 값입니다. 우선 순위가 가장 높은 값이 낮을 수 있습니다.
  • 주체 는 네임스페이스 또는 네임스페이스 세트로 구성됩니다.
  • 제목 을 향하는 모든 인그레스 트래픽에 적용할 수신 규칙 목록입니다.
  • 제목의 모든 송신 트래픽에 적용할 송신 규칙 목록입니다.
참고

AdminNetworkPolicy 리소스는 프로덕션에 없는 테스트 클러스터에서 활성화할 수 있는 TechnologyPreviewNoUpgrade 기능입니다. 기능 게이트 및 TechnologyPreviewNoUpgrade 기능에 대한 자세한 내용은 이 섹션의 "추가 리소스"에서 "기능 게이트를 사용하여 기능 활성화"를 참조하십시오.

AdminNetworkPolicy 예

예 26.1. ANP에 대한 YAML 파일의 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
  name: sample-anp-deny-pass-rules 1
spec:
  priority: 50 2
  subject:
    namespaces:
      matchLabels:
          kubernetes.io/metadata.name: example.name 3
  ingress: 4
  - name: "deny-all-ingress-tenant-1" 5
    action: "Deny"
    from:
    - pods:
        namespaces: 6
          namespaceSelector:
            matchLabels:
              custom-anp: tenant-1
        podSelector:
          matchLabels:
            custom-anp: tenant-1 7
  egress:8
  - name: "pass-all-egress-to-tenant-1"
    action: "Pass"
    to:
    - pods:
        namespaces:
          namespaceSelector:
            matchLabels:
              custom-anp: tenant-1
        podSelector:
          matchLabels:
            custom-anp: tenant-1
1
ANP의 이름을 지정합니다.
2
spec.priority 필드는 클러스터의 0-99 값에서 최대 100개의 ANP를 지원합니다. 우선 순위가 가장 높은 값이 낮을 수 있습니다. 동일한 우선 순위로 AdminNetworkPolicy 를 생성하면 결정적이지 않은 결과가 생성됩니다.
3
ANP 리소스를 적용할 네임스페이스를 지정합니다.
4
ANP에는 ingress 및 egress 규칙이 모두 있습니다. spec.ingress 필드의 ANP 규칙은 Pass,DenyAllow for the action 필드를 허용합니다.
5
ingress.name 의 이름을 지정합니다.
6
ANP 리소스를 적용하려면 네임스페이스를 지정하여 Pod를 선택합니다.
7
ANP 리소스를 적용할 Pod의 podSelector.matchLabels 이름을 지정합니다.
8
ANP에는 ingress 및 egress 규칙이 모두 있습니다. spec.egress 필드에 대한 ANP 규칙은 Pass,DenyAllow for the action 필드를 허용합니다.

26.4.1.1. 규칙에 대한 AdminNetworkPolicy 작업

관리자는 AdminNetworkPolicy 규칙에 대한 작업 필드로 Allow,Deny 또는 Pass 를 설정할 수 있습니다. OVN-Kubernetes는 계층화된 ACL을 사용하여 네트워크 트래픽 규칙을 평가하므로 관리자가 이를 수정하거나, 규칙을 삭제하거나, 우선 순위 규칙을 설정하여만 변경할 수 있는 매우 강력한 정책 규칙을 설정할 수 있습니다.

AdminNetworkPolicy 허용 예

우선 순위 9에 정의된 다음 ANP는 모니터링 네임스페이스에서 클러스터의 테넌트(다른 모든 네임스페이스)로 모든 수신 트래픽을 허용합니다.

예 26.2. 강력한 허용 ANP를 위한 YAML 파일의 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
  name: allow-monitoring
spec:
  priority: 9
  subject:
    namespaces: {}
  ingress:
  - name: "allow-ingress-from-monitoring"
    action: "Allow"
    from:
    - namespaces:
        namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: monitoring
# ...

이는 관련된 모든 당사자가 해결할 수 없기 때문에 강력한 Allow ANP의 예입니다. 테넌트는 NetworkPolicy 오브젝트를 사용하여 자체적으로 모니터링되는 것을 차단할 수 없으며 모니터링 테넌트도 모니터링할 수 있거나 모니터링할 수 없습니다.

AdminNetworkPolicy 거부 예

우선순위 5에 정의된 다음 ANP는 모니터링 네임스페이스의 모든 수신 트래픽이 제한된 테넌트( 보안: restricted)로 차단되도록 합니다.

예 26.3. 강력한 Deny ANP를 위한 YAML 파일의 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
  name: block-monitoring
spec:
  priority: 5
  subject:
    namespaces:
      matchLabels:
        security: restricted
  ingress:
  - name: "deny-ingress-from-monitoring"
    action: "Deny"
    from:
    - namespaces:
        namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: monitoring
# ...

이는 강력한 Deny ANP로, 관련된 모든 당사자가 해결할 수 없는 강력한 Deny ANP입니다. 제한된 테넌트 소유자는 모니터링 트래픽을 허용하도록 권한을 부여할 수 없으며 인프라의 모니터링 서비스는 이러한 민감한 네임스페이스에서 아무것도 스크랩할 수 없습니다.

강력한 Allow 예제와 결합할 때 block-monitoring ANP는 우선순위가 높은 우선 순위 값을 가지므로 제한된 테넌트가 모니터링되지 않습니다.

AdminNetworkPolicy Pass 예

우선순위 7에 정의된 ANP는 모니터링 네임스페이스에서 내부 인프라 테넌트(네트러블 security가 있는 네임스페이스)로 들어오는 모든 수신 트래픽을 ACL의 계층 2로 전달하여 네임스페이스의 NetworkPolicy 오브젝트에 의해 평가됩니다.

예 26.4. 강력한 Pass ANP를 위한 YAML 파일의 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
  name: pass-monitoring
spec:
  priority: 7
  subject:
    namespaces:
      matchLabels:
        security: internal
  ingress:
  - name: "pass-ingress-from-monitoring"
    action: "Pass"
    from:
    - namespaces:
        namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: monitoring
# ...

이 예는 테넌트 소유자가 정의한 NetworkPolicy 오브젝트에 결정을 위임하기 때문에 강력한 Pass 작업 ANP입니다. 이 pass-monitoring ANP를 사용하면 모든 테넌트 소유자가 내부 보안 수준에서 그룹화하여 네임스페이스 범위 NetworkPolicy 오브젝트를 사용하여 인프라의 모니터링 서비스에서 메트릭을 스크랩해야 하는지 여부를 선택할 수 있습니다.

26.4.2. BaselineAdminNetworkPolicy

BMC( BaselineAdminNetworkPolicy )는 클러스터 범위의 CRD(사용자 정의 리소스 정의)입니다. OpenShift Container Platform 관리자는 BANP를 사용하여 NetworkPolicy 오브젝트를 사용하는 사용자가 덮어쓸 수 있는 선택적 기본 네트워크 정책 규칙을 설정하고 적용할 수 있습니다. BANP에 대한 규칙 작업은 허용 또는 거부 됩니다.

BaselineAdminNetworkPolicy 리소스는 전달된 트래픽 정책이 클러스터의 NetworkPolicy 오브젝트와 일치하지 않는 경우 가드레일 정책으로 사용할 수 있는 클러스터 싱글톤 오브젝트 입니다. BANP는 클러스터 내 트래픽이 기본적으로 차단되는 가드레일을 제공하는 기본 보안 모델로 사용할 수 있으며 사용자는 알려진 트래픽을 허용하기 위해 NetworkPolicy 오브젝트를 사용해야 합니다. BANP 리소스를 생성할 때 이름으로 default 를 사용해야 합니다.

관리자는 BANP를 사용하여 다음을 지정할 수 있습니다.

  • 네임스페이스 또는 네임스페이스 세트로 구성된 제목 입니다.
  • 제목 을 향하는 모든 인그레스 트래픽에 적용할 수신 규칙 목록입니다.
  • 제목의 모든 송신 트래픽에 적용할 송신 규칙 목록입니다.
참고

BaselineAdminNetworkPolicy 는 프로덕션에 없는 테스트 클러스터에서 활성화할 수 있는 TechnologyPreviewNoUpgrade 기능입니다.

BaselineAdminNetworkPolicy 예

예 26.5. BANP의 YAML 파일 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: BaselineAdminNetworkPolicy
metadata:
  name: default 1
spec:
  subject:
    namespaces:
      matchLabels:
          kubernetes.io/metadata.name: example.name 2
  ingress: 3
  - name: "deny-all-ingress-from-tenant-1" 4
    action: "Deny"
    from:
    - pods:
        namespaces:
          namespaceSelector:
            matchLabels:
              custom-banp: tenant-1 5
        podSelector:
          matchLabels:
            custom-banp: tenant-1 6
  egress:
  - name: "allow-all-egress-to-tenant-1"
    action: "Allow"
    to:
    - pods:
        namespaces:
          namespaceSelector:
            matchLabels:
              custom-banp: tenant-1
        podSelector:
          matchLabels:
            custom-banp: tenant-1
1
BANP는 싱글톤 오브젝트이므로 정책 이름을 기본값 으로 설정해야 합니다.
2
ANP를 적용할 네임스페이스를 지정합니다.
3
BANP에는 ingress 및 egress 규칙이 모두 있습니다. spec.ingressspec.egress 필드에 대한 BANP 규칙은 DenyAllow for the action 필드를 허용합니다.
4
ingress.name의 이름을 지정
5
BANP 리소스를 적용하려면 에서 Pod를 선택하도록 네임스페이스를 지정합니다.
6
BANP 리소스를 적용할 Pod의 podSelector.matchLabels 이름을 지정합니다.
BaselineAdminNetworkPolicy Deny 예

다음 BANP 싱글톤은 관리자가 내부 보안 수준에서 테넌트로 들어오는 모든 수신 모니터링 트래픽에 대한 기본 거부 정책을 설정하도록 합니다. "AdminNetworkPolicy Pass example"과 결합하면 이 거부 정책은 ANP pass-monitoring 정책에서 전달하는 모든 인그레스 트래픽에 대한 보호 정책 역할을 합니다.

예 26.6. guardrail Deny 규칙의 YAML 파일의 예

apiVersion: policy.networking.k8s.io/v1alpha1
kind: BaselineAdminNetworkPolicy
metadata:
  name: default
spec:
  subject:
    namespaces:
      matchLabels:
        security: internal
  ingress:
  - name: "deny-ingress-from-monitoring"
    action: "Deny"
    from:
    - namespaces:
        namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: monitoring
# ...

Baseline AdminNetworkPolicy 리소스와 함께 작업 필드의 Pass 값과 함께 AdminNetworkPolicy 리소스를 사용하여 다중 테넌트 정책을 생성할 수 있습니다. 이 다중 테넌트 정책을 사용하면 한 테넌트에서 두 번째 테넌트에서 데이터를 동시에 수집하지 않고 애플리케이션에서 모니터링 데이터를 수집할 수 있습니다.

관리자는 "AdminNetworkPolicy Pass 작업 예"와 "BaselineAdminNetwork Policy Deny example"을 모두 적용하면 테넌트는 BANP 전에 평가할 NetworkPolicy 리소스를 생성하도록 선택할 수 있는 기능을 남겨 둡니다.

예를 들어 Tenant 1은 다음 NetworkPolicy 리소스를 설정하여 수신 트래픽을 모니터링할 수 있습니다.

예 26.7. NetworkPolicy

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring
  namespace: tenant 1
spec:
  podSelector:
  policyTypes:
    - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: monitoring
# ...

이 시나리오에서 Tenant 1의 정책은 "AdminNetworkPolicy Pass 작업 예제" 및 "BaselineAdminNetwork Policy Deny example" 이전에 평가되며 보안 수준 internal 이 있는 테넌트로 들어오는 모든 수신 모니터링 트래픽을 거부합니다. Tenant 1의 NetworkPolicy 오브젝트를 사용하면 애플리케이션에서 데이터를 수집할 수 있습니다. 테넌트 2 그러나 NetworkPolicy 오브젝트가 없는 사용자는 데이터를 수집할 수 없습니다. 관리자는 기본적으로 내부 테넌트를 모니터링하지 않았으며 대신 테넌트가 NetworkPolicy 오브젝트를 사용하여 BANP의 기본 동작을 재정의할 수 있는 BANP를 생성했습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.