3.4. 다중 네트워크 정책 구성


관리자는 MultiNetworkPolicy API를 사용하여 보조 네트워크에 연결된 포드의 트래픽을 관리하는 여러 네트워크 정책을 만들 수 있습니다. 예를 들어, 특정 포트, IP/범위 또는 레이블을 기준으로 트래픽을 허용하거나 거부하는 정책을 만들 수 있습니다.

다중 네트워크 정책은 클러스터 내의 보조 네트워크의 트래픽을 관리하는 데 사용될 수 있습니다. 이러한 정책은 기본 클러스터 네트워크나 사용자 정의 네트워크의 기본 네트워크를 관리할 수 없습니다.

클러스터 관리자는 다음 네트워크 유형에 대해 다중 네트워크 정책을 구성할 수 있습니다.

  • 단일 루트 I/O 가상화(SR-IOV)
  • MAC 가상 로컬 영역 네트워크(MacVLAN)
  • IP 가상 로컬 영역 네트워크(IPVLAN)
  • SR-IOV를 통한 본드 컨테이너 네트워크 인터페이스(CNI)
  • OVN-Kubernetes 보조 네트워크
참고

SR-IOV 보조 네트워크에 대한 다중 네트워크 정책 구성 지원은 커널 네트워크 인터페이스 컨트롤러(NIC)에서만 지원됩니다. SR-IOV는 DPDK(Data Plane Development Kit) 애플리케이션에서 지원되지 않습니다.

3.4.1. 다중 네트워크 정책과 네트워크 정책의 차이점

MultiNetworkPolicy API는 NetworkPolicy API를 구현하지만 다음과 같은 몇 가지 중요한 차이점이 있습니다.

  • MultiNetworkPolicy API를 사용해야 합니다.

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    Copy to Clipboard Toggle word wrap
  • CLI를 사용하여 다중 네트워크 정책과 상호 작용할 때 multi-networkpolicy 리소스 이름을 사용해야 합니다. 예를 들어 oc get multi-networkpolicy <name> 명령을 사용하여 다중 네트워크 정책 오브젝트를 볼 수 있습니다. 여기서 <name>은 다중 네트워크 정책의 이름입니다.
  • MultiNetworkPolicy 객체에서 k8s.v1.cni.cncf.io/policy-for 주석을 사용하여 NetworkAttachmentDefinition (NAD) 사용자 정의 리소스(CR)를 가리킬 수 있습니다. NAD CR은 정책이 적용되는 네트워크를 정의합니다.

    k8s.v1.cni.cncf.io/policy-for 주석을 포함하는 다중 네트워크 정책 예

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <namespace_name>
    네임스페이스 이름을 지정합니다.
    <network_name>
    네트워크 연결 정의의 이름을 지정합니다.

3.4.2. 클러스터의 다중 네트워크 정책 활성화

클러스터 관리자는 클러스터에서 다중 네트워크 정책 지원을 활성화할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.

프로세스

  1. 다음 YAML을 사용하여 multinetwork-enable-patch.yaml 파일을 생성합니다.

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      useMultiNetworkPolicy: true
    Copy to Clipboard Toggle word wrap
  2. 다중 네트워크 정책을 활성화하도록 클러스터를 구성합니다. 성공적인 출력에는 정책 개체의 이름과 패치 상태가 나열됩니다.

    $ oc patch network.operator.openshift.io cluster --type=merge --patch-file=multinetwork-enable-patch.yaml
    Copy to Clipboard Toggle word wrap

3.4.3. IPv6 네트워크에서 다중 네트워크 정책 지원

ICMPv6 Neighbor Discovery Protocol(NDP)은 장치가 이웃 노드에 대한 정보를 검색하고 유지 관리할 수 있도록 하는 메시지와 프로세스 집합입니다. NDP는 IPv6 네트워크에서 중요한 역할을 하며, 동일한 링크에 있는 장치 간의 상호 작용을 원활하게 해줍니다.

