3.8. 컨테이너 네트워크 네임스페이스에서 마스터 인터페이스 구성


다음 섹션에서는 마스터 인터페이스를 기반으로 MAC-VLAN, IP-VLAN, VLAN 하위 인터페이스를 생성하고 관리하는 방법에 대한 지침 및 정보를 제공합니다.

컨테이너 네임스페이스에 있는 마스터 인터페이스를 기반으로 하는 MAC-VLAN, IP-VLAN 또는 VLAN 하위 인터페이스를 생성할 수 있습니다. 별도의 네트워크 연결 정의 CRD에서 Pod 네트워크 구성의 일부로 마스터 인터페이스를 생성할 수도 있습니다.

컨테이너 네임스페이스 마스터 인터페이스를 사용하려면 NetworkAttachmentDefinition CRD의 하위 인터페이스에 존재하는 linkInContainer 매개변수에 대해 true 를 지정해야 합니다.

3.8.1.1. SR-IOV VF에서 여러 VLAN 생성

이 기능을 사용하는 예제 사용 사례는 SR-IOV VF를 기반으로 여러 VLAN을 생성하는 것입니다. 이렇게 하려면 SR-IOV 네트워크를 생성한 다음 VLAN 인터페이스에 대한 네트워크 연결을 정의하는 것으로 시작합니다.

다음 예제에서는 이 다이어그램에 설명된 설정을 구성하는 방법을 보여줍니다.

그림 3.1. VLAN 생성

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • SR-IOV Network Operator가 설치되어 있습니다.

