4장. SR-IOV InfiniBand 네트워크 연결 구성


클러스터에서 SR-IOV(Single Root I/O Virtualization) 장치에 대한 IB(InfiniBand) 네트워크 연결을 구성할 수 있습니다.

다음 문서의 작업을 수행하기 전에 SR-IOV 네트워크 운영자가 설치되어 있는지 확인하세요.

4.1. InfiniBand 장치 구성 오브젝트

SriovIBNetwork 오브젝트를 정의하여 IB(InfiniBand) 네트워크 장치를 구성할 수 있습니다.

다음 YAML은 SriovIBNetwork 오브젝트를 설명합니다.

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovIBNetwork
metadata:
  name: <name>
  namespace: openshift-sriov-network-operator
spec:
  resourceName: <sriov_resource_name>
  networkNamespace: <target_namespace>
  ipam: |-
    {}
  linkState: <link_state>
  capabilities: <capabilities>
Copy to Clipboard Toggle word wrap

다음과 같습니다.

name
오브젝트의 이름입니다. SR-IOV Network Operator는 동일한 이름으로 NetworkAttachmentDefinition 오브젝트를 생성합니다.
네임스페이스
SR-IOV Operator가 설치된 네임스페이스입니다.
resourceName
이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는 SriovNetworkNodePolicy 오브젝트의 spec.resourceName 매개변수 값입니다.
networkNamespace
SriovIBNetwork 오브젝트의 대상 네임스페이스입니다. 대상 네임스페이스의 포드만 네트워크 장치에 연결할 수 있습니다.
ipam
선택적 매개변수입니다. YAML 블록 스칼라인 IPAM CNI 플러그인에 대한 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.
linkState
선택적 매개변수입니다. 가상 함수(VF)의 링크 상태. 허용되는 값은 enable, disable, auto입니다.
capabilities
선택적 매개변수입니다. 이 네트워크를 구성하는 기능입니다. IP 주소 지원을 사용하려면 "{ "ips": true }"를 지정하고 IB GUID(Global Unique Identifier) 지원을 사용하려면 "{ "infinibandGUID": true }"를 지정하면 됩니다.

4.1.1. 듀얼 스택 IP 주소를 동적으로 할당하기 위한 구성 생성

보조 네트워크에 듀얼 스택 IP 주소를 동적으로 할당하면 포드가 IPv4 및 IPv6 주소 모두를 통해 통신할 수 있습니다.

ipRanges 매개변수에서 다음 IP 주소 할당 유형을 구성할 수 있습니다.

  • IPv4 주소
  • IPv6 주소
  • 다중 IP 주소 할당

프로세스

  1. 유형을 whereabouts 로 설정합니다.
  2. 다음 예와 같이 ipRanges를 사용하여 IP 주소를 할당합니다.

    cniVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        type: Raw
        rawCNIConfig: |-
          {
           "name": "whereabouts-dual-stack",
           "cniVersion": "0.3.1,
           "type": "bridge",
           "ipam": {
             "type": "whereabouts",
             "ipRanges": [
                      {"range": "192.168.10.0/24"},
                      {"range": "2001:db8::/64"}
                  ]
           }
          }
    Copy to Clipboard Toggle word wrap
  3. 보조 네트워크를 포드에 연결합니다. 자세한 내용은 "보조 네트워크에 포드 추가"를 참조하세요.

검증

  • 다음 명령을 입력하여 Pod의 네트워크 네임스페이스 내 네트워크 인터페이스에 모든 IP 주소가 할당되었는지 확인하세요.

    $ oc exec -it <pod_name> -- ip a
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <podname>
    Pod의 이름입니다.

4.1.2. 네트워크 연결을 위한 IP 주소 할당 구성

2차 네트워크의 경우 다양한 할당 방법(DHCP(동적 호스트 구성 프로토콜) 및 정적 할당 포함)을 지원하는 IP 주소 관리(IPAM) CNI 플러그인을 사용하여 IP 주소를 할당할 수 있습니다.

IP 주소의 동적 할당을 담당하는 DHCP IPAM CNI 플러그인은 두 가지 고유한 구성 요소로 작동합니다.

  • CNI 플러그인: IP 주소를 요청하고 해제하기 위해 Kubernetes 네트워킹 스택과 통합하는 역할을 합니다.
  • DHCP IPAM CNI 데몬: 환경 내 기존 DHCP 서버와 협력하여 IP 주소 할당 요청을 처리하는 DHCP 이벤트 리스너입니다. 이 데몬 자체는 DHCP 서버가 아닙니다.

IPAM 구성에서 dhcp 유형이 필요한 네트워크의 경우 DHCP 서버가 다음 조건을 충족하는지 확인하세요.

  • DHCP 서버가 사용 가능하고 환경에서 실행 중입니다.
  • DHCP 서버는 클러스터 외부에 있으며, 해당 서버가 고객을 위한 기존 네트워크 인프라의 일부를 형성할 것으로 예상합니다.
  • DHCP 서버는 노드에 IP 주소를 제공하도록 적절하게 구성됩니다.

환경에서 DHCP 서버를 사용할 수 없는 경우 Whereabouts IPAM CNI 플러그인을 사용하는 것을 고려하세요. Whereabouts CNI는 외부 DHCP 서버가 필요 없이 유사한 IP 주소 관리 기능을 제공합니다.

참고

외부 DHCP 서버가 없거나 정적 IP 주소 관리가 선호되는 경우 Whereabouts CNI 플러그인을 사용하세요. Whereabouts 플러그인에는 오래된 IP 주소 할당을 관리하는 조정자 데몬이 포함되어 있습니다.

DHCP IPAM CNI 데몬이라는 별도의 데몬을 포함하여 컨테이너의 수명 동안 DHCP 임대를 주기적으로 갱신합니다. DHCP IPAM CNI 데몬을 배포하려면 클러스터 네트워크 운영자(CNO) 구성을 변경하여 이 데몬이 보조 네트워크 설정의 일부로 배포되도록 합니다.

4.1.2.1. 고정 IP 주소 할당 구성

다음 JSON은 고정 IP 주소 할당 구성에 대해 설명합니다.

Expand
표 4.1. ipam 정적 구성 객체
필드유형설명

type

string

IPAM 주소 유형. static 값이 필요합니다.

addresses

array

가상 인터페이스에 할당할 IP 주소를 지정하는 객체의 배열입니다. IPv4 및 IPv6 IP 주소가 모두 지원됩니다.

routes

array

포드 내부에서 구성할 경로를 지정하는 객체 배열입니다.

dns

array

선택 사항: DNS 구성을 지정하는 객체 배열입니다.

주소 배열에는 다음 필드가 있는 객체가 필요합니다.

Expand
표 4.2. ipam.addresses[] array
필드유형설명

address

string

지정하는 IP 주소 및 네트워크 접두사입니다. 예를 들어, 10.10.21.10/24를 지정하면 보조 네트워크에 IP 주소 10.10.21.10 과 넷마스크 255.255.255.0이 할당됩니다.

gateway

string

송신 네트워크 트래픽을 라우팅할 기본 게이트웨이입니다.

Expand
표 4.3. ipam.routes[] 배열
필드유형설명

dst

string

CIDR 형식의 IP 주소 범위(예: 192.168.17.0/24 또는 기본 경로의 경우 0.0.0.0/0)입니다.

gw

string

네트워크 트래픽을 라우팅하는 게이트웨이.

Expand
표 4.4. ipam.dns 객체
필드유형설명

네임서버

array

DNS 쿼리가 전송되는 하나 이상의 IP 주소 배열입니다.

domain

array

호스트 이름에 추가할 기본 도메인입니다. 예를 들어 도메인이 example.com으로 설정되면 example-host에 대한 DNS 조회 쿼리가 example-host.example.com으로 다시 작성됩니다.

search

array

DNS 조회 쿼리 중에 규정되지 않은 호스트 이름(예: example-host)에 추가할 도메인 이름 배열입니다.

고정 IP 주소 할당 구성 예

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}
Copy to Clipboard Toggle word wrap

4.1.2.2. 동적 IP 주소(DHCP) 할당 구성

포드는 생성될 때 원래의 DHCP 임대권을 얻습니다. 리스는 클러스터에서 실행되는 최소 DHCP 서버 배포를 통해 주기적으로 갱신되어야 합니다.

중요

이더넷 네트워크 연결의 경우, SR-IOV 네트워크 운영자는 DHCP 서버 배포를 생성하지 않습니다. 클러스터 네트워크 운영자가 최소한의 DHCP 서버 배포를 생성해야 합니다.

DHCP 서버 배포를 트리거하려면 다음 예와 같이 Cluster Network Operator 구성을 편집하여 shim 네트워크 연결을 만들어야 합니다.

shim 네트워크 연결 정의 예

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...
Copy to Clipboard Toggle word wrap

다음과 같습니다.

type
클러스터에 대한 동적 IP 주소 할당을 지정합니다.
4.1.2.2.1. Whereabouts를 사용한 동적 IP 주소 할당 구성

Whereabouts CNI 플러그인은 DHCP 서버를 사용하지 않고 보조 네트워크에 IP 주소를 동적으로 할당하는 데 도움이 됩니다.

Whereabouts CNI 플러그인은 또한 중복되는 IP 주소 범위와 별도의 NetworkAttachmentDefinition CRD 내에서 동일한 CIDR 범위를 여러 번 구성하는 것을 지원합니다. 이를 통해 멀티테넌트 환경에서 더 큰 유연성과 관리 기능이 제공됩니다.

4.1.2.2.1.1. 동적 IP 주소 구성 매개변수

다음 표에서는 Whereabouts를 사용한 동적 IP 주소 할당을 위한 구성 개체를 설명합니다.

Expand
표 4.5. ipam 위치 구성 매개변수
필드유형설명

type

string

IPAM 주소 유형. whereabouts 값이 필요합니다.

범위

string

CIDR 표기법으로 나타낸 IP 주소와 범위입니다. IP 주소는 이 주소 범위 내에서 할당됩니다.

exclude

array

선택 사항: CIDR 표기법으로 나타낸 0개 이상의 IP 주소 및 범위 목록입니다. 제외된 주소 범위 내의 IP 주소는 할당되지 않습니다.

network_name

string

선택 사항: 동일한 IP 주소 범위를 공유하더라도 각 포드 그룹 또는 도메인이 고유한 IP 주소 세트를 갖도록 보장하는 데 도움이 됩니다. 이 필드를 설정하는 것은 네트워크를 분리하고 체계적으로 유지하는 데 중요하며, 특히 다중 테넌트 환경에서 중요합니다.

다음 예에서는 Whereabouts를 사용하는 NAD 파일의 동적 주소 할당 구성을 보여줍니다.

특정 IP 주소 범위를 제외하는 동적 IP 주소 할당 위치

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}
Copy to Clipboard Toggle word wrap

다음 예에서는 다중 테넌트 네트워크에 대해 중복되는 IP 주소 범위를 사용하는 동적 IP 주소 할당을 보여줍니다.

NetworkAttachmentDefinition 1

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/29",
    "network_name": "example_net_common",
  }
}
Copy to Clipboard Toggle word wrap

다음과 같습니다.

network_name
선택적 매개변수입니다. 설정된 경우 NetworkAttachmentDefinition 2network_name 과 일치해야 합니다.

NetworkAttachmentDefinition 2

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/24",
    "network_name": "example_net_common",
  }
}
Copy to Clipboard Toggle word wrap

다음과 같습니다.

network_name
선택적 매개변수입니다. 설정된 경우 NetworkAttachmentDefinition 1network_name 과 일치해야 합니다.

4.1.2.3. SR-IOV 추가 네트워크 구성

SriovIBNetwork 오브젝트를 생성하여 SR-IOV 하드웨어를 사용하는 추가 네트워크를 구성할 수 있습니다. SriovIBNetwork 오브젝트를 생성하면 SR-IOV Operator에서 NetworkAttachmentDefinition 오브젝트를 자동으로 생성합니다.

참고

SriovIBNetwork 오브젝트가 running 상태의 pod에 연결된 경우 이 오브젝트를 수정하거나 삭제하지 마십시오.

사전 요구 사항

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

프로세스

  1. SriovIBNetwork 오브젝트를 생성한 다음 <name>.yaml 파일에 YAML을 저장합니다. 여기서 <name>은 이 추가 네트워크의 이름입니다. 오브젝트 사양은 다음 예와 유사할 수 있습니다.

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovIBNetwork
    metadata:
      name: attach1
      namespace: openshift-sriov-network-operator
    spec:
      resourceName: net1
      networkNamespace: project2
      ipam: |-
        {
          "type": "host-local",
          "subnet": "10.56.217.0/24",
          "rangeStart": "10.56.217.171",
          "rangeEnd": "10.56.217.181",
          "gateway": "10.56.217.1"
        }
    Copy to Clipboard Toggle word wrap
  2. 오브젝트를 생성하려면 다음 명령을 입력합니다:

    $ oc create -f <name>.yaml
    Copy to Clipboard Toggle word wrap

    여기서 <name>은 추가 네트워크의 이름을 지정합니다.

  3. 선택 사항: 이전 단계에서 생성한 SriovIBNetwork 오브젝트에 연결된 NetworkAttachmentDefinition 오브젝트가 존재하는지 확인하려면 다음 명령을 입력합니다. <namespace>SriovIBNetwork 오브젝트에 지정한 networkNamespace로 바꿉니다.

    $ oc get net-attach-def -n <namespace>
    Copy to Clipboard Toggle word wrap

4.1.2.4. InfiniBand 기반 SR-IOV 연결을 위한 런타임 구성

추가 네트워크에 pod를 연결할 때 런타임 구성을 지정하여 pod에 대한 특정 사용자 정의를 수행할 수 있습니다. 예를 들어 특정 MAC 하드웨어 주소를 요청할 수 있습니다.

Pod 사양에서 주석을 설정하여 런타임 구성을 지정합니다. 주석 키는 k8s.v1.cni.cncf.io/networks이며 런타임 구성을 설명하는 JSON 오브젝트를 허용합니다.

다음 JSON은 InfiniBand 기반 SR-IOV 네트워크 연결에 대한 런타임 구성 옵션을 설명합니다.

[
  {
    "name": "<network_attachment>",
    "infiniband-guid": "<guid>",
    "ips": ["<cidr_range>"]
  }
]
Copy to Clipboard Toggle word wrap

다음과 같습니다.

name
SR-IOV 네트워크 연결 정의 CR의 이름입니다.
infiniband-guid
SR-IOV 장치의 InfiniBand GUID입니다. 이 기능을 사용하려면 SriovIBNetwork 오브젝트에 { "infinibandGUID": true }도 지정해야 합니다.
ips
SR-IOV 네트워크 연결 정의 CR에 정의된 리소스 유형에서 할당된 SR-IOV 장치의 IP 주소입니다. IPv4 및 IPv6 주소가 모두 지원됩니다. 이 기능을 사용하려면 SriovIBNetwork 오브젝트에 { "ips": true }도 지정해야 합니다.
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  annotations:
    k8s.v1.cni.cncf.io/networks: |-
      [
        {
          "name": "ib1",
          "infiniband-guid": "c2:11:22:33:44:55:66:77",
          "ips": ["192.168.10.1/24", "2001::1/64"]
        }
      ]
spec:
  containers:
  - name: sample-container
    image: <image>
    imagePullPolicy: IfNotPresent
    command: ["sleep", "infinity"]
Copy to Clipboard Toggle word wrap

4.1.2.5. 보조 네트워크에 포드 추가

보조 네트워크에 포드를 추가할 수 있습니다. Pod는 기본 네트워크를 통해 정상적인 클러스터 관련 네트워크 트래픽을 계속 전송합니다.

포드가 생성되면 보조 네트워크가 포드에 연결됩니다. 하지만 포드가 이미 존재하는 경우 보조 네트워크를 연결할 수 없습니다.

포드는 보조 네트워크와 동일한 네임스페이스에 있어야 합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터에 로그인합니다.

프로세스

  1. Pod 오브젝트에 주석을 추가합니다. 다음 주석 형식 중 하나만 사용할 수 있습니다.

    1. 별도의 설정 없이 보조 네트워크를 연결하려면 다음 형식의 주석을 추가하십시오.

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      k8s.v1.cni.cncf.io/networks
      Pod와 연결할 보조 네트워크의 이름을 지정합니다. 두 개 이상의 보조 네트워크를 지정하려면 각 네트워크를 쉼표로 구분하세요. 쉼표 사이에 공백을 포함하지 마십시오. 동일한 추가 네트워크를 여러 번 지정하면 Pod에 해당 네트워크에 대한 인터페이스가 여러 개 연결됩니다.
    2. 사용자 정의를 사용하여 보조 네트워크를 연결하려면 다음 형식으로 주석을 추가하세요.

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "<network>",
                "namespace": "<namespace>",
                "default-route": ["<default_route>"]
              }
            ]
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      name
      NetworkAttachmentDefinition 객체로 정의된 보조 네트워크의 이름을 지정합니다.
      네임스페이스
      NetworkAttachmentDefinition 객체가 정의된 네임스페이스를 지정합니다.
      default-route
      선택적 매개변수입니다. 192.168.17.1 과 같은 기본 경로에 대한 재정의를 지정합니다.
  2. 다음 명령어를 입력하여 Pod를 생성하세요.

    $ oc create -f <name>.yaml
    Copy to Clipboard Toggle word wrap

    <name>을 Pod 이름으로 교체합니다.

  3. (선택 사항): 다음 명령어를 입력하여 pod CR에 어노테이션이 존재하는지 확인하십시오. <name>을 Pod 이름으로 교체합니다.

    $ oc get pod <name> -o yaml
    Copy to Clipboard Toggle word wrap

    다음 예에서 example-pod 포드는 net1 보조 네트워크에 연결됩니다.

    $ oc get pod example-pod -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: macvlan-bridge
        k8s.v1.cni.cncf.io/network-status: |-
          [{
              "name": "ovn-kubernetes",
              "interface": "eth0",
              "ips": [
                  "10.128.2.14"
              ],
              "default": true,
              "dns": {}
          },{
              "name": "macvlan-bridge",
              "interface": "net1",
              "ips": [
                  "20.2.2.100"
              ],
              "mac": "22:2f:60:a5:f8:00",
              "dns": {}
          }]
      name: example-pod
      namespace: default
    spec:
      ...
    status:
      ...
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    k8s.v1.cni.cncf.io/network-status
    객체로 구성된 JSON 배열을 지정합니다. 각 객체는 포드에 연결된 보조 네트워크의 상태를 설명합니다. 주석 값은 일반 텍스트 값으로 저장됩니다.
4.1.2.5.1. Pod에 vfio-pci SR-IOV 장치의 MTU 노출

추가 네트워크에 포드를 추가한 후 SR-IOV 네트워크에서 MTU를 사용할 수 있는지 확인할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 Pod 주석에 MTU가 포함되어 있는지 확인하세요.

    $ oc describe pod example-pod
    Copy to Clipboard Toggle word wrap

    다음 예에서는 샘플 출력을 보여줍니다.

    "mac": "20:04:0f:f1:88:01",
           "mtu": 1500,
           "dns": {},
           "device-info": {
             "type": "pci",
             "version": "1.1.0",
             "pci": {
               "pci-address": "0000:86:01.3"
        }
      }
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 포드 내부의 /etc/podnetinfo/ 에서 MTU를 사용할 수 있는지 확인하세요.

    $ oc exec example-pod -n sriov-tests -- cat /etc/podnetinfo/annotations | grep mtu
    Copy to Clipboard Toggle word wrap

    다음 예에서는 샘플 출력을 보여줍니다.

    k8s.v1.cni.cncf.io/network-status="[{
        \"name\": \"ovn-kubernetes\",
        \"interface\": \"eth0\",
        \"ips\": [
            \"10.131.0.67\"
        ],
        \"mac\": \"0a:58:0a:83:00:43\",
        \"default\": true,
        \"dns\": {}
        },{
        \"name\": \"sriov-tests/sriov-nic-1\",
        \"interface\": \"net1\",
        \"ips\": [
            \"192.168.10.1\"
        ],
        \"mac\": \"20:04:0f:f1:88:01\",
        \"mtu\": 1500,
        \"dns\": {},
        \"device-info\": {
            \"type\": \"pci\",
            \"version\": \"1.1.0\",
            \"pci\": {
                \"pci-address\": \"0000:86:01.3\"
            }
        }
        }]"
    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