CNO(클러스터 네트워크 운영자)는 useMultiNetworkPolicy 매개변수가 true 로 설정된 경우 다중 네트워크 정책의 iptables 구현을 배포합니다.

IPv6 네트워크에서 다중 네트워크 정책을 지원하기 위해 클러스터 네트워크 운영자는 다중 네트워크 정책의 영향을 받는 모든 포드에 다음 규칙 집합을 배포합니다.

다중 네트워크 정책 사용자 정의 규칙

kind: ConfigMap
apiVersion: v1
metadata:
  name: multi-networkpolicy-custom-rules
  namespace: openshift-multus
data:

  custom-v6-rules.txt: |
    # accept NDP
    -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT 
1

    -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT 
2

    # accept RA/RS
    -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT 
3

    -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT 
4
Copy to Clipboard Toggle word wrap

1
이 규칙은 이웃 검색 프로토콜(NDP)의 일부인 수신 ICMPv6 이웃 요청 메시지를 허용합니다. 이러한 메시지는 이웃 노드의 링크 계층 주소를 결정하는 데 도움이 됩니다.
2
이 규칙은 NDP의 일부이며 발신자의 링크 계층 주소에 대한 정보를 제공하는 수신 ICMPv6 이웃 광고 메시지를 허용합니다.
3
이 규칙은 들어오는 ICMPv6 라우터 요청 메시지를 허용합니다. 호스트는 이러한 메시지를 사용하여 라우터 구성 정보를 요청합니다.
4
이 규칙은 호스트에 구성 정보를 제공하는 수신 ICMPv6 라우터 광고 메시지를 허용합니다.
참고

미리 정의된 규칙은 편집할 수 없습니다.

이러한 규칙은 IPv6 환경에서 주소 확인 및 라우터 통신을 포함하여 올바른 네트워크 기능을 위해 필수적인 ICMPv6 트래픽을 활성화합니다. 이러한 규칙이 적용되고 트래픽을 거부하는 다중 네트워크 정책이 있으면 애플리케이션에서 연결 문제가 발생할 가능성은 없습니다.

3.4.4. 다중 네트워크 정책 작업

클러스터 관리자는 다중 네트워크 정책을 생성, 편집, 보기 및 삭제할 수 있습니다.

3.4.4.1. 사전 요구 사항

  • 클러스터에 대한 다중 네트워크 정책 지원을 활성화했습니다.

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

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

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

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

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

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

      다음과 같습니다.

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

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

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

      apiVersion: k8s.cni.cncf.io/v1beta1
      kind: MultiNetworkPolicy
      metadata:
        name: deny-by-default
        annotations:
          k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
      spec:
        podSelector: {}
        policyTypes:
        - Ingress
        ingress: []
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <network_name>
      네트워크 연결 정의의 이름을 지정합니다.

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

      apiVersion: k8s.cni.cncf.io/v1beta1
      kind: MultiNetworkPolicy
      metadata:
        name: allow-same-namespace
        annotations:
          k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
      spec:
        podSelector:
        ingress:
        - from:
          - podSelector: {}
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <network_name>
      네트워크 연결 정의의 이름을 지정합니다.

      특정 네임스페이스에서 하나의 포드로의 유입 트래픽 허용

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

      apiVersion: k8s.cni.cncf.io/v1beta1
      kind: MultiNetworkPolicy
      metadata:
        name: allow-traffic-pod
        annotations:
          k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
      spec:
        podSelector:
         matchLabels:
            pod: pod-a
        policyTypes:
        - Ingress
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                 kubernetes.io/metadata.name: namespace-y
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <network_name>
      네트워크 연결 정의의 이름을 지정합니다.

      서비스로의 트래픽 제한

      이 정책을 적용하면 app=bookstorerole=api 레이블이 있는 모든 포드는 app=bookstore 레이블이 있는 포드에서만 액세스할 수 있습니다. 이 예에서 애플리케이션은 app=bookstorerole=api 라벨이 표시된 REST API 서버가 될 수 있습니다.

      이 예제에서는 다음과 같은 사용 사례를 다룹니다.

      • 특정 서비스의 트래픽을 해당 서비스를 사용해야 하는 다른 마이크로서비스로만 제한합니다.
      • 해당 애플리케이션에서만 데이터베이스를 사용할 수 있도록 연결을 제한합니다.

        apiVersion: k8s.cni.cncf.io/v1beta1
        kind: MultiNetworkPolicy
        metadata:
          name: api-allow
          annotations:
            k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
        spec:
          podSelector:
            matchLabels:
              app: bookstore
              role: api
          ingress:
          - from:
              - podSelector:
                  matchLabels:
                    app: bookstore
        Copy to Clipboard Toggle word wrap

        다음과 같습니다.

        <network_name>
        네트워크 연결 정의의 이름을 지정합니다.
  2. 다중 네트워크 정책 개체를 생성하려면 다음 명령을 입력하세요. 성공적인 출력에는 정책 개체의 이름과 생성 상태가 나열됩니다.

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

    다음과 같습니다.

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

    성공적인 출력에는 정책 개체의 이름과 생성 상태가 나열됩니다.