프로세스

  1. 다음 명령을 사용하여 Pod를 배포하려는 전용 컨테이너 네임스페이스를 생성합니다.

    $ oc new-project test-namespace
    Copy to Clipboard Toggle word wrap
  2. SR-IOV 노드 정책을 생성합니다.

    1. SriovNetworkNodePolicy 오브젝트를 생성한 다음 YAML을 sriov-node-network-policy.yaml 파일에 저장합니다.

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
       name: sriovnic
       namespace: openshift-sriov-network-operator
      spec:
       deviceType: netdevice
       isRdma: false
       needVhostNet: true
       nicSelector:
         vendor: "15b3" 
      1
      
         deviceID: "101b" 
      2
      
         rootDevices: ["00:05.0"]
       numVfs: 10
       priority: 99
       resourceName: sriovnic
       nodeSelector:
          feature.node.kubernetes.io/network-sriov.capable: "true"
      Copy to Clipboard Toggle word wrap
      참고

      deviceType: netdevice 설정을 사용하는 SR-IOV 네트워크 노드 정책 구성 예제는 Mellanox Network Interface Cards(NIC)에 맞게 조정됩니다.

      1
      SR-IOV 네트워크 장치의 벤더 16진수 코드입니다. 값 15b3 은 Mellanox NIC와 연결되어 있습니다.
      2
      SR-IOV 네트워크 장치의 장치 16진수 코드입니다.
    2. 다음 명령을 실행하여 YAML을 적용합니다.

      $ oc apply -f sriov-node-network-policy.yaml
      Copy to Clipboard Toggle word wrap
      참고

      노드를 재부팅해야 하므로 이를 적용하는 데 다소 시간이 걸릴 수 있습니다.

  3. SR-IOV 네트워크를 생성합니다.

    1. 다음 예제 CR과 같이 추가 보조 SR-IOV 네트워크 연결에 대한 SriovNetwork CR(사용자 정의 리소스)을 생성합니다. YAML을 sriov-network-attachment.yaml 파일로 저장합니다.

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
       name: sriov-network
       namespace: openshift-sriov-network-operator
      spec:
       networkNamespace: test-namespace
       resourceName: sriovnic
       spoofChk: "off"
       trust: "on"
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 YAML을 적용합니다.

      $ oc apply -f sriov-network-attachment.yaml
      Copy to Clipboard Toggle word wrap
  4. VLAN 보조 네트워크를 생성합니다.

    1. 다음 YAML 예제를 사용하여 vlan100-additional-network-configuration.yaml 이라는 파일을 만듭니다.

      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: vlan-100
        namespace: test-namespace
      spec:
        config: |
          {
            "cniVersion": "0.4.0",
            "name": "vlan-100",
            "plugins": [
              {
                "type": "vlan",
                "master": "ext0", 
      1
      
                "mtu": 1500,
                "vlanId": 100,
                "linkInContainer": true, 
      2
      
                "ipam": {"type": "whereabouts", "ipRanges": [{"range": "1.1.1.0/24"}]}
              }
            ]
          }
      Copy to Clipboard Toggle word wrap
      1
      VLAN 구성은 마스터 이름을 지정해야 합니다. Pod 네트워크 주석에서 구성할 수 있습니다.
      2
      linkInContainer 매개변수를 지정해야 합니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f vlan100-additional-network-configuration.yaml
      Copy to Clipboard Toggle word wrap
  5. 이전 지정된 네트워크를 사용하여 포드 정의를 생성합니다.

    1. 다음 YAML 예제를 사용하여 pod-a.yaml 파일이라는 파일을 생성합니다.

      참고

      아래 매니페스트에는 다음 두 가지 리소스가 포함됩니다.

      • 보안 레이블이 있는 네임스페이스
      • 적절한 네트워크 주석이 있는 Pod 정의
      apiVersion: v1
      kind: Namespace
      metadata:
        name: test-namespace
        labels:
          pod-security.kubernetes.io/enforce: privileged
          pod-security.kubernetes.io/audit: privileged
          pod-security.kubernetes.io/warn: privileged
          security.openshift.io/scc.podSecurityLabelSync: "false"
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-pod
        namespace: test-namespace
        annotations:
          k8s.v1.cni.cncf.io/networks: '[
            {
              "name": "sriov-network",
              "namespace": "test-namespace",
              "interface": "ext0" 
      1
      
            },
            {
              "name": "vlan-100",
              "namespace": "test-namespace",
              "interface": "ext0.100"
            }
          ]'
      spec:
        securityContext:
          runAsNonRoot: true
        containers:
          - name: nginx-container
            image: nginxinc/nginx-unprivileged:latest
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            ports:
              - containerPort: 80
            seccompProfile:
              type: "RuntimeDefault"
      Copy to Clipboard Toggle word wrap
      1
      VLAN 인터페이스의 마스터 로 사용할 이름입니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f pod-a.yaml
      Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 test-namespace 내에서 nginx-pod 에 대한 자세한 정보를 가져옵니다.

    $ oc describe pods nginx-pod -n test-namespace
    Copy to Clipboard Toggle word wrap

    출력 예

    Name:         nginx-pod
    Namespace:    test-namespace
    Priority:     0
    Node:         worker-1/10.46.186.105
    Start Time:   Mon, 14 Aug 2023 16:23:13 -0400
    Labels:       <none>
    Annotations:  k8s.ovn.org/pod-networks:
                    {"default":{"ip_addresses":["10.131.0.26/23"],"mac_address":"0a:58:0a:83:00:1a","gateway_ips":["10.131.0.1"],"routes":[{"dest":"10.128.0.0...
                  k8s.v1.cni.cncf.io/network-status:
                    [{
                        "name": "ovn-kubernetes",
                        "interface": "eth0",
                        "ips": [
                            "10.131.0.26"
                        ],
                        "mac": "0a:58:0a:83:00:1a",
                        "default": true,
                        "dns": {}
                    },{
                        "name": "test-namespace/sriov-network",
                        "interface": "ext0",
                        "mac": "6e:a7:5e:3f:49:1b",
                        "dns": {},
                        "device-info": {
                            "type": "pci",
                            "version": "1.0.0",
                            "pci": {
                                "pci-address": "0000:d8:00.2"
                            }
                        }
                    },{
                        "name": "test-namespace/vlan-100",
                        "interface": "ext0.100",
                        "ips": [
                            "1.1.1.1"
                        ],
                        "mac": "6e:a7:5e:3f:49:1b",
                        "dns": {}
                    }]
                  k8s.v1.cni.cncf.io/networks:
                    [ { "name": "sriov-network", "namespace": "test-namespace", "interface": "ext0" }, { "name": "vlan-100", "namespace": "test-namespace", "i...
                  openshift.io/scc: privileged
    Status:       Running
    IP:           10.131.0.26
    IPs:
      IP:  10.131.0.26
    Copy to Clipboard Toggle word wrap

컨테이너 네임스페이스에 존재하는 브리지 마스터 인터페이스를 기반으로 하위 인터페이스를 생성할 수 있습니다. 하위 인터페이스 생성은 다른 유형의 인터페이스에 적용할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 OpenShift Container Platform 클러스터에 로그인되어 있습니다.

프로세스

  1. 다음 명령을 입력하여 Pod를 배포할 전용 컨테이너 네임스페이스를 생성합니다.

    $ oc new-project test-namespace
    Copy to Clipboard Toggle word wrap
  2. 다음 YAML 예제를 사용하여 bridge-nad.yaml 이라는 브릿지 NetworkAttachmentDefinition CRD(사용자 정의 리소스 정의) 파일을 생성합니다.

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bridge-network
    spec:
      config: '{
        "cniVersion": "0.4.0",
        "name": "bridge-network",
        "type": "bridge",
        "bridge": "br-001",
        "isGateway": true,
        "ipMasq": true,
        "hairpinMode": true,
        "ipam": {
          "type": "host-local",
          "subnet": "10.0.0.0/24",
          "routes": [{"dst": "0.0.0.0/0"}]
        }
      }'
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 NetworkAttachmentDefinition CRD를 OpenShift Container Platform 클러스터에 적용합니다.

    $ oc apply -f bridge-nad.yaml
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 입력하여 NetworkAttachmentDefinition CRD를 성공적으로 생성했는지 확인합니다. 예상되는 출력에는 CryostatD CRD의 이름과 생성 기간이 분 단위로 표시됩니다.

    $ oc get network-attachment-definitions
    Copy to Clipboard Toggle word wrap
  5. 다음 YAML 예제를 사용하여 IPVLAN 보조 네트워크 구성에 사용할 ipvlan-additional-network-configuration.yaml 이라는 파일을 생성합니다.

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: ipvlan-net
      namespace: test-namespace
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "ipvlan-net",
        "type": "ipvlan",
        "master": "net1", 
    1
    
        "mode": "l3",
        "linkInContainer": true, 
    2
    
        "ipam": {"type": "whereabouts", "ipRanges": [{"range": "10.0.0.0/24"}]}
      }'
    Copy to Clipboard Toggle word wrap
    1
    네트워크 연결과 연결할 이더넷 인터페이스를 지정합니다. 나중에 Pod 네트워크 주석에 구성됩니다.
    2
    마스터 인터페이스가 컨테이너 네트워크 네임스페이스에 있음을 지정합니다.
  6. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f ipvlan-additional-network-configuration.yaml
    Copy to Clipboard Toggle word wrap
  7. 다음 명령을 실행하여 NetworkAttachmentDefinition CRD가 성공적으로 생성되었는지 확인합니다. 예상되는 출력에는 CryostatD CRD의 이름과 생성 기간이 분 단위로 표시됩니다.

    $ oc get network-attachment-definitions
    Copy to Clipboard Toggle word wrap
  8. 다음 YAML 예제를 사용하여 Pod 정의에 사용할 pod-a.yaml 이라는 파일을 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-a
      namespace: test-namespace
      annotations:
        k8s.v1.cni.cncf.io/networks: '[
          {
            "name": "bridge-network",
            "interface": "net1" 
    1
    
          },
          {
            "name": "ipvlan-net",
            "interface": "net2"
          }
        ]'
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
      - name: test-pod
        image: quay.io/openshifttest/hello-sdn@sha256:c89445416459e7adea9a5a416b3365ed3d74f2491beb904d61dc8d1eb89a72a4
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: [ALL]
    Copy to Clipboard Toggle word wrap
    1
    IPVLAN 인터페이스의 마스터 로 사용할 이름을 지정합니다.
  9. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f pod-a.yaml
    Copy to Clipboard Toggle word wrap
  10. 다음 명령을 사용하여 Pod가 실행 중인지 확인합니다.

    $ oc get pod -n test-namespace
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME    READY   STATUS    RESTARTS   AGE
    pod-a   1/1     Running   0          2m36s
    Copy to Clipboard Toggle word wrap

  11. 다음 명령을 실행하여 test-namespace 내에서 pod-a 리소스에 대한 네트워크 인터페이스 정보를 표시합니다.

    $ oc exec -n test-namespace pod-a -- ip a
    Copy to Clipboard Toggle word wrap

    출력 예

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    3: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default
        link/ether 0a:58:0a:d9:00:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.217.0.93/23 brd 10.217.1.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::488b:91ff:fe84:a94b/64 scope link
           valid_lft forever preferred_lft forever
    4: net1@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
        link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.0.0.2/24 brd 10.0.0.255 scope global net1
           valid_lft forever preferred_lft forever
        inet6 fe80::bcda:bdff:fe7e:f437/64 scope link
           valid_lft forever preferred_lft forever
    5: net2@net1: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/24 brd 10.0.0.255 scope global net2
           valid_lft forever preferred_lft forever
        inet6 fe80::beda:bd00:17e:f437/64 scope link
           valid_lft forever preferred_lft forever
    Copy to Clipboard Toggle word wrap

    이 출력은 네트워크 인터페이스 net2 가 물리적 인터페이스 net1 과 연결되어 있음을 보여줍니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat