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


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

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

컨테이너 네임스페이스 마스터 인터페이스를 사용하려면 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 네트워크 인터페이스 카드(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 파일이라는 이름의 파일을 만듭니다.

      참고

      아래 매니페스트에는 2개의 리소스가 포함되어 있습니다.

      • 보안 레이블이 있는 네임스페이스
      • 적절한 네트워크 주석이 포함된 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가 성공적으로 생성되었는지 확인하세요. 예상되는 출력에는 NAD 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가 성공적으로 생성되었는지 확인하세요. 예상되는 출력에는 NAD CRD의 이름과 생성 시간(분)이 표시됩니다.

    $ oc get network-attachment-definitions
    Copy to Clipboard Toggle word wrap
  8. 다음 YAML 예제를 사용하여 포드 정의를 위한 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