참고

클러스터 관리자 권한으로 웹 콘솔에 로그인하면 YAML에서 직접 또는 웹 콘솔의 양식을 통해 클러스터의 모든 네임스페이스에 네트워크 정책을 만들 수 있습니다.

3.4.4.3. 다중 네트워크 정책 편집

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

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 선택 사항: 네임스페이스의 다중 네트워크 정책 오브젝트를 나열하려면 다음 명령을 입력합니다.

    $ oc get multi-networkpolicy
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

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

    • 다중 네트워크 정책 정의를 파일에 저장한 경우 파일을 편집하고 필요한 사항을 변경한 후 다음 명령을 입력합니다.

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

      다음과 같습니다.

      <namespace>
      선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
      <policy_file>
      네트워크 정책이 포함된 파일의 이름을 지정합니다.
    • 다중 네트워크 정책 오브젝트를 직접 업데이트해야 하는 경우 다음 명령을 입력합니다.

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

      다음과 같습니다.

      <policy_name>
      네트워크 정책의 이름을 지정합니다.
      <namespace>
      선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
  3. 다중 네트워크 정책 오브젝트가 업데이트되었는지 확인합니다.

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

    다음과 같습니다.

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

클러스터 관리자 권한으로 웹 콘솔에 로그인하면 클러스터의 모든 네임스페이스에서 네트워크 정책을 YAML에서 직접 편집하거나 웹 콘솔의 작업 메뉴를 통해 정책을 편집할 수 있습니다.

3.4.4.4. CLI를 사용하여 다중 네트워크 정책 보기

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

사전 요구 사항

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

프로세스

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

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

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

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

      다음과 같습니다.

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

클러스터 관리자 권한으로 웹 콘솔에 로그인하면 클러스터의 모든 네임스페이스에 있는 네트워크 정책을 YAML에서 직접 보거나 웹 콘솔의 양식을 통해 볼 수 있습니다.

3.4.4.5. CLI를 사용하여 다중 네트워크 정책 삭제

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

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

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

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

    다음과 같습니다.

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

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

참고

클러스터 관리자 권한으로 웹 콘솔에 로그인하면 YAML에서 직접 클러스터의 네임스페이스에 있는 네트워크 정책을 삭제하거나, 작업 메뉴를 통해 웹 콘솔의 정책을 통해 삭제할 수 있습니다.

3.4.4.6. 모든 다중 네트워크 거부 기본 정책 만들기

이 정책은 다른 배포된 네트워크 정책의 구성에 의해 허용되는 네트워크 트래픽과 호스트 네트워크에 연결된 포드 간 트래픽을 제외한 모든 크로스 포드 네트워킹을 차단합니다. 이 절차는 my-project 네임스페이스에 deny-by-default 정책을 적용하여 강력한 거부 정책을 시행합니다.

주의

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

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 모든 네임스페이스의 모든 포드에서 들어오는 트래픽을 거부하는 기본 거부 정책을 정의하는 다음 YAML을 만듭니다. deny-by-default.yaml 파일에 YAML을 저장합니다.

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      name: deny-by-default
      namespace: my-project 
    1
    
      annotations:
        k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> 
    2
    
    spec:
      podSelector: {} 
    3
    
      policyTypes: 
    4
    
      - Ingress 
    5
    
      ingress: [] 
    6
    Copy to Clipboard Toggle word wrap
    1
    정책을 배포할 네임스페이스를 지정합니다. 예를 들어, my-project 네임스페이스.
    2
    네임스페이스 프로젝트 이름 뒤에 네트워크 연결 정의 이름을 지정합니다.
    3
    이 필드가 비어 있으면 구성이 모든 포드와 일치합니다. 따라서 해당 정책은 my-project 네임스페이스의 모든 포드에 적용됩니다.
    4
    NetworkPolicy 와 관련된 규칙 유형 목록을 지정합니다.
    5
    Ingress 전용 policyTypes를 지정합니다.
    6
    수신 규칙을 지정합니다. 지정하지 않으면 모든 포드에 대한 모든 수신 트래픽이 삭제됩니다.
  2. 다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 개체의 이름과 생성 상태가 나열됩니다.

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

    성공적인 출력에는 정책 개체의 이름과 생성 상태가 나열됩니다.

기본적으로 거부 정책이 적용되면 app=web 레이블이 있는 포드로의 외부 클라이언트의 트래픽을 허용하는 정책을 구성할 수 있습니다.

참고

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

공용 인터넷에서 직접 또는 로드 밸런서를 사용하여 포드에 액세스하는 외부 서비스를 허용하는 정책을 구성하려면 다음 절차를 따르세요. 트래픽은 app=web 라벨이 있는 Pod에만 허용됩니다.

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

  1. 퍼블릭 인터넷에서 직접 또는 로드 밸런서를 사용하여 트래픽이 포드에 액세스할 수 있도록 허용하는 정책을 만듭니다. web-allow-external.yaml 파일에 YAML을 저장합니다.

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      name: web-allow-external
      namespace: default
      annotations:
        k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
    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 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.

모든 네임스페이스의 모든 포드에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 구성하려면 다음 절차를 따르세요.

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

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

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      name: web-allow-all-namespaces
      namespace: default
      annotations:
        k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
    spec:
      podSelector:
        matchLabels:
          app: web 
    1
    
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector: {} 
    2
    Copy to Clipboard Toggle word wrap
    1
    이 정책은 기본 네임스페이스의 app:web 포드에만 적용됩니다.
    2
    모든 네임스페이스의 모든 포드를 선택합니다.
    참고

    기본적으로 정책 개체에서 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. 다음 명령을 실행하여 보조 네임스페이스에 알파인 이미지를 배포하고 셸을 시작합니다.

    $ 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 레이블이 있는 포드로의 트래픽을 허용하는 정책을 구성하려면 다음 절차를 따르세요. 다음과 같은 경우 이 작업을 수행할 수 있습니다.

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

사전 요구 사항

  • 클러스터는 NetworkPolicy 객체를 지원하는 네트워크 플러그인(예: OVN-Kubernetes 네트워크 플러그인)을 사용하며, 모드: NetworkPolicy가 설정되어 있습니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터 관리자 권한이 있는 사용자로 클러스터에 로그인했습니다.
  • 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.

프로세스

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

    apiVersion: k8s.cni.cncf.io/v1beta1
    kind: MultiNetworkPolicy
    metadata:
      name: web-allow-prod
      namespace: default
      annotations:
        k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
    spec:
      podSelector:
        matchLabels:
          app: web 
    1
    
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              purpose: production 
    2
    Copy to Clipboard Toggle word wrap
    1
    이 정책은 기본 네임스페이스의 app:web 포드에만 적용됩니다.
    2
    라벨이 purpose=production 인 네임스페이스의 포드에만 트래픽을 제한합니다.
  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

